Update CSS and HTML
This commit is contained in:
parent
82276d6a48
commit
65dd0847bf
24 changed files with 1164 additions and 773 deletions
11
README.md
11
README.md
|
|
@ -16,3 +16,14 @@ Ready to run in production? Please [check our deployment guides](https://hexdocs
|
|||
* Docs: https://hexdocs.pm/phoenix
|
||||
* Forum: https://elixirforum.com/c/phoenix-forum
|
||||
* Source: https://github.com/phoenixframework/phoenix
|
||||
|
||||
## Dev secret template
|
||||
|
||||
```
|
||||
import Config
|
||||
|
||||
directus_url = ""
|
||||
directus_token = ""
|
||||
|
||||
config :mse25, :directus, base_url: directus_url, token: directus_token
|
||||
```
|
||||
|
|
|
|||
1042
assets/app.css
1042
assets/app.css
File diff suppressed because it is too large
Load diff
|
|
@ -26,7 +26,7 @@ config :esbuild,
|
|||
version: "0.17.11",
|
||||
mse25: [
|
||||
args:
|
||||
~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/bl/* --external:/images/* --external:/*.{vcf,png,ico,pdf}),
|
||||
~w(js/app.js --bundle --target=es2017 --outdir=../priv/static/assets --external:/bl/* --external:/images/* --external:/*.{vcf,png,ico,pdf,jpg}),
|
||||
cd: Path.expand("../assets", __DIR__),
|
||||
env: %{"NODE_PATH" => Path.expand("../deps", __DIR__)}
|
||||
]
|
||||
|
|
|
|||
|
|
@ -42,6 +42,31 @@ defmodule Mse25.Directus do
|
|||
get("/articles?" <> params)
|
||||
end
|
||||
|
||||
def get_note(slug) do
|
||||
get_item(:notes, slug)
|
||||
end
|
||||
|
||||
def get_notes!(options \\ []) do
|
||||
params =
|
||||
[
|
||||
"fields=" <>
|
||||
Enum.join(
|
||||
[
|
||||
"id",
|
||||
"contents",
|
||||
"images",
|
||||
"date_created",
|
||||
"location"
|
||||
],
|
||||
","
|
||||
)
|
||||
]
|
||||
|> annual?(:notes, options)
|
||||
|> query_params_string(options, :notes)
|
||||
|
||||
get("/notes?" <> params)
|
||||
end
|
||||
|
||||
def get_album(externalId) do
|
||||
case get_item(
|
||||
:albums,
|
||||
|
|
@ -198,6 +223,13 @@ defmodule Mse25.Directus do
|
|||
end
|
||||
end
|
||||
|
||||
defp get_item(:notes, externalId, fields) do
|
||||
case get("/notes?fields=" <> fields <> "&filter[id][_eq]=" <> externalId) do
|
||||
[] -> {:not_found, externalId}
|
||||
[item | _] -> {:ok, item}
|
||||
end
|
||||
end
|
||||
|
||||
defp get_item(collection, slug, fields) do
|
||||
case get(
|
||||
"/" <> to_string(collection) <> "?fields=" <> fields <> "&filter[slug][_eq]=" <> slug
|
||||
|
|
|
|||
54
lib/mse25_web/components/breadcrumbs.ex
Normal file
54
lib/mse25_web/components/breadcrumbs.ex
Normal file
|
|
@ -0,0 +1,54 @@
|
|||
defmodule Mse25Web.Breadcrumbs do
|
||||
use Mse25Web, :html
|
||||
|
||||
def breadcrumbs_html(assigns) do
|
||||
~H"""
|
||||
<div class="breadcrumbs">
|
||||
<span class="sr-only">Du är här:</span>
|
||||
<span class="trail" itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||
<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="/" rel="home">
|
||||
<span itemprop="name">madr.se</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="1" />
|
||||
</span>
|
||||
<%= for {index, {parent_slug, parent_name}} <- breadcrumbs(@trail) do %>
|
||||
<span class="sr-only">></span>
|
||||
<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href={parent_slug}>
|
||||
<span itemprop="name"><%= parent_name %></span>
|
||||
</a>
|
||||
<meta itemprop="position" content={index} />
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
</div>
|
||||
"""
|
||||
end
|
||||
|
||||
defp breadcrumbs(nodes) do
|
||||
breadcrumbs([], "", 1, nodes)
|
||||
end
|
||||
|
||||
defp breadcrumbs(seen, _path, _index, []) do
|
||||
Enum.reverse(seen)
|
||||
end
|
||||
|
||||
defp breadcrumbs(seen, path, index, [{slug, name} | nodes]) do
|
||||
breadcrumbs(
|
||||
[{index + 1, {path <> "/" <> to_string(slug), name}} | seen],
|
||||
path <> "/" <> to_string(slug),
|
||||
index + 1,
|
||||
nodes
|
||||
)
|
||||
end
|
||||
|
||||
defp breadcrumbs(seen, path, index, [{slug, name, custom_prefix} | nodes]) do
|
||||
breadcrumbs(
|
||||
[{index + 1, {custom_prefix <> "/" <> to_string(slug), name}} | seen],
|
||||
path <> "/" <> to_string(slug),
|
||||
index + 1,
|
||||
nodes
|
||||
)
|
||||
end
|
||||
end
|
||||
|
|
@ -78,32 +78,6 @@ defmodule Mse25Web.Layouts do
|
|||
"""
|
||||
end
|
||||
|
||||
def breadcrumbs(nodes) do
|
||||
breadcrumbs([], "", 1, nodes)
|
||||
end
|
||||
|
||||
def breadcrumbs(seen, _path, _index, []) do
|
||||
Enum.reverse(seen)
|
||||
end
|
||||
|
||||
def breadcrumbs(seen, path, index, [{slug, name} | nodes]) do
|
||||
breadcrumbs(
|
||||
[{index + 1, {path <> "/" <> to_string(slug), name}} | seen],
|
||||
path <> "/" <> to_string(slug),
|
||||
index + 1,
|
||||
nodes
|
||||
)
|
||||
end
|
||||
|
||||
def breadcrumbs(seen, path, index, [{slug, name, custom_prefix} | nodes]) do
|
||||
breadcrumbs(
|
||||
[{index + 1, {custom_prefix <> "/" <> to_string(slug), name}} | seen],
|
||||
path <> "/" <> to_string(slug),
|
||||
index + 1,
|
||||
nodes
|
||||
)
|
||||
end
|
||||
|
||||
def show_interactive_event_map?(assigns) do
|
||||
Map.has_key?(assigns, :events)
|
||||
end
|
||||
|
|
@ -111,4 +85,12 @@ defmodule Mse25Web.Layouts do
|
|||
def show_footer?(%{heading: "Kolofon"}), do: false
|
||||
|
||||
def show_footer?(%{}), do: true
|
||||
|
||||
def current?(_key, []) do
|
||||
false
|
||||
end
|
||||
|
||||
def current?(k, path) do
|
||||
Enum.member?(path, k)
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,36 +1,72 @@
|
|||
<a href="#content" class="skiplink">Hoppa till innehållet</a>
|
||||
|
||||
<nav>
|
||||
<span class="sr-only">Du är här:</span>
|
||||
<span class="breadcrumbs" itemscope itemtype="https://schema.org/BreadcrumbList">
|
||||
<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href="/" rel="home">
|
||||
<span itemprop="name">madr.se</span>
|
||||
</a>
|
||||
<meta itemprop="position" content="1" />
|
||||
</span>
|
||||
<%= for {index, {parent_slug, parent_name}} <- breadcrumbs(@breadcrumbs) do %>
|
||||
<span class="sr-only">></span>
|
||||
<span itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem">
|
||||
<a href={parent_slug}>
|
||||
<span itemprop="name"><%= parent_name %></span>
|
||||
<header>
|
||||
<strong>
|
||||
<a href="/" rel="home">madr.se</a>
|
||||
</strong>
|
||||
<nav>
|
||||
<ul>
|
||||
<li>
|
||||
<a
|
||||
class={if current?("webblogg", @conn.path_info), do: "current", else: ""}
|
||||
href="/webblogg"
|
||||
>
|
||||
Webblogg
|
||||
</a>
|
||||
<meta itemprop="position" content={index} />
|
||||
</span>
|
||||
<% end %>
|
||||
</span>
|
||||
</nav>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
class={if current?("delningar", @conn.path_info), do: "current", else: ""}
|
||||
href="/delningar"
|
||||
>
|
||||
Länkar
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
class={if current?("anteckningar", @conn.path_info), do: "current", else: ""}
|
||||
href="/anteckningar"
|
||||
>
|
||||
Anteckningar
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a
|
||||
class={if current?("evenemang", @conn.path_info), do: "current", else: ""}
|
||||
href="/evenemang"
|
||||
>
|
||||
Evenemang
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a class={if current?("om", @conn.path_info), do: "current", else: ""} href="/om">
|
||||
Om
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</nav>
|
||||
<div>
|
||||
<!-- <dl> -->
|
||||
<!-- <dt>18 apr</dt> -->
|
||||
<!-- <dd>Behemoth</dd> -->
|
||||
<!-- <dt>5 jun</dt> -->
|
||||
<!-- <dd>Sweden Rock Festival</dd> -->
|
||||
<!-- </dl> -->
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<main id="content">
|
||||
<%= @inner_content %>
|
||||
</main>
|
||||
<%= if show_footer?(assigns) do %>
|
||||
<footer>
|
||||
<p vocab="https://schema.org/" typeof="Person">
|
||||
<footer vocab="https://schema.org/" typeof="Person">
|
||||
<img src={~p"/mugshot.jpg"} property="image" alt="Anders, hösten 2021" />
|
||||
<p>
|
||||
<a href="https://madr.se" property="url">madr.se</a>
|
||||
är <span property="name">Anders Englöf Ytterström</span>s hemsida. Anders är <span property="jobTitle">webbutvecklare</span>, linuxentusiast, ljudtekniker och hårdrockare, bosatt i <span
|
||||
property="address"
|
||||
typeof="PostalAddress"
|
||||
><span property="addressLocality">Borlänge</span> (<span property="addressRegion">Dalarna</span>)</span>.
|
||||
är hemsida åt <span property="name">Anders Englöf Ytterström</span>, en
|
||||
<span property="jobTitle">webbutvecklare</span>
|
||||
och <span property="skills">hårdrockare</span>
|
||||
från <span property="address" typeof="PostalAddress"><span property="addressLocality">Borlänge</span>, <span property="addressRegion">Dalarna</span></span>.
|
||||
Läs <a href="/colophon">kolofonen</a>.
|
||||
</p>
|
||||
</footer>
|
||||
|
|
|
|||
|
|
@ -41,6 +41,13 @@ defmodule Mse25Web.ItemController do
|
|||
end
|
||||
end
|
||||
|
||||
defp fetch([_year, album_id], :note) do
|
||||
case Directus.get_note(album_id) do
|
||||
{:ok, response} -> {:ok, :note, response}
|
||||
not_found -> not_found
|
||||
end
|
||||
end
|
||||
|
||||
defp fetch([year, "brutal-legend-" <> external_id]) do
|
||||
fetch([year, external_id], :album)
|
||||
end
|
||||
|
|
@ -174,6 +181,21 @@ defmodule Mse25Web.ItemController do
|
|||
]
|
||||
end
|
||||
|
||||
defp assigns(:note, %{
|
||||
"contents" => text,
|
||||
"images" => images,
|
||||
"date_created" => published_at
|
||||
}) do
|
||||
year = String.slice(published_at, 0..3)
|
||||
|
||||
[
|
||||
text: Earmark.as_html!(text),
|
||||
breadcrumbs: [{"anteckningar", "Anteckningar"}, {year, year, ""}],
|
||||
date_created: String.slice(published_at, 0..9),
|
||||
images: images
|
||||
]
|
||||
end
|
||||
|
||||
defp assigns(:album, %{
|
||||
"year" => year,
|
||||
"album" => album,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
defmodule Mse25Web.ItemHTML do
|
||||
use Mse25Web, :html
|
||||
import Mse25.EventHelpers
|
||||
import Mse25Web.Breadcrumbs
|
||||
|
||||
embed_templates "item_html/*"
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,5 @@
|
|||
<article class="article" vocab="https://schema.org/" typeof="Article">
|
||||
<article class="collapsed article card" vocab="https://schema.org/" typeof="Article">
|
||||
<%= breadcrumbs_html(%{:trail => @breadcrumbs}) %>
|
||||
<h1 property="name"><%= @heading %></h1>
|
||||
|
||||
<div property="articleBody">
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
<article class="event" vocab="https://schema.org/" typeof="Event Review">
|
||||
<article class="event card" vocab="https://schema.org/" typeof="Event Review">
|
||||
<h1 property="name"><%= @heading %></h1>
|
||||
|
||||
<ul>
|
||||
|
|
|
|||
10
lib/mse25_web/controllers/item_html/note.html.heex
Normal file
10
lib/mse25_web/controllers/item_html/note.html.heex
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
<article class="collapsed article card" vocab="https://schema.org/" typeof="Article">
|
||||
<h1 property="name articleBody"><%= raw(@contents) %></h1>
|
||||
|
||||
<footer>
|
||||
<p>
|
||||
Publicerad <time property="datePublished"><%= @published_at %></time>
|
||||
av <span property="publisher">Anders Englöf Ytterström</span>
|
||||
</p>
|
||||
</footer>
|
||||
</article>
|
||||
|
|
@ -1,4 +1,4 @@
|
|||
<article class="article" vocab="https://schema.org/" typeof="Article">
|
||||
<article class="card article" vocab="https://schema.org/" typeof="Article">
|
||||
<h1 property="name"><%= @heading %></h1>
|
||||
|
||||
<div property="articleBody">
|
||||
|
|
|
|||
|
|
@ -8,9 +8,9 @@ defmodule Mse25Web.PageController do
|
|||
|
||||
def home(conn, _params) do
|
||||
[most_recent_article, older_article] = Directus.get_articles!(limit: 2)
|
||||
recent_event = Directus.get_events!(limit: 1)
|
||||
upcoming_events = Directus.get_events!(limit: 2, upcoming: true)
|
||||
brutal_legends = Directus.get_albums!(limit: 1)
|
||||
recent_event = Directus.get_events!(limit: 3)
|
||||
upcoming_events = Directus.get_events!(limit: 3, upcoming: true)
|
||||
brutal_legends = Directus.get_albums!(limit: 8)
|
||||
|
||||
render(conn, :home,
|
||||
page_title: "Anders Englöf Ytterström",
|
||||
|
|
@ -68,6 +68,26 @@ defmodule Mse25Web.PageController do
|
|||
)
|
||||
end
|
||||
|
||||
def notes(conn, params) do
|
||||
{notes, page_title} =
|
||||
case params do
|
||||
%{"q" => query_string} ->
|
||||
{Directus.get_notes!(limit: @almost_infinity, query: query_string),
|
||||
"Anteckningar: \"#{query_string}\""}
|
||||
|
||||
_ ->
|
||||
{Directus.get_notes!(limit: @almost_infinity), "Anteckningar"}
|
||||
end
|
||||
|
||||
render(conn, :notes,
|
||||
page_title: page_title,
|
||||
breadcrumbs: [],
|
||||
notes: group_by_creation_date(notes),
|
||||
q: params["q"],
|
||||
nosearch?: params["q"] == nil or params["q"] == ""
|
||||
)
|
||||
end
|
||||
|
||||
def events(conn, params) do
|
||||
{_, %{"title" => title, "contents" => contents}} = Directus.get_page("evenemang")
|
||||
|
||||
|
|
@ -93,7 +113,7 @@ defmodule Mse25Web.PageController do
|
|||
end
|
||||
|
||||
def links(conn, _params) do
|
||||
links = Directus.get_links!(limit: @almost_infinity) |> group_by_date
|
||||
links = Directus.get_links!(limit: @almost_infinity) |> group_by_pub_date
|
||||
|
||||
render(conn, :links,
|
||||
page_title: "Delningar",
|
||||
|
|
@ -109,10 +129,31 @@ defmodule Mse25Web.PageController do
|
|||
|> Enum.sort(fn {a, _a}, {b, _b} -> b < a end)
|
||||
end
|
||||
|
||||
defp group_by_date(items) do
|
||||
defp group_by_pub_date(items) do
|
||||
items
|
||||
|> Enum.group_by(fn %{"pubDate" => pub_date} -> pub_date end)
|
||||
|> Map.to_list()
|
||||
|> Enum.sort(fn {a, _a}, {b, _b} -> b < a end)
|
||||
end
|
||||
|
||||
defp group_by_creation_date(items) do
|
||||
items
|
||||
|> Enum.group_by(fn %{"date_created" => pub_date} -> String.slice(pub_date, 0..9) end)
|
||||
|> Map.to_list()
|
||||
|> Enum.sort(fn {a, _a}, {b, _b} -> b < a end)
|
||||
end
|
||||
|
||||
# redirect routes
|
||||
|
||||
def cv(conn, _params) do
|
||||
redirect(conn, to: ~p"/cv/anders-englof-ytterstrom.html")
|
||||
end
|
||||
|
||||
def brutal_legend(conn, _params) do
|
||||
redirect(conn, to: ~p"/bl/index.html")
|
||||
end
|
||||
|
||||
def mugshot(conn, _params) do
|
||||
redirect(conn, to: ~p"/images/mugshot.jpg")
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,6 +1,11 @@
|
|||
defmodule Mse25Web.PageHTML do
|
||||
use Mse25Web, :html
|
||||
import Mse25.EventHelpers
|
||||
import Mse25Web.Breadcrumbs
|
||||
|
||||
embed_templates "page_html/*"
|
||||
|
||||
defp fancy_timestamp(datestr) do
|
||||
datestr |> IO.inspect()
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -1,41 +1,46 @@
|
|||
<h1>
|
||||
<%= @page_title %>
|
||||
</h1>
|
||||
<p>
|
||||
Inlägg skrivna sedan 2006.
|
||||
<%= if @nosearch? do %>
|
||||
Gå direkt till:
|
||||
<% end %>
|
||||
</p>
|
||||
<ul class="months">
|
||||
<%= for {year, articles} <- @articles do %>
|
||||
<li>
|
||||
<a href={"#y" <> year}><%= year %></a> (<%= Enum.count(articles) %>)
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<form method="get" action="/webblogg">
|
||||
<div class="head">
|
||||
<%= breadcrumbs_html(%{:trail => @breadcrumbs}) %>
|
||||
<h1>
|
||||
<%= @page_title %>
|
||||
</h1>
|
||||
<p>
|
||||
Inlägg skrivna sedan 2006.
|
||||
<%= if @nosearch? do %>
|
||||
Eller
|
||||
Gå direkt till:
|
||||
<% end %>
|
||||
<label for="q">sök innehåll</label>:
|
||||
<input type="search" value={@q} name="q" id="q" size="7" />
|
||||
<button>Sök</button>
|
||||
</p>
|
||||
</form>
|
||||
<%= for {year, articles} <- @articles do %>
|
||||
<section id={"y" <> year}>
|
||||
<h2 class="sticky"><%= year %></h2>
|
||||
<div class="articles">
|
||||
<%= for article <- articles do %>
|
||||
<article class="article" vocab="https://schema.org/" typeof="Article">
|
||||
<h2 property="name">
|
||||
<a href={"/" <> article["slug"]}><%= article["title"] %></a>
|
||||
</h2>
|
||||
<time><%= article["pubDate"] %></time>
|
||||
</article>
|
||||
<ul class="months">
|
||||
<%= for {year, articles} <- @articles do %>
|
||||
<li>
|
||||
<a href={"#y" <> year}><%= year %></a> (<%= Enum.count(articles) %>)
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<form method="get" action="/webblogg">
|
||||
<p>
|
||||
<%= if @nosearch? do %>
|
||||
Eller
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
<label for="q">sök innehåll</label>:
|
||||
<input type="search" value={@q} name="q" id="q" size="7" />
|
||||
<button>Sök</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
<div class="cards">
|
||||
<%= for {year, articles} <- @articles do %>
|
||||
<section class="card" id={"y" <> year}>
|
||||
<h2 class="bookmark-date"><%= year %></h2>
|
||||
<div class="articles">
|
||||
<%= for article <- articles do %>
|
||||
<article class="article" vocab="https://schema.org/" typeof="Article">
|
||||
<time><%= article["pubDate"] %></time>
|
||||
<h3 property="name">
|
||||
<a href={"/" <> article["slug"]}><%= article["title"] %></a>
|
||||
</h3>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,70 +1,77 @@
|
|||
<h1><%= @page_title %></h1>
|
||||
<div class="head">
|
||||
<h1><%= @page_title %></h1>
|
||||
<%= raw(@contents) %>
|
||||
<p>
|
||||
<%= if @nosearch? do %>
|
||||
Gå direkt till:
|
||||
<% end %>
|
||||
</p>
|
||||
<ul class="months">
|
||||
<%= for {year, events} <- @events do %>
|
||||
<li>
|
||||
<a href={"#y" <> year}><%= year %></a> (<%= Enum.count(events) %>)
|
||||
</li>
|
||||
<% end %>
|
||||
</ul>
|
||||
<form method="get" action="/evenemang">
|
||||
<p>
|
||||
<%= if @nosearch? do %>
|
||||
Eller
|
||||
<% end %>
|
||||
<label for="q">sök innehåll</label>:
|
||||
<input type="search" value={@q} name="q" id="q" size="7" />
|
||||
<button>Sök</button>
|
||||
</p>
|
||||
</form>
|
||||
</div>
|
||||
|
||||
<%= raw(@contents) %>
|
||||
<section id="map">
|
||||
<h2>Geografisk utspridning</h2>
|
||||
<figure>
|
||||
<div id="leaflet" class="interactive-map"></div>
|
||||
</figure>
|
||||
</section>
|
||||
<p>
|
||||
<%= if @nosearch? do %>
|
||||
Gå direkt till:
|
||||
<% end %>
|
||||
</p>
|
||||
<ul class="months">
|
||||
|
||||
<div class="bookmarks">
|
||||
<%= for {year, events} <- @events do %>
|
||||
<li>
|
||||
<a href={"#y" <> year}><%= year %></a> (<%= Enum.count(events) %>)
|
||||
</li>
|
||||
<section class="card" id={"y" <> year}>
|
||||
<h2 class="sticky bookmark-date"><%= year %></h2>
|
||||
<div class="events">
|
||||
<%= for event <- events do %>
|
||||
<article class="event" vocab="https://schema.org/" typeof="Event">
|
||||
<h3>
|
||||
<a property="name" href={"/" <> event["slug"]}><%= event["title"] %></a>
|
||||
</h3>
|
||||
<div>
|
||||
<p property="description"><%= event["lead"] %></p>
|
||||
<%= if hilights?(event) do %>
|
||||
<p>
|
||||
Personliga höjdpunkter: <%= rdfa_bandlist(event["bands"]) |> raw %>
|
||||
</p>
|
||||
<% end %>
|
||||
<%= if missed?(event) do %>
|
||||
<p>
|
||||
Band jag missade: <%= bandlist(event["mia"]) %>
|
||||
</p>
|
||||
<% end %>
|
||||
<%= if opening_acts?(event) do %>
|
||||
<p>
|
||||
Förband: <%= event["bands"] |> Enum.drop(1) |> rdfa_bandlist() |> raw %>
|
||||
</p>
|
||||
<% end %>
|
||||
</div>
|
||||
<%= if event["poster"] do %>
|
||||
<img
|
||||
property="thumbnail"
|
||||
loading="lazy"
|
||||
src={"https://n.madr.se/assets/" <> event["poster"] <> "?key=poster"}
|
||||
alt="affisch"
|
||||
width="150"
|
||||
/>
|
||||
<% end %>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
</ul>
|
||||
<form method="get" action="/evenemang">
|
||||
<p>
|
||||
<%= if @nosearch? do %>
|
||||
Eller
|
||||
<% end %>
|
||||
<label for="q">sök innehåll</label>:
|
||||
<input type="search" value={@q} name="q" id="q" size="7" />
|
||||
<button>Sök</button>
|
||||
</p>
|
||||
</form>
|
||||
<%= for {year, events} <- @events do %>
|
||||
<section id={"y" <> year}>
|
||||
<h2 class="sticky"><%= year %></h2>
|
||||
<div class="events">
|
||||
<%= for event <- events do %>
|
||||
<article class="event" vocab="https://schema.org/" typeof="Event">
|
||||
<h2>
|
||||
<a property="name" href={"/" <> event["slug"]}><%= event["title"] %></a>
|
||||
</h2>
|
||||
<p property="description"><%= event["lead"] %></p>
|
||||
<%= if hilights?(event) do %>
|
||||
<p>
|
||||
Personliga höjdpunkter: <%= rdfa_bandlist(event["bands"]) |> raw %>
|
||||
</p>
|
||||
<% end %>
|
||||
<%= if missed?(event) do %>
|
||||
<p>
|
||||
Band jag missade: <%= bandlist(event["mia"]) %>
|
||||
</p>
|
||||
<% end %>
|
||||
<%= if opening_acts?(event) do %>
|
||||
<p>
|
||||
Förband: <%= event["bands"] |> Enum.drop(1) |> rdfa_bandlist() |> raw %>
|
||||
</p>
|
||||
<% end %>
|
||||
<%= if event["poster"] do %>
|
||||
<img
|
||||
property="thumbnail"
|
||||
loading="lazy"
|
||||
src={"https://n.madr.se/assets/" <> event["poster"] <> "?key=poster"}
|
||||
alt="affisch"
|
||||
width="150"
|
||||
/>
|
||||
<% end %>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
|
|||
|
|
@ -1,134 +1,123 @@
|
|||
<main class="landing">
|
||||
<img src={~p"/images/aey.svg"} width="120" alt="Anders Englöf Ytterström" />
|
||||
<h1 class="home-h1">Anders Englöf Ytterström</h1>
|
||||
<ul class="tree">
|
||||
<li class="article">
|
||||
<span></span>
|
||||
<div class="uc">Under construction <a href="/2025/ombyggnation">Va?</a> 🚧</div>
|
||||
<div class="home-hero">
|
||||
<img src={~p"/mugshot.jpg"} alt="Anders, hösten 2021" />
|
||||
<h1 class="home-h1">Anders Englöf Ytterström</h1>
|
||||
<p>Webbutvecklare med 18 års erfarenhet, med särskilt intresse för tillgänglighet,
|
||||
containerteknik och webbstandarder. Hårdrockare och Linuxanvändare.</p>
|
||||
<div class="c2a">
|
||||
<a href="/cv">CV</a>
|
||||
<a href="/om">Om mig</a>
|
||||
<a href="https://github.com/madr" rel="external">Min Github</a>
|
||||
<a
|
||||
href="https://se.linkedin.com/in/anders-engl%C3%B6f-ytterstr%C3%B6m-0ba4452a2"
|
||||
rel="external"
|
||||
>
|
||||
Min LinkedIn
|
||||
</a>
|
||||
</div>
|
||||
<a href="/vad-jag-gor">
|
||||
Vad jag gör
|
||||
</a>
|
||||
</div>
|
||||
<div class="home-section articles-color">
|
||||
<h2>Blogginlägg</h2>
|
||||
<div class="home-articles">
|
||||
<a href={"/" <> @recent_article["slug"]}>
|
||||
<%= @recent_article["title"] %>
|
||||
<small><time><%= @recent_article["pubDate"] %></time></small>
|
||||
</a>
|
||||
<small><time><%= @recent_article["pubDate"] %></time></small>
|
||||
</li>
|
||||
<li class="article">
|
||||
<span></span>
|
||||
<a href={"/" <> @older_article["slug"]}>
|
||||
<%= @older_article["title"] %>
|
||||
<small><time><%= @older_article["pubDate"] %></time></small>
|
||||
</a>
|
||||
<small><time><%= @older_article["pubDate"] %></time></small>
|
||||
</li>
|
||||
<li class="page">
|
||||
<span></span>
|
||||
<a href="/webblogg" class="list-link">Alla Webbloggens inlägg</a>
|
||||
</li>
|
||||
<%= for event <- @recent_event do %>
|
||||
<li class="events">
|
||||
<%= if event["poster"] do %>
|
||||
<img
|
||||
src={"https://n.madr.se/assets/" <> event["poster"] <> "?key=thumbnail"}
|
||||
alt="affisch"
|
||||
loading="lazy"
|
||||
/>
|
||||
<% else %>
|
||||
<span></span>
|
||||
<% end %>
|
||||
<a href={event["slug"]} title={event["lead"]}>
|
||||
<%= event["title"] %>
|
||||
</a>
|
||||
<small><time><%= event["started_at"] %></time></small>
|
||||
</li>
|
||||
<% end %>
|
||||
<%= for event <- @upcoming do %>
|
||||
<li class="events">
|
||||
<%= if event["poster"] do %>
|
||||
<img
|
||||
src={"https://n.madr.se/assets/" <> event["poster"] <> "?key=thumbnail"}
|
||||
alt="affisch"
|
||||
loading="lazy"
|
||||
/>
|
||||
<% else %>
|
||||
<span></span>
|
||||
<% end %>
|
||||
<%= event["title"] %>
|
||||
<small><time><%= event["started_at"] %></time></small>
|
||||
</li>
|
||||
<% end %>
|
||||
<li class="feed events page">
|
||||
<span></span>
|
||||
<a href="/evenemang" class="list-link">Evenemangstidslinje</a>
|
||||
<span></span>
|
||||
</li>
|
||||
<li class="feed events ics">
|
||||
<span></span>
|
||||
</div>
|
||||
<a href="/webblogg" class="list-link">Alla Webbloggens inlägg</a>
|
||||
</div>
|
||||
<div class="home-section events-color">
|
||||
<h2>Evenemang</h2>
|
||||
|
||||
<h3>Kommande evenemang</h3>
|
||||
<div class="home-events home-grid">
|
||||
<%= for event <- @upcoming do %>
|
||||
<article>
|
||||
<a href={event["slug"]}>
|
||||
<%= if event["poster"] do %>
|
||||
<img
|
||||
src={"https://n.madr.se/assets/" <> event["poster"] <> "?key=poster"}
|
||||
alt="affisch"
|
||||
loading="lazy"
|
||||
class="poster-image"
|
||||
/>
|
||||
<% else %>
|
||||
<span class="poster-image poster-placeholder"></span>
|
||||
<% end %>
|
||||
</a>
|
||||
<div class="event-meta">
|
||||
<div><time><%= event["started_at"] %></time></div>
|
||||
<div><%= event["title"] %></div>
|
||||
</div>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<h3>Besökta evenemang</h3>
|
||||
<div class="home-events home-grid">
|
||||
<%= for event <- @recent_event do %>
|
||||
<article>
|
||||
<a href={event["slug"]}>
|
||||
<%= if event["poster"] do %>
|
||||
<img
|
||||
src={"https://n.madr.se/assets/" <> event["poster"] <> "?key=poster"}
|
||||
alt="affisch"
|
||||
loading="lazy"
|
||||
class="poster-image"
|
||||
/>
|
||||
<% else %>
|
||||
<span class="poster-image poster-placeholder"></span>
|
||||
<% end %>
|
||||
</a>
|
||||
<div class="event-meta">
|
||||
<div><time><%= event["started_at"] %></time></div>
|
||||
<div><%= event["title"] %></div>
|
||||
</div>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
|
||||
<p class="head">
|
||||
Se <a href="/evenemang" class="list-link">Evenemangstidslinje</a>
|
||||
för alla besökta evenemang.
|
||||
Vill du haka på? Prenumerera på
|
||||
<a href="/kommande-evenemang.ics" class="feed-link">Kommande evenemang</a>
|
||||
<small>.ics</small>
|
||||
</li>
|
||||
<li class="feed links">
|
||||
<span></span>
|
||||
<a href="/delningar" class="list-link">
|
||||
Delningar
|
||||
</a>
|
||||
<span></span>
|
||||
</li>
|
||||
<%= for legend <- @brutal_legends do %>
|
||||
<li class="album">
|
||||
<%= if legend["cover"] do %>
|
||||
<img
|
||||
src={"https://n.madr.se/assets/" <> legend["cover"] <> "?key=thumbnail"}
|
||||
alt="skivomslag"
|
||||
loading="lazy"
|
||||
/>
|
||||
<% else %>
|
||||
<span></span>
|
||||
<% end %>
|
||||
<a href={"/" <> legend["purchase_year"] <> "/brutal-legend-" <> legend["externalId"]}>
|
||||
<%= legend["artist"] %> - <%= legend["album"] %> (<%= legend["year"] %>)
|
||||
</a>
|
||||
<span></span>
|
||||
</li>
|
||||
<% end %>
|
||||
<li class="page">
|
||||
<span></span>
|
||||
<a href="/vad-jag-gor">
|
||||
Vad jag gör
|
||||
</a>
|
||||
<span></span>
|
||||
</li>
|
||||
<li class="page">
|
||||
<span></span>
|
||||
<a href="/om">
|
||||
Anders, 39, Hårdrockare
|
||||
</a>
|
||||
<span></span>
|
||||
</li>
|
||||
<li class="feed rss">
|
||||
<span></span>
|
||||
<a href="/prenumerera.xml" class="feed-link">Prenumerera</a>
|
||||
<small>.rss</small>
|
||||
</li>
|
||||
<li class="">
|
||||
<span></span>
|
||||
<a clasS="feed-link" href={~p"/aey.vcf"}>
|
||||
Kontakt
|
||||
</a>
|
||||
<small>.vcf</small>
|
||||
</li>
|
||||
</ul>
|
||||
<form method="get" action="/sok" class="home-search">
|
||||
<label for="q">Sök innehåll</label>: <input size="9" type="search" id="q" name="q" />
|
||||
<button>Sök</button>
|
||||
i din kalenderapp: kopiera länken och klistra in.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div class="home-section brutal-color">
|
||||
<h2>Brütal legends</h2>
|
||||
<div class="home-brutal home-grid brutal">
|
||||
<%= for legend <- @brutal_legends do %>
|
||||
<article>
|
||||
<a href={"/" <> legend["purchase_year"] <> "/brutal-legend-" <> legend["externalId"]}>
|
||||
<%= if legend["cover"] do %>
|
||||
<img
|
||||
class="cover-image"
|
||||
src={"https://n.madr.se/assets/" <> legend["cover"] <> "?key=legend"}
|
||||
alt="skivomslag"
|
||||
loading="lazy"
|
||||
/>
|
||||
<% end %>
|
||||
</a>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
<p>Dessa är de 8 senaste. <a href="/bl">Se alla skivorna</a></p>
|
||||
</div>
|
||||
<form method="get" action="/sok" class="home-section home-search">
|
||||
<div>
|
||||
<label for="q">Sök innehåll</label>: <input size="9" type="search" id="q" name="q" />
|
||||
<button>Sök</button>
|
||||
</div>
|
||||
</form>
|
||||
<ul class="profiles">
|
||||
<li><a href="/cv/anders-englof-ytterstrom.html">CV</a></li>
|
||||
<li><a href="https://github.com/madr">Github</a></li>
|
||||
<li>
|
||||
<a href="https://www.discogs.com/user/madrse/collection?limit=250&sort=artist&sort_order=asc&layout=big">
|
||||
Discogs
|
||||
</a>
|
||||
</li>
|
||||
<li>
|
||||
<a href="/colophon">
|
||||
Kolofon
|
||||
</a>
|
||||
</li>
|
||||
</ul>
|
||||
</main>
|
||||
|
|
|
|||
|
|
@ -1,11 +1,13 @@
|
|||
<h1>Delningar</h1>
|
||||
<p>
|
||||
Länkar som är värda att uppmärksammas och lämna åsikt om.
|
||||
</p>
|
||||
<%= for {date, links} <- @links do %>
|
||||
<section id={"d" <> date}>
|
||||
<div class="links">
|
||||
<h2>
|
||||
<div class="head">
|
||||
<h1>Delningar</h1>
|
||||
<p>
|
||||
Länkar som är värda att uppmärksammas och lämna åsikt om.
|
||||
</p>
|
||||
</div>
|
||||
<div class="cards">
|
||||
<%= for {date, links} <- @links do %>
|
||||
<section class="card" id={"d" <> date}>
|
||||
<h2 class="bookmark-date">
|
||||
<%= date
|
||||
|> Date.from_iso8601!()
|
||||
|> Calendar.strftime(
|
||||
|
|
@ -46,20 +48,24 @@
|
|||
)
|
||||
|> String.replace(~r/ 0/, " ") %>
|
||||
</h2>
|
||||
<%= for link <- links do %>
|
||||
<article vocab="https://schema.org/" typeof="WebContent Review" class="bookmark">
|
||||
<h3>
|
||||
<span property="name"><%= link["title"] %></span>
|
||||
<a class="permalink" href={"/" <> link["slug"]} title="Permalänk">#</a>
|
||||
</h3>
|
||||
<div property="reviewBody">
|
||||
<%= link["contents"] |> Earmark.as_html!() |> raw %>
|
||||
</div>
|
||||
<div class="source">
|
||||
Källa: <a href={link["source"]} rel="external"><%= link["h1"] %></a>
|
||||
</div>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
<div class="bookmarks">
|
||||
<%= for link <- links do %>
|
||||
<article vocab="https://schema.org/" typeof="WebContent Review" class="bookmark">
|
||||
<h3>
|
||||
<span property="name"><%= link["title"] %></span>
|
||||
</h3>
|
||||
<div property="reviewBody">
|
||||
<%= link["contents"] |> Earmark.as_html!() |> raw %>
|
||||
</div>
|
||||
<div class="line">
|
||||
<div class="source">
|
||||
Källa: <a href={link["source"]} rel="external"><%= link["h1"] %></a>
|
||||
</div>
|
||||
<a class="permalink" href={"/" <> link["slug"]} title="Permalänk">#</a>
|
||||
</div>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
|
|||
75
lib/mse25_web/controllers/page_html/notes.html.heex
Normal file
75
lib/mse25_web/controllers/page_html/notes.html.heex
Normal file
|
|
@ -0,0 +1,75 @@
|
|||
<div class="head">
|
||||
<h1>Anteckningar</h1>
|
||||
<p>Blandade tankar, oftast på engelska. Replikerat på Mastodon.</p>
|
||||
<!-- <p><a href="atom.xml">Prenumerera via Atom</a></p> -->
|
||||
</div>
|
||||
<div class="cards">
|
||||
<%= for {date, links} <- @notes do %>
|
||||
<section class="card" id={"d" <> date}>
|
||||
<h2 class="bookmark-date">
|
||||
<%= date
|
||||
|> Date.from_iso8601!()
|
||||
|> Calendar.strftime(
|
||||
"%A, %d %B %Y",
|
||||
month_names: fn m ->
|
||||
Enum.at(
|
||||
[
|
||||
"januari",
|
||||
"februari",
|
||||
"mars",
|
||||
"april",
|
||||
"maj",
|
||||
"juni",
|
||||
"juli",
|
||||
"augusti",
|
||||
"september",
|
||||
"oktober",
|
||||
"november",
|
||||
"december"
|
||||
],
|
||||
m - 1
|
||||
)
|
||||
end,
|
||||
day_of_week_names: fn d ->
|
||||
Enum.at(
|
||||
[
|
||||
"måndag",
|
||||
"tisdag",
|
||||
"onsdag",
|
||||
"torsdag",
|
||||
"fredag",
|
||||
"lördag",
|
||||
"söndag"
|
||||
],
|
||||
d - 1
|
||||
)
|
||||
end
|
||||
)
|
||||
|> String.replace(~r/ 0/, " ") %>
|
||||
</h2>
|
||||
<div class="notes">
|
||||
<%= for link <- links do %>
|
||||
<article vocab="https://schema.org/" typeof="WebContent Review" class="bookmark">
|
||||
<h3 class="note">
|
||||
<div property="reviewBody">
|
||||
<%= link["contents"] |> Earmark.as_html!(breaks: true) |> raw %>
|
||||
</div>
|
||||
</h3>
|
||||
<footer class="note">
|
||||
<p>
|
||||
Posted on
|
||||
<a class="permalinks" href={"/notes/" <> to_string(link["id"])} title="Permalänk">
|
||||
<%= fancy_timestamp(link["date_created"]) %>
|
||||
</a>
|
||||
at
|
||||
<a href="https://www.openstreetmap.org/#map=15/50.82806/-0.12861">
|
||||
pos
|
||||
</a>
|
||||
</p>
|
||||
</footer>
|
||||
</article>
|
||||
<% end %>
|
||||
</div>
|
||||
</section>
|
||||
<% end %>
|
||||
</div>
|
||||
|
|
@ -31,6 +31,7 @@ defmodule Mse25Web.Router do
|
|||
get "/evenemang", PageController, :events
|
||||
get "/webblogg", PageController, :articles
|
||||
get "/delningar", PageController, :links
|
||||
get "/anteckningar", PageController, :notes
|
||||
get "/sok", PageController, :search
|
||||
|
||||
get "/prenumerera.xml", FeedController, :feed
|
||||
|
|
@ -38,6 +39,10 @@ defmodule Mse25Web.Router do
|
|||
get "/events.json", FeedController, :events
|
||||
get "/kommande-evenemang.ics", FeedController, :calendar
|
||||
|
||||
get "/cv", PageController, :cv
|
||||
get "/bl", PageController, :brutal_legend
|
||||
get "/mugshot.jpg", PageController, :mugshot
|
||||
|
||||
get "/*path", ItemController, :index
|
||||
end
|
||||
|
||||
|
|
|
|||
1
priv/static/images/aey2.svg
Normal file
1
priv/static/images/aey2.svg
Normal file
|
|
@ -0,0 +1 @@
|
|||
<svg width="436.4" height="238" viewBox="0 0 115.5 63" xmlns="http://www.w3.org/2000/svg"><path style="stroke-width:.18255" d="m119.8 51.6 1.7-1.4-.2-.3-.5.4-.4-.4v-7.4l.7-1-.3-.1-.4.3-.2.3-1.6-1.3-2.7 2q0-.9-.2-1.2l-.9-.8-.2.2-1.5.8-.7.4-.6.4-.6.4q-.6.6-.9 1.3l-.3 2h-.7l-.5.3-.4.4-.3.5.3.2q.4-.5.8-.5.6 0 1 .7.5.7.5 1.5t-.3 1.2q-.3.4-1.1.5-.8 0-1.1.4-.4.4-.4 1.2v.2h.4q0-.7.8-.7h.4l.8.1q2.2 0 2.2-2.6v-3h2v2.1q0 .7-.2 1h-.2v.4l.8.7.8.8 2.5-2.3-.2-.2-.6.5v-3l.9-1.1h-.9V42l.4-.3 1 .9v6.6q0 1.1.2 1.5.2.4 1 .9zm-3.8-5h1v3.2l-.4.2q-.4 0-.5-.3l-.1-1.3zm1-1.1h-1V43l1-.8zm-2.6-1.9v1.9h-1.3l-.7.9v-2q0-1.2.3-1.7.2-.4 1-1 .5.4.6.7l.1 1.2zm-3.6 7.4h-.4q.7-.3 1-.8l.1-1.8v-3q0-1.4.2-1.9 0-.4.7-.9-.3.6-.3 1.8V49q0 1.2-.2 1.6-.3.4-1 .4zm19.5.6 1.8-1.5-.3-.3q-.4.4-.6.4-.2 0-.3-.3v-.3l-.1-.7-.3-5.4V43q0-.8.2-1.2l.4-.4.6-.4-.2-.3-.4.2-.3.2-.3.3-.5.4h-.1q-1.7-1.2-3.4-1.2-1.6 0-2.8 1.2-1.2 1-1.2 2.6 0 1 .6 1.7.5.9 1.4 1.5l-1 1.6-.8 1.1-.1.6q0 .3.2.5.1.2.3.2.4 0 .4-.4l-.1-.4-.2-.4.1-.2.3-.1q.8 0 3 1.5l2.6-2v.4l.3 1 .8.6zm-5.6-3.7h4.5v1.2l-1.5 1.2-3.6-1.5zm3.7-5.3.3.2.3.2.1 3.8h-3.6zM126 44q.4 0 1 .3l-2.2 3q-1.7-1-1.7-2.6 0-1.1 1-1.9.8-.8 2.1-.8 1 0 2 .5l-.5.7-1.2-.2q-1.3 0-1.8 1.5l.2.1q.5-.6 1.1-.6zm15 7.7 2.3-1.6v-.4q0-3.4-.3-5-.5-1.8-1.4-2.5-1-.6-2.9-.6h-3l-.7.1h-1.4q-.4-.2-.6-.7h-.2v.2q0 1 .5 1.5t1.9.5h1.8q-1.3.6-1.7 1.3-.4.7-.4 2.2v.3l-.7-.2q-1 0-1.6 1.1l.2.2q.4-.4.8-.4t.8.4q.3.4.3.9 0 .6-.4 1l-.5.6-.8.7h-.2l.2.3.8-.5.8-.5q1.1-1 1.5-1.6.3-.6.3-2v-2.7l.2-.3.3-.4q.1-.2.4-.3l.5-.2-.2.5-.2.5v3.6l-.1.5v.3l-.2.3q-.6 1-2 1.9l-1.6 1h-.3l.3.4q1-.6 1.9-.8.9-.3 2-.3 1.7 0 3.7.6zm-2-2h-.1v-1.2q.7-.5 1.4-.5t1.5.5v1.8l-.3-.1-1.2-.3-1.2-.1zm1.4-2q-.7 0-1.5.4v-1.9q.7.5 1.4.5.5 0 1.3-.5l.1 1.2v.7q-.7-.5-1.3-.5zm-.2-1.4q-.5 0-1.3-.5V43h.2q1.4.2 1.9.8.5.5.6 2-.7.5-1.4.5zm-2-3.3h.3v6.7q-1 0-1.8.3.6-.6.8-1.2.2-.5.2-1.6v-2.5l.1-.7.5-1zm13 8.6 1.8-1.7-.3-.2-.7.7q-.3-.3-1.2-.6v-3l.3-.2q1 .2 1.6.9.6.7 1 2l.4 1.4.7.7 1.7-1.5-.3-.2-.5.5q-.5-.4-.8-1.3l-.2-.8q-.6-1.9-2.2-2.7l2.3-1.5-2.3-3.3-2.8 2q0-1-.6-1.5t-1.5-.5q-1.2 0-2 1v.2q.6-.3 1.1-.3.8 0 1.1.4.4.4.4 1.4v.3l-2.8 1.9v.2q1.4.4 2.1 1.3.7.9.7 2.1v.1q-1.9.2-3.2 2 1.5-.7 3.1-.7 1.7 0 3.1 1zm-4.6-6.3 1.6-1.1v2.3q-.6-.7-1.6-1.2zm3.9 4.4-.5-.2h-.3V43l.8-.6zm2.9-5-2.6 1.7v-4l.7-.5zM70 95.8l6.7-5.7-1-1q-1.5 1.3-2.1 1.3-1 0-1.3-1L72 88l-.1-2.6-1-20v-2.2q0-3 .8-4.5.5-.7 1.4-1.5.9-.8 2.3-1.6l-.7-1-1.6.9-1.2.7-1.2 1-1.6 1.5-.4.3h-.1Q62 54.6 56 54.6t-10.5 4.3Q41 63 41 68.6q0 3.5 2 6.7 1.9 3 5.5 5.4L44.2 87q-2 2.8-2.5 4-.5 1-.5 2.4 0 1 .6 1.7t1.4.7q1.5 0 1.5-1.3 0-.7-.6-1.7t-.6-1.4q0-.5.4-.8.4-.5 1-.5 3 0 11.5 6l9.8-8 .1 1.6q.2 2.5.9 3.7.6 1.1 2.9 2.6zM49.3 82H66v4.5L60.5 91 47 85.2zm13.8-20 1 .8 1 .9.6 14.1H52.1Zm-9 4.8q1.5 0 3.3 1.2l-8 11.5q-6.2-4.3-6.2-10 0-4.2 3.4-7 3.3-3 8.3-3 4 0 7.1 1.9l-1.7 2.4q-2.4-.6-4.4-.6-4.8 0-7 5.5l1 .5q2-2.4 4.2-2.4zM99.9 90V72.4l9.6.4 3.1-5.5-6.8-.2 8.3-8.4-.3-.8h-1.5q-4.3 0-10.8-3.2L90 64v13.6q0 2.4-.4 3.2-.3.8-1.7 2.1-3.3-4.6-3.3-10.5 0-8.4 8.5-14l-.6-1q-12.7 6.7-12.7 18.4 0 8.2 5.4 14 5.4 5.7 13.2 5.7 5.2 0 9.4-2.6 4.3-2.6 7.4-7.7l-.5-.5q-7 5.2-14 5.2zm8.4-27-8.4 8.4V59.8q3.6 2.2 8.4 3zm-12.8-1.2 3.1-2.5v30.5q-6.3-1-10.1-5.8l3.2-2.7q2.7-2.2 3.2-3.4.6-1.2.6-4zm23.7-4.7.6 1q1.3-.7 2.2-.7 3 0 4.2 2.2 1.3 2.1 1.3 7.1v2.2q-3-1.9-5-1.9-1.5 0-3.2 1l.2.9h.9q3 0 5 2.1 2 2.2 2 5.7v1.2q-2.9-2.3-5.9-2.3-1 0-2 .3v.8q1.8.1 3.3.9 1.5.7 2.5 2 1 1.2 1.6 3 .6 1.7.6 3.7v1q-4.2 0-6.9 2.2T118 95q0 3.4 2.6 5.8 2.5 2.3 6.3 2.3t10.9-3.8q3.2-1.8 4.5-1.8 1.3 0 1.3.9l-.2.6q-.9 1.1-.9 2 0 1.2.8 2 .7.7 1.7.7 2.7 0 2.7-2.9 0-2.2-2.2-3.7-2-1.5-5.2-1.5-2.2 0-4.8.8l-1.7.6-3 1q-4 1.5-5.9 1.5-1.1 0-2.1-.4-1-.3-1.7-1t-1.1-1.6q-.4-1-.4-2 0-2.8 2.5-4.3 2.5-1.6 7-1.6l4.4.1 4.4.1q9.5 0 14-4.3 4.6-4.4 4.6-13.6 0-6.2-3.2-10.2-3.2-4-8.3-4-4 0-11.2 4.1l-.7.5q-1.2-6.5-7.7-6.5-3.4 0-6 2.3zm16.5 30.2H133V63.1l2.7-1.7zm2 0h-.7V79q2.9-2.4 6.2-2.4 3.5 0 6.7 2.8-2.6 8-12.1 8zm5.4-12.1q-3.1 0-6.1 2.2v-8q2.9 2.3 6.4 2.3 1.9 0 3.4-.6l1.6-.8 1.8-1.4q.4 2 .4 4.3 0 2.7-.4 4.7-3.4-2.7-7-2.7zm.2-4.8h-1.6q-.8-.2-1.5-.6-.8-.3-1.6-.9l-1.6-1.3v-6.8q2.5-1 4.2-1 3 0 5.4 2.1 2.4 2.2 3.2 5.7-2.8 2.8-6.5 2.8z" transform="translate(-41 -40.6)"/></svg>
|
||||
|
After Width: | Height: | Size: 4 KiB |
BIN
priv/static/images/mugshot.jpg
Normal file
BIN
priv/static/images/mugshot.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
BIN
priv/static/mugshot.jpg
Normal file
BIN
priv/static/mugshot.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 46 KiB |
Loading…
Add table
Reference in a new issue