diff --git a/lib/graphql/resolvers/admin.ex b/lib/graphql/resolvers/admin.ex index e79442fc3..76bb1a362 100644 --- a/lib/graphql/resolvers/admin.ex +++ b/lib/graphql/resolvers/admin.ex @@ -5,7 +5,7 @@ defmodule Mobilizon.GraphQL.Resolvers.Admin do import Mobilizon.Users.Guards - alias Mobilizon.{Actors, Admin, Config, Events, Instances, Users, Media} + alias Mobilizon.{Actors, Admin, Config, Events, Instances, Media, Users} alias Mobilizon.Actors.{Actor, Follower} alias Mobilizon.Admin.{ActionLog, Setting, SettingMedia} alias Mobilizon.Cldr.Language diff --git a/lib/graphql/schema/admin.ex b/lib/graphql/schema/admin.ex index 914e141c3..c5f2beb9a 100644 --- a/lib/graphql/schema/admin.ex +++ b/lib/graphql/schema/admin.ex @@ -128,10 +128,12 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do description: "The instance's logo", resolve: &Admin.get_instance_logo/3 ) + field(:instance_favicon, :media, description: "The instance's favicon", resolve: &Admin.get_instance_favicon/3 ) + field(:default_picture, :media, description: "The default picture", resolve: &Admin.get_default_picture/3 @@ -433,10 +435,12 @@ defmodule Mobilizon.GraphQL.Schema.AdminType do description: "The instance's logo, either as an object or directly the ID of an existing media" ) + arg(:instance_favicon, :media_input, description: "The instance's favicon, either as an object or directly the ID of an existing media" ) + arg(:default_picture, :media_input, description: "The default picture, either as an object or directly the ID of an existing media" diff --git a/lib/mobilizon/config.ex b/lib/mobilizon/config.ex index 3b6ccd02b..d86c14710 100644 --- a/lib/mobilizon/config.ex +++ b/lib/mobilizon/config.ex @@ -79,19 +79,19 @@ defmodule Mobilizon.Config do def instance_slogan, do: config_cached_value("instance", "instance_slogan") @spec instance_logo :: Media.t() | nil - def instance_logo, do: config_cached_value( "instance", "instance_logo") + def instance_logo, do: config_cached_value("instance", "instance_logo") @spec instance_favicon :: Media.t() | nil - def instance_favicon, do: config_cached_value( "instance", "instance_favicon") + def instance_favicon, do: config_cached_value("instance", "instance_favicon") @spec default_picture :: Media.t() | nil - def default_picture, do: config_cached_value( "instance", "default_picture") + def default_picture, do: config_cached_value("instance", "default_picture") @spec primary_color :: Media.t() | nil - def primary_color, do: config_cached_value( "instance", "primary_color") + def primary_color, do: config_cached_value("instance", "primary_color") @spec secondary_color :: Media.t() | nil - def secondary_color, do: config_cached_value( "instance", "secondary_color") + def secondary_color, do: config_cached_value("instance", "secondary_color") @spec contact :: String.t() | nil def contact, do: config_cached_value("instance", "contact") diff --git a/lib/web/controllers/manifest_controller.ex b/lib/web/controllers/manifest_controller.ex index 37b11b613..c26f841f9 100644 --- a/lib/web/controllers/manifest_controller.ex +++ b/lib/web/controllers/manifest_controller.ex @@ -6,30 +6,36 @@ defmodule Mobilizon.Web.ManifestController do @spec manifest(Plug.Conn.t(), any) :: Plug.Conn.t() def manifest(conn, _params) do - favicons = case Config.instance_favicon() do - %Media{file: %{url: url}, metadata: metadata} -> - [Map.merge( - %{ - src: url, - }, - case metadata do - %{width: width} -> %{sizes: "#{width}x#{width}"} - _ -> %{} - end - )] - _ -> [ - %{ - src: "./img/icons/android-chrome-512x512.png", - sizes: "512x512", - type: "image/png" - }, - %{ - src: "./img/icons/android-chrome-192x192.png", - sizes: "192x192", - type: "image/png" - } - ] - end + favicons = + case Config.instance_favicon() do + %Media{file: %{url: url}, metadata: metadata} -> + [ + Map.merge( + %{ + src: url + }, + case metadata do + %{width: width} -> %{sizes: "#{width}x#{width}"} + _ -> %{} + end + ) + ] + + _ -> + [ + %{ + src: "./img/icons/android-chrome-512x512.png", + sizes: "512x512", + type: "image/png" + }, + %{ + src: "./img/icons/android-chrome-192x192.png", + sizes: "192x192", + type: "image/png" + } + ] + end + json(conn, %{ name: Config.instance_name(), start_url: "/", diff --git a/lib/web/mobilizon_web.ex b/lib/web/mobilizon_web.ex index b59e38043..9848b880b 100644 --- a/lib/web/mobilizon_web.ex +++ b/lib/web/mobilizon_web.ex @@ -18,8 +18,7 @@ defmodule Mobilizon.Web do """ def static_paths, - do: - ~w(index.html service-worker.js css fonts img js robots.txt assets) + do: ~w(index.html service-worker.js css fonts img js robots.txt assets) def controller do quote do diff --git a/lib/web/templates/page/index.html.heex b/lib/web/templates/page/index.html.heex index cee55f61e..7cf7efa13 100644 --- a/lib/web/templates/page/index.html.heex +++ b/lib/web/templates/page/index.html.heex @@ -1,40 +1,38 @@ - - - - - - - - - - - - - <%= if root?(assigns) do %> - - - - <% end %> - <%= tags(assigns) || assigns.tags %> - <%= Vite.vite_client() %> - <%= Vite.vite_snippet("src/main.ts") %> - - - - -
- - + + + + + + + + + + + + <%= if root?(assigns) do %> + + + + <% end %> + <%= tags(assigns) || assigns.tags %> + <%= Vite.vite_client() %> + <%= Vite.vite_snippet("src/main.ts") %> + + + +
+ + diff --git a/lib/web/views/page_view.ex b/lib/web/views/page_view.ex index 0c1f8f6e0..d226f0f3f 100644 --- a/lib/web/views/page_view.ex +++ b/lib/web/views/page_view.ex @@ -95,17 +95,21 @@ defmodule Mobilizon.Web.PageView do defp favicon do case Config.instance_favicon() do - %{file: %{url: url}, metadata: metadata} -> %{ + %{file: %{url: url}, metadata: metadata} -> + %{ src: url, - sizes: case metadata do - %{width: width} -> "#{width}x#{width}" - _ -> "any" - end - } - _ -> %{ + sizes: + case metadata do + %{width: width} -> "#{width}x#{width}" + _ -> "any" + end + } + + _ -> + %{ src: "/img/icons/apple-touch-icon-152x152.png", sizes: "152x152" - } + } end end diff --git a/src/components/MobilizonLogo.vue b/src/components/MobilizonLogo.vue index 4e8ce69de..837f6b968 100644 --- a/src/components/MobilizonLogo.vue +++ b/src/components/MobilizonLogo.vue @@ -31,16 +31,10 @@ /> - +