mirror of
https://github.com/ash-project/ash_hq.git
synced 2024-09-19 12:53:49 +12:00
open graph metadata
This commit is contained in:
parent
95a6fae77a
commit
437fc69c88
3 changed files with 86 additions and 1 deletions
|
@ -20,6 +20,10 @@ defmodule AshHqWeb.Pages.Blog do
|
|||
<div class="flex flex-col sm:flex-row sm:pt-32 sm:mx-32 min-h-screen">
|
||||
<div class="sm:w-9/12">
|
||||
{#if @post}
|
||||
<head>
|
||||
<meta property="og:title" content={"Ash Framework Blog: #{@post.title}"}>
|
||||
<meta property="og:description" content={@post.tag_line}>
|
||||
</head>
|
||||
<div class="border shadow-sm rounded-lg px-8 pb-6 mb-6 dark:border-gray-600" ">
|
||||
<div class="border-b">
|
||||
<h1 class="mt-6 text-3xl font-semibold mb-4">{@post.title}</h1>
|
||||
|
@ -42,6 +46,13 @@ defmodule AshHqWeb.Pages.Blog do
|
|||
</div>
|
||||
</div>
|
||||
{#else}
|
||||
<head>
|
||||
<meta property="og:title" content="Ash Framework Blog">
|
||||
<meta
|
||||
property="og:description"
|
||||
content="A declarative foundation for ambitious Elixir applications. Model your domain, derive the rest."
|
||||
/>
|
||||
</head>
|
||||
{#if @tag}
|
||||
<h2 class="text-3xl font-semibold mb-1">Showing posts with tag: {@tag}</h2>
|
||||
{#else}
|
||||
|
|
|
@ -32,11 +32,17 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
data module, :any
|
||||
data mix_task, :any
|
||||
data positional_options, :list
|
||||
data description, :string
|
||||
data title, :string
|
||||
|
||||
@spec render(any) :: Phoenix.LiveView.Rendered.t()
|
||||
def render(assigns) do
|
||||
~F"""
|
||||
<div class="flex flex-col xl:flex-row justify-center">
|
||||
<head>
|
||||
<meta property="og:title" content={@title}>
|
||||
<meta property="og:description" content={@description}>
|
||||
</head>
|
||||
<div class="xl:hidden sticky top-20 z-40 h-14 bg-white dark:bg-base-dark-850 flex flex-row justify-start w-full space-x-12 items-center border-b border-t border-base-light-300 dark:border-base-dark-700 py-3">
|
||||
<button class="dark:hover:text-base-dark-600" phx-click={show_sidebar()}>
|
||||
<Heroicons.Outline.MenuIcon class="w-8 h-8 ml-4" />
|
||||
|
@ -765,6 +771,8 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
socket.assigns.module ->
|
||||
assign(socket,
|
||||
docs: socket.assigns.module.html_for,
|
||||
title: "Module: #{socket.assigns.module.name}",
|
||||
description: "View the documentation for #{socket.assigns.module.name} on Ash HQ.",
|
||||
doc_path: [socket.assigns.library.name, socket.assigns.module.name],
|
||||
options: []
|
||||
)
|
||||
|
@ -772,13 +780,28 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
socket.assigns.mix_task ->
|
||||
assign(socket,
|
||||
docs: socket.assigns.mix_task.html_for,
|
||||
title: "Mix Task: #{socket.assigns.mix_task.name}",
|
||||
description: "View the documentation for #{socket.assigns.mix_task.name} on Ash HQ.",
|
||||
doc_path: [socket.assigns.library.name, socket.assigns.mix_task.name],
|
||||
options: []
|
||||
)
|
||||
|
||||
socket.assigns.dsl ->
|
||||
meta_name =
|
||||
Enum.join(
|
||||
[
|
||||
socket.assigns.library.name,
|
||||
socket.assigns.extension.name
|
||||
] ++ socket.assigns.dsl.path ++ [socket.assigns.dsl.name],
|
||||
" > "
|
||||
)
|
||||
|
||||
meta_type = String.capitalize(to_string(socket.assigns.dsl.type))
|
||||
|
||||
assign(socket,
|
||||
docs: socket.assigns.dsl.html_for,
|
||||
title: "DSL #{meta_type}: #{meta_name}",
|
||||
description: "View the documentation for DSL #{meta_type}: #{meta_name} on Ash HQ.",
|
||||
doc_path:
|
||||
[
|
||||
socket.assigns.library.name,
|
||||
|
@ -794,22 +817,54 @@ defmodule AshHqWeb.Pages.Docs do
|
|||
socket.assigns.extension ->
|
||||
assign(socket,
|
||||
docs: socket.assigns.extension.html_for,
|
||||
title: "Extension: #{socket.assigns.extension.name}",
|
||||
description: "View the documentation for #{socket.assigns.extension.name} on Ash HQ.",
|
||||
doc_path: [socket.assigns.library.name, socket.assigns.extension.name],
|
||||
options: []
|
||||
)
|
||||
|
||||
socket.assigns.guide ->
|
||||
assign(socket,
|
||||
title: "Guide: #{socket.assigns.guide.name}",
|
||||
docs: socket.assigns.guide.html_for,
|
||||
description: "Read the \"#{socket.assigns.guide.name}\" guide on Ash HQ",
|
||||
doc_path: [socket.assigns.library.name, socket.assigns.guide.name],
|
||||
options: []
|
||||
)
|
||||
|
||||
true ->
|
||||
assign(socket, docs: "", doc_path: [], dsls: [], options: [])
|
||||
assign(socket,
|
||||
docs: "",
|
||||
title: "Ash Framework",
|
||||
description: default_description(),
|
||||
doc_path: [],
|
||||
dsls: [],
|
||||
options: []
|
||||
)
|
||||
end
|
||||
end
|
||||
|
||||
# defp description(html) do
|
||||
# This isn't predictably good content to put in a snippet :(
|
||||
# html
|
||||
# |> Floki.parse_fragment()
|
||||
# |> elem(1)
|
||||
# |> Floki.text()
|
||||
# |> String.split("\n", trim: true)
|
||||
# |> Stream.map(&String.trim/1)
|
||||
# |> Stream.map(&String.replace(&1, ~r/{{.*(?!}})$/, ""))
|
||||
# |> Stream.reject(&(&1 == ""))
|
||||
# |> Stream.take(4)
|
||||
# |> Enum.join("\n")
|
||||
# rescue
|
||||
# _ ->
|
||||
# default_description()
|
||||
# end
|
||||
|
||||
defp default_description do
|
||||
"A declarative foundation for ambitious Elixir applications. Model your domain, derive the rest."
|
||||
end
|
||||
|
||||
# workaround for https://github.com/patrick-steele-idem/morphdom/pull/231
|
||||
# Adding a unique ID on the container for the rendered docs prevents morphdom
|
||||
# merging them incorrectly.
|
||||
|
|
|
@ -45,6 +45,25 @@ defmodule AshHqWeb.AppViewLive do
|
|||
class={classes([@configured_theme, "h-full font-sans": true])}
|
||||
phx-hook="ColorTheme"
|
||||
>
|
||||
<head>
|
||||
<meta property="og:type" content="text/html">
|
||||
<meta property="og:image" content="https://ash-hq.org/images/ash-logo.png">
|
||||
<meta property="og:url" content={to_string(@uri)}>
|
||||
<meta property="og:site_name" content="Ash HQ">
|
||||
<meta property="twitter:card" content="summary_large_image">
|
||||
<meta property="twitter:domain" content="ash-hq.org">
|
||||
<meta property="twitter:site" content="@AshFramework">
|
||||
<!-- Need to adjust this for future blog writers -->
|
||||
<meta property="twitter:creator" content="@ZachSDaniel1">
|
||||
|
||||
{#if @live_action not in [:docs_dsl, :blog]}
|
||||
<meta property="og:title" content="Ash Framework">
|
||||
<meta
|
||||
property="og:description"
|
||||
content="A declarative foundation for ambitious Elixir applications. Model your domain, derive the rest."
|
||||
/>
|
||||
{/if}
|
||||
</head>
|
||||
<div id="snowflakeContainer" phx-hook="Snowflakes">
|
||||
<span class="snowflake" />
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue