Merge pull request 'devel' (#48) from devel into main

Reviewed-on: #48
This commit is contained in:
inhji 2023-04-07 15:56:43 +02:00
commit 010d9af0dc
13 changed files with 155 additions and 11 deletions

3
.gitignore vendored
View file

@ -46,3 +46,6 @@ npm-debug.log
# env file
.env
# elixir ls
.elixir_ls

View file

@ -2,6 +2,7 @@
@import "tailwindcss/components";
@import "tailwindcss/utilities";
@import "./reset.css";
@import "./lolight.css";
@import "./lightbox.css";

52
assets/css/reset.css Normal file
View file

@ -0,0 +1,52 @@
/*
1. Use a more-intuitive box-sizing model.
*/
*, *::before, *::after {
box-sizing: border-box;
}
/*
2. Remove default margin
*/
* {
margin: 0;
}
/*
3. Allow percentage-based heights in the application
*/
html, body {
height: 100%;
}
/*
Typographic tweaks!
4. Add accessible line-height
5. Improve text rendering
*/
body {
line-height: 1.5;
-webkit-font-smoothing: antialiased;
}
/*
6. Improve media defaults
*/
img, picture, video, canvas, svg {
display: block;
max-width: 100%;
}
/*
7. Remove built-in form typography styles
*/
input, button, textarea, select {
font: inherit;
}
/*
8. Avoid text overflows
*/
p, h1, h2, h3, h4, h5, h6 {
overflow-wrap: break-word;
}
/*
9. Create a root stacking context
*/
#root, #__next {
isolation: isolate;
}

View file

@ -0,0 +1,13 @@
defmodule Chiya.Notes.NoteImport do
import Ecto.Changeset
defstruct [:file]
@types %{file: :string}
def change_note_import(params) do
{%Chiya.Notes.NoteImport{}, @types}
|> cast(params, Map.keys(@types))
|> validate_required(:file)
end
end

View file

@ -13,9 +13,7 @@
</div>
</header>
<main>
<div class="mx-auto max-w-2xl">
<.flash_group flash={@flash} />
<%= @inner_content %>
</div>
<main class="mx-auto max-w-2xl px-4">
<.flash_group flash={@flash} />
<%= @inner_content %>
</main>

View file

@ -2,7 +2,7 @@ defmodule ChiyaWeb.NoteController do
use ChiyaWeb, :controller
alias Chiya.Notes
alias Chiya.Notes.Note
alias Chiya.Notes.{Note, NoteImport}
def index(conn, _params) do
notes = Notes.list_notes()
@ -95,6 +95,47 @@ defmodule ChiyaWeb.NoteController do
end
end
def import_prepare(conn, _params) do
render(conn, :import, changeset: NoteImport.change_note_import(%{}))
end
def import_run(conn, %{
"note_import" => %{
"file" => %{
path: path,
content_type: "text/markdown",
filename: filename
}
}
}) do
case File.read(path) do
{:ok, content} ->
note_params = %{
name: filename,
content: content
}
case Notes.create_note(note_params) do
{:ok, note} ->
conn
|> put_flash(:info, "Note created successfully.")
|> redirect(to: ~p"/admin/notes/#{note}")
{:error, %Ecto.Changeset{} = changeset} ->
render(conn, :new, changeset: changeset, channels: to_channel_options())
end
_ ->
render(conn, :import, changeset: NoteImport.change_note_import(%{}))
end
end
def import_run(conn, _params) do
conn
|> put_flash(:error, "Error while importing.")
|> redirect(to: ~p"/admin/notes")
end
defp from_channel_ids(note_params) do
selected_ids = Enum.map(note_params["channels"] || [], &String.to_integer/1)

View file

@ -0,0 +1,15 @@
<.header>
Import
</.header>
<.simple_form :let={f} for={@changeset} action={~p"/admin/notes/import"} multipart={true}>
<.error :if={@changeset.action}>
Oops, something went wrong! Please check the errors below.
</.error>
<.input field={f[:file]} type="file" label="Markdown file" accept="text/markdown, text/plain" />
<:actions>
<.button>Import Note</.button>
</:actions>
</.simple_form>

View file

@ -4,6 +4,9 @@
<.link href={~p"/admin/notes/new"}>
<.button>New Note</.button>
</.link>
<.link href={~p"/admin/notes/import"}>
<.button>Import Note</.button>
</.link>
</:actions>
</.header>

View file

@ -8,7 +8,7 @@
<div class="w-full mt-6 sm:w-auto">
<div class="flex gap-4 text-sm leading-6 text-theme-base">
<%= for identity <- @identities do %>
<%= for identity <- @public_identities do %>
<div>
<a
rel={identity.rel}
@ -27,7 +27,7 @@
<%= for note <- @channel.notes do %>
<a
href={~p"/#{note.slug}"}
class="rounded-lg -mx-2 -my-0.5 px-2 py-0.5 hover:bg-theme-primary/30 transition"
class="rounded-lg -mx-2 -my-0.5 px-2 py-0.5 hover:bg-theme-primary/10 transition"
>
<span class="text-theme-heading text-lg font-semibold leading-8">
<%= note.name %>

View file

@ -3,8 +3,10 @@
<h1 class="mt-16 text-3xl font-semibold leading-8 text-theme-heading font-serif">
<%= @note.name %>
</h1>
<p class="mt-2 text-sm leading-6 text-theme-base font-semibold">
<%= pretty_date(@note.published_at) %>
<p class="mt-2 text-sm leading-6 text-theme-base">
<span>Published</span> <time class="text-theme-primary font-semibold"><%= pretty_date(@note.published_at) %></time>
<span>·</span>
<span>Last Updated</span> <time class="text-theme-primary font-semibold"><%= pretty_date(@note.updated_at) %></time>
</p>
</header>

View file

@ -8,7 +8,10 @@ defmodule ChiyaWeb.GlobalAssigns do
def fetch_identities(conn, _opts) do
identities = Chiya.Identities.list_identities()
assign(conn, :identities, identities)
conn
|> assign(:identities, identities)
|> assign(:public_identities, Enum.filter(identities, fn i -> i.public && i.active end))
end
def fetch_public_channels(conn, _opts) do

View file

@ -36,6 +36,16 @@ defmodule ChiyaWeb.NoteShowLive do
<:item title="Channels"><%= @channels %></:item>
</.list>
<.line />
<details>
<summary>File Content</summary>
<section class="prose">
<%= raw ChiyaWeb.Markdown.render(@note.content) %>
</section>
</details>
<.line />
<%= if !Enum.empty?(@note.images) do %>

View file

@ -61,6 +61,9 @@ defmodule ChiyaWeb.Router do
resources "/settings", SettingController, singleton: true
resources "/identities", IdentityController
get "/notes/import", NoteController, :import_prepare
post "/notes/import", NoteController, :import_run
live "/notes/:id", NoteShowLive, :show
get "/notes/:id/raw", NoteController, :raw