plausible_web.ex 2.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. defmodule PlausibleWeb do
  2. def live_view(opts \\ []) do
  3. quote do
  4. use Plausible
  5. use Phoenix.LiveView, global_prefixes: ~w(x-)
  6. use PlausibleWeb.Live.Flash
  7. unless :no_sentry_context in unquote(opts) do
  8. use PlausibleWeb.Live.SentryContext
  9. end
  10. alias PlausibleWeb.Router.Helpers, as: Routes
  11. alias Phoenix.LiveView.JS
  12. end
  13. end
  14. def controller do
  15. quote do
  16. use Phoenix.Controller, namespace: PlausibleWeb
  17. import Plug.Conn
  18. import PlausibleWeb.ControllerHelpers
  19. alias PlausibleWeb.Router.Helpers, as: Routes
  20. end
  21. end
  22. def view do
  23. quote do
  24. use Phoenix.View,
  25. root: "lib/plausible_web/templates",
  26. namespace: PlausibleWeb
  27. # Import convenience functions from controllers
  28. import Phoenix.Controller, only: [view_module: 1]
  29. # Use all HTML functionality (forms, tags, etc)
  30. use Phoenix.HTML
  31. use Phoenix.Component
  32. import PlausibleWeb.ErrorHelpers
  33. import PlausibleWeb.FormHelpers
  34. import PlausibleWeb.Components.Generic
  35. alias PlausibleWeb.Router.Helpers, as: Routes
  36. end
  37. end
  38. def router do
  39. quote do
  40. use Phoenix.Router
  41. import Plug.Conn
  42. import Phoenix.Controller
  43. end
  44. end
  45. def channel do
  46. quote do
  47. use Phoenix.Channel
  48. end
  49. end
  50. def plugins_api_controller do
  51. quote do
  52. use Phoenix.Controller, namespace: PlausibleWeb.Plugins.API
  53. import Plug.Conn
  54. import PlausibleWeb.Router.Helpers
  55. alias PlausibleWeb.Plugins.API.Schemas
  56. alias PlausibleWeb.Plugins.API.Views
  57. alias PlausibleWeb.Plugins.API.Errors
  58. alias Plausible.Plugins.API
  59. plug(OpenApiSpex.Plug.CastAndValidate, json_render_error_v2: true, replace_params: false)
  60. use OpenApiSpex.ControllerSpecs
  61. end
  62. end
  63. def plugins_api_view do
  64. quote do
  65. use Phoenix.View,
  66. namespace: PlausibleWeb.Plugins.API,
  67. root: ""
  68. alias PlausibleWeb.Router.Helpers
  69. import PlausibleWeb.Plugins.API.Views.Pagination, only: [render_metadata_links: 4]
  70. end
  71. end
  72. def open_api_schema do
  73. quote do
  74. require OpenApiSpex
  75. alias OpenApiSpex.Schema
  76. alias PlausibleWeb.Plugins.API.Schemas
  77. end
  78. end
  79. @doc """
  80. When used, dispatch to the appropriate controller/view/etc.
  81. """
  82. defmacro __using__(which) when is_atom(which) do
  83. apply(__MODULE__, which, [])
  84. end
  85. defmacro __using__([{which, opts}]) when is_atom(which) do
  86. apply(__MODULE__, which, [List.wrap(opts)])
  87. end
  88. end