fix: A1-1 implement archived→draft/published transitions, wire archive/unarchive into post editor quick actions, complete all i18n translations

This commit is contained in:
2026-05-28 18:39:52 +02:00
parent f99e139fa5
commit 82ce445c44
12 changed files with 1417 additions and 1001 deletions

View File

@@ -10,7 +10,7 @@ Gap categories: **SC** = spec correct, fix code | **CS** = code correct, update
| ID | Gap | Spec | Code | Path |
|---|---|---|---|---|
| A1-1 | No `archived→draft` or `archived→published` transition | post.allium:121-122 | No code path to unarchive | Fix code: implement unarchive transitions |
| A1-1 | ~~No `archived→draft` or `archived→published` transition~~ | post.allium:121-122 | `unarchive_post/1` implemented, `publish_post` already handled archived→published | **Resolved:** `unarchive_post/1` in posts.ex restores content from disk, UI wired via quick actions, 4 tests added |
| A1-2 | `DeletePost` must delete translations + translation files | post.allium:209-212 | `delete_post/1` skips translation cleanup | Fix code: delete PostTranslation rows + files |
| A1-3 | Publish must delete old file when path changes | engine_side_effects.allium:73-74 | `publish_post` does not delete old file | Fix code: add old file deletion on path change |
| A1-4 | `doNotTranslate: false` written to frontmatter despite "only when true" | frontmatter.allium:398 | `lib/bds/frontmatter.ex:38-39` writes false | Fix code: omit `doNotTranslate` when false |

View File

@@ -204,6 +204,14 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
{:noreply, do_delete(socket)}
end
def handle_event("archive_post_editor", _params, socket) do
{:noreply, do_archive(socket)}
end
def handle_event("unarchive_post_editor", _params, socket) do
{:noreply, do_unarchive(socket)}
end
def handle_event("set_post_editor_mode", %{"mode" => mode}, socket) do
normalized_mode = normalize_mode(mode)
@@ -370,6 +378,8 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
editing_canonical_language?(translations, active_language, canonical_language),
can_publish?: post.status == :draft,
can_delete?: post.status == :published,
can_archive?: post.status in [:draft, :published],
can_unarchive?: post.status == :archived,
has_published_version?: has_published_version?(post),
discard_label: discard_label(post),
discard_title: discard_title(post),
@@ -559,6 +569,72 @@ defmodule BDS.Desktop.ShellLive.PostEditor do
end
end
defp do_archive(socket) do
case socket.assigns.post do
nil ->
socket
%Post{} = post ->
case Posts.archive_post(post.id) do
{:ok, archived_post} ->
socket =
socket
|> assign(:post, archived_post)
|> assign(:drafts, %{})
|> assign(:dirty?, false)
|> assign(:quick_actions_open?, false)
|> build_data()
Notify.tab_meta(
:post,
post.id,
archived_post.title || archived_post.slug || archived_post.id,
"archived"
)
Notify.dirty(:post, post.id, false)
notify_output(socket, dgettext("ui", "Post"), dgettext("ui", "Post archived"))
{:error, reason} ->
notify_output(socket, dgettext("ui", "Post"), inspect(reason), "error")
|> build_data()
end
end
end
defp do_unarchive(socket) do
case socket.assigns.post do
nil ->
socket
%Post{} = post ->
case Posts.unarchive_post(post.id) do
{:ok, unarchived_post} ->
socket =
socket
|> assign(:post, unarchived_post)
|> assign(:drafts, %{})
|> assign(:dirty?, false)
|> assign(:quick_actions_open?, false)
|> build_data()
Notify.tab_meta(
:post,
post.id,
unarchived_post.title || unarchived_post.slug || unarchived_post.id,
"draft"
)
Notify.dirty(:post, post.id, false)
notify_output(socket, dgettext("ui", "Post"), dgettext("ui", "Post unarchived"))
{:error, reason} ->
notify_output(socket, dgettext("ui", "Post"), inspect(reason), "error")
|> build_data()
end
end
end
defp do_detect_language(socket) do
if Map.get(socket.assigns, :offline_mode, true) do
notify_output(

View File

@@ -61,6 +61,42 @@
<small><%= dgettext("ui", "Select a target language for this post") %></small>
</span>
</button>
<%= if @post_editor.can_archive? or @post_editor.can_unarchive? do %>
<div class="quick-actions-divider"></div>
<%= if @post_editor.can_archive? do %>
<button
class="quick-action-item ui-dropdown-item flex items-start gap-3 text-left"
data-testid="post-archive-button"
type="button"
phx-click="archive_post_editor"
phx-target={@myself}
>
<span class="quick-action-icon">📦</span>
<span class="quick-action-text flex min-w-0 flex-1 flex-col">
<strong><%= dgettext("ui", "Archive") %></strong>
<small><%= dgettext("ui", "Move this post to the archive") %></small>
</span>
</button>
<% end %>
<%= if @post_editor.can_unarchive? do %>
<button
class="quick-action-item ui-dropdown-item flex items-start gap-3 text-left"
data-testid="post-unarchive-button"
type="button"
phx-click="unarchive_post_editor"
phx-target={@myself}
>
<span class="quick-action-icon">📤</span>
<span class="quick-action-text flex min-w-0 flex-1 flex-col">
<strong><%= dgettext("ui", "Unarchive") %></strong>
<small><%= dgettext("ui", "Restore this post to draft") %></small>
</span>
</button>
<% end %>
<% end %>
</div>
<% end %>
</div>

View File

@@ -352,6 +352,36 @@ defmodule BDS.Posts do
end
end
@spec unarchive_post(String.t()) ::
{:ok, Post.t()} | {:error, :not_found | Ecto.Changeset.t()}
def unarchive_post(post_id) do
case Repo.get(Post, post_id) do
nil ->
{:error, :not_found}
%Post{status: :archived} = post ->
content = restore_content_for_unarchive(post)
post
|> Post.changeset(%{status: :draft, content: content, updated_at: Persistence.now_ms()})
|> Repo.update()
|> case do
{:ok, updated_post} ->
:ok = Search.sync_post(updated_post)
{:ok, updated_post}
error ->
error
end
%Post{} = post ->
{:error,
post
|> Post.changeset(%{})
|> Ecto.Changeset.add_error(:status, "cannot unarchive non-archived post")}
end
end
@spec get_post!(String.t()) :: Post.t()
@spec get_post(String.t()) :: Post.t() | nil
def get_post(post_id), do: Repo.get(Post, post_id)
@@ -581,6 +611,17 @@ defmodule BDS.Posts do
)
end
defp restore_content_for_unarchive(%Post{content: content}) when is_binary(content), do: content
defp restore_content_for_unarchive(%Post{file_path: file_path} = post)
when file_path not in [nil, ""] do
project = Projects.get_project!(post.project_id)
full_path = Path.join(Projects.project_data_dir(project), file_path)
read_markdown_body(full_path)
end
defp restore_content_for_unarchive(_post), do: ""
defp normalize_title(nil), do: ""
defp normalize_title(title), do: title

File diff suppressed because it is too large Load Diff

View File

@@ -79,7 +79,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:700
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -142,12 +142,12 @@ msgstr ""
msgid "Add Submenu"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:223
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:259
#, elixir-autogen, elixir-format
msgid "Add category"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:138
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:174
#, elixir-autogen, elixir-format
msgid "Add tag"
msgstr ""
@@ -246,7 +246,7 @@ msgid "Assistant"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:166
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:166
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:202
#, elixir-autogen, elixir-format
msgid "Author"
msgstr ""
@@ -263,8 +263,8 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:616
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr ""
@@ -283,7 +283,7 @@ msgid "Available languages"
msgstr ""
#: lib/bds/desktop/shell_live/panel_renderer.ex:124
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:264
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:300
#, elixir-autogen, elixir-format
msgid "Backlinks"
msgstr ""
@@ -367,7 +367,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/index.html.heex:336
#: lib/bds/desktop/shell_live/misc_editor.ex:750
#: lib/bds/desktop/shell_live/misc_editor.ex:751
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:207
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:243
#: lib/bds/desktop/shell_live/settings_editor/managed_categories.ex:59
#: lib/bds/desktop/shell_live/settings_editor/managed_categories.ex:75
#: lib/bds/desktop/shell_live/settings_editor/managed_categories.ex:107
@@ -499,7 +499,7 @@ msgstr ""
msgid "Confirm"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:326
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:362
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32
#: lib/bds/ui/sidebar.ex:761
@@ -548,17 +548,17 @@ msgstr ""
msgid "Create / Edit"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:239
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:275
#, elixir-autogen, elixir-format
msgid "Create category"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:157
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:193
#, elixir-autogen, elixir-format
msgid "Create tag"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:417
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:453
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:48
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:46
#, elixir-autogen, elixir-format
@@ -609,7 +609,7 @@ msgstr ""
msgid "Date Distribution"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:252
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:288
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:174
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:182
#, elixir-autogen, elixir-format
@@ -634,7 +634,7 @@ msgstr ""
#: lib/bds/desktop/menu_bar.ex:162
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98
#: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:80
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:16
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_components.ex:518
@@ -696,7 +696,7 @@ msgstr ""
msgid "Desktop Runtime"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:187
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:223
#, elixir-autogen, elixir-format
msgid "Detect"
msgstr ""
@@ -706,9 +706,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:566
#: lib/bds/desktop/shell_live/post_editor.ex:595
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr ""
@@ -774,7 +774,7 @@ msgstr ""
msgid "Display Text"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:196
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:232
#, elixir-autogen, elixir-format
msgid "Do Not Translate"
msgstr ""
@@ -896,8 +896,8 @@ msgstr ""
msgid "Exact Match"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:313
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:318
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:349
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:354
#, elixir-autogen, elixir-format
msgid "Excerpt"
msgstr ""
@@ -981,7 +981,7 @@ msgid "Force Reload"
msgstr ""
#: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:194
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:383
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:419
#, elixir-autogen, elixir-format
msgid "Gallery"
msgstr ""
@@ -1033,7 +1033,7 @@ msgstr ""
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:818
#: lib/bds/desktop/shell_live/post_editor.ex:894
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr ""
@@ -1175,12 +1175,12 @@ msgstr ""
msgid "Insert"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:354
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:390
#, elixir-autogen, elixir-format
msgid "Insert Link"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:363
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:399
#, elixir-autogen, elixir-format
msgid "Insert Media"
msgstr ""
@@ -1198,13 +1198,13 @@ msgstr ""
#: lib/bds/desktop/shell_live/import_editor.ex:874
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:171
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:171
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:207
#, elixir-autogen, elixir-format
msgid "Language"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:602
#: lib/bds/desktop/shell_live/post_editor.ex:678
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr ""
@@ -1220,7 +1220,7 @@ msgstr ""
msgid "Link to Post"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:293
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:329
#, elixir-autogen, elixir-format
msgid "Linked Media"
msgstr ""
@@ -1231,7 +1231,7 @@ msgid "Linked Posts"
msgstr ""
#: lib/bds/desktop/shell_live/panel_renderer.ex:142
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:276
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:312
#, elixir-autogen, elixir-format
msgid "Links To"
msgstr ""
@@ -1288,7 +1288,7 @@ msgstr ""
msgid "Mapped"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:821
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1339,7 +1339,7 @@ msgstr ""
msgid "Merge Tags"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:90
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:126
#, elixir-autogen, elixir-format
msgid "Metadata"
msgstr ""
@@ -1451,8 +1451,8 @@ msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:468
#: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:72
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:272
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:284
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:308
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:320
#: lib/bds/desktop/shell_live/sidebar_components.ex:320
#: lib/bds/desktop/shell_live/sidebar_components.ex:380
#: lib/bds/desktop/shell_live/sidebar_components.ex:454
@@ -1463,7 +1463,7 @@ msgstr ""
msgid "No items"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:306
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:342
#, elixir-autogen, elixir-format
msgid "No linked media"
msgstr ""
@@ -1700,7 +1700,7 @@ msgstr ""
msgid "OpenAI-compatible endpoints, model routing, airplane mode, and system prompt"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:301
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:337
#, elixir-autogen, elixir-format
msgid "Order"
msgstr ""
@@ -1786,12 +1786,16 @@ msgid "Persist the detected language for this media item"
msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:464
#: lib/bds/desktop/shell_live/post_editor.ex:468
#: lib/bds/desktop/shell_live/post_editor.ex:503
#: lib/bds/desktop/shell_live/post_editor.ex:507
#: lib/bds/desktop/shell_live/post_editor.ex:542
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1801,7 +1805,7 @@ msgstr ""
#: lib/bds/desktop/shell_data.ex:247
#: lib/bds/desktop/shell_live/panel_renderer.ex:118
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:261
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:297
#, elixir-autogen, elixir-format
msgid "Post Links"
msgstr ""
@@ -1821,12 +1825,12 @@ msgstr ""
msgid "Post is marked as do-not-translate but has translations"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:503
#: lib/bds/desktop/shell_live/post_editor.ex:513
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:464
#: lib/bds/desktop/shell_live/post_editor.ex:474
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr ""
@@ -1850,7 +1854,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:822
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1866,7 +1870,7 @@ msgstr ""
msgid "Preview Post"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:394
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:430
#, elixir-autogen, elixir-format
msgid "Preview unavailable"
msgstr ""
@@ -1906,7 +1910,7 @@ msgstr ""
msgid "Public URL"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:70
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:106
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:11
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:11
#, elixir-autogen, elixir-format
@@ -1919,8 +1923,8 @@ msgid "Publish Selected"
msgstr ""
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:816
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
msgid "Published"
@@ -2055,12 +2059,12 @@ msgstr ""
msgid "Remove"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:214
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:250
#, elixir-autogen, elixir-format
msgid "Remove category"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:129
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:165
#, elixir-autogen, elixir-format
msgid "Remove tag"
msgstr ""
@@ -2117,7 +2121,7 @@ msgstr ""
msgid "Result"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:817
#: lib/bds/desktop/shell_live/post_editor.ex:893
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr ""
@@ -2169,7 +2173,7 @@ msgid "Save Translation"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:815
#: lib/bds/desktop/shell_live/post_editor.ex:891
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr ""
@@ -2369,7 +2373,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/import_editor.ex:1126
#: lib/bds/desktop/shell_live/import_editor.ex:1183
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:202
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:238
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:24
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:23
#, elixir-autogen, elixir-format
@@ -2463,7 +2467,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/index.html.heex:297
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:122
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
@@ -2492,7 +2496,7 @@ msgid "Technology"
msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:747
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:250
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:286
#: lib/bds/desktop/shell_live/sidebar_components.ex:524
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/ui/registry.ex:134
@@ -2571,7 +2575,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/import_editor.ex:1182
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:146
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:285
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:117
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:153
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:155
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22
@@ -2644,9 +2648,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:615
#: lib/bds/desktop/shell_live/post_editor.ex:644
#: lib/bds/desktop/shell_live/post_editor.ex:649
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2672,7 +2676,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:183
#: lib/bds/desktop/shell_live/misc_editor.ex:743
#: lib/bds/desktop/shell_live/misc_editor.ex:745
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:93
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:129
#: lib/bds/ui/registry.ex:131
#, elixir-autogen, elixir-format
msgid "Translations"
@@ -2723,7 +2727,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:814
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -2743,7 +2747,7 @@ msgstr ""
msgid "Untitled Import"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:418
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:454
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:48
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:46
#, elixir-autogen, elixir-format
@@ -3206,7 +3210,7 @@ msgstr "Image Import Concurrency"
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:371
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr "Add Gallery Images"
@@ -3215,3 +3219,33 @@ msgstr "Add Gallery Images"
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr "Failed to process %{path}: %{reason}"
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:78
#, elixir-autogen, elixir-format, fuzzy
msgid "Archive"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:79
#, elixir-autogen, elixir-format
msgid "Move this post to the archive"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:596
#, elixir-autogen, elixir-format, fuzzy
msgid "Post archived"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:629
#, elixir-autogen, elixir-format, fuzzy
msgid "Post unarchived"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:95
#, elixir-autogen, elixir-format
msgid "Restore this post to draft"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:94
#, elixir-autogen, elixir-format, fuzzy
msgid "Unarchive"
msgstr ""

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -92,7 +92,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:42
#: lib/bds/desktop/shell_live/overlay_manager.ex:72
#: lib/bds/desktop/shell_live/post_editor.ex:700
#: lib/bds/desktop/shell_live/post_editor.ex:776
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:43
#, elixir-autogen, elixir-format
msgid "AI Suggestions"
@@ -155,12 +155,12 @@ msgstr ""
msgid "Add Submenu"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:223
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:259
#, elixir-autogen, elixir-format
msgid "Add category"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:138
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:174
#, elixir-autogen, elixir-format
msgid "Add tag"
msgstr ""
@@ -259,7 +259,7 @@ msgid "Assistant"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:166
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:166
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:202
#, elixir-autogen, elixir-format
msgid "Author"
msgstr ""
@@ -276,8 +276,8 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:349
#: lib/bds/desktop/shell_live/media_editor.ex:538
#: lib/bds/desktop/shell_live/overlay_manager.ex:73
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:616
#: lib/bds/desktop/shell_live/post_editor.ex:643
#: lib/bds/desktop/shell_live/post_editor.ex:692
#, elixir-autogen, elixir-format
msgid "Automatic AI actions stay gated by airplane mode."
msgstr ""
@@ -296,7 +296,7 @@ msgid "Available languages"
msgstr ""
#: lib/bds/desktop/shell_live/panel_renderer.ex:124
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:264
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:300
#, elixir-autogen, elixir-format
msgid "Backlinks"
msgstr ""
@@ -380,7 +380,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/index.html.heex:336
#: lib/bds/desktop/shell_live/misc_editor.ex:750
#: lib/bds/desktop/shell_live/misc_editor.ex:751
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:207
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:243
#: lib/bds/desktop/shell_live/settings_editor/managed_categories.ex:59
#: lib/bds/desktop/shell_live/settings_editor/managed_categories.ex:75
#: lib/bds/desktop/shell_live/settings_editor/managed_categories.ex:107
@@ -512,7 +512,7 @@ msgstr ""
msgid "Confirm"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:326
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:362
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:34
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:32
#: lib/bds/ui/sidebar.ex:761
@@ -561,17 +561,17 @@ msgstr ""
msgid "Create / Edit"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:239
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:275
#, elixir-autogen, elixir-format
msgid "Create category"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:157
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:193
#, elixir-autogen, elixir-format
msgid "Create tag"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:417
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:453
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:48
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:46
#, elixir-autogen, elixir-format
@@ -622,7 +622,7 @@ msgstr ""
msgid "Date Distribution"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:252
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:288
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:174
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:182
#, elixir-autogen, elixir-format
@@ -647,7 +647,7 @@ msgstr ""
#: lib/bds/desktop/menu_bar.ex:162
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:98
#: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:166
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:80
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:116
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:16
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_components.ex:518
@@ -709,7 +709,7 @@ msgstr ""
msgid "Desktop Runtime"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:187
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:223
#, elixir-autogen, elixir-format
msgid "Detect"
msgstr ""
@@ -719,9 +719,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:199
#: lib/bds/desktop/shell_live/media_editor.ex:205
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:59
#: lib/bds/desktop/shell_live/post_editor.ex:566
#: lib/bds/desktop/shell_live/post_editor.ex:595
#: lib/bds/desktop/shell_live/post_editor.ex:601
#: lib/bds/desktop/shell_live/post_editor.ex:642
#: lib/bds/desktop/shell_live/post_editor.ex:671
#: lib/bds/desktop/shell_live/post_editor.ex:677
#, elixir-autogen, elixir-format
msgid "Detect Language"
msgstr ""
@@ -787,7 +787,7 @@ msgstr ""
msgid "Display Text"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:196
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:232
#, elixir-autogen, elixir-format
msgid "Do Not Translate"
msgstr ""
@@ -909,8 +909,8 @@ msgstr ""
msgid "Exact Match"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:313
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:318
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:349
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:354
#, elixir-autogen, elixir-format
msgid "Excerpt"
msgstr ""
@@ -994,7 +994,7 @@ msgid "Force Reload"
msgstr ""
#: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:194
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:383
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:419
#, elixir-autogen, elixir-format
msgid "Gallery"
msgstr ""
@@ -1046,7 +1046,7 @@ msgstr ""
#: lib/bds/desktop/shell_data.ex:116
#: lib/bds/desktop/shell_live/index.html.heex:666
#: lib/bds/desktop/shell_live/media_editor.ex:703
#: lib/bds/desktop/shell_live/post_editor.ex:818
#: lib/bds/desktop/shell_live/post_editor.ex:894
#, elixir-autogen, elixir-format
msgid "Idle"
msgstr ""
@@ -1188,12 +1188,12 @@ msgstr ""
msgid "Insert"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:354
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:390
#, elixir-autogen, elixir-format
msgid "Insert Link"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:363
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:399
#, elixir-autogen, elixir-format
msgid "Insert Media"
msgstr ""
@@ -1211,13 +1211,13 @@ msgstr ""
#: lib/bds/desktop/shell_live/import_editor.ex:874
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:171
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:171
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:207
#, elixir-autogen, elixir-format
msgid "Language"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:206
#: lib/bds/desktop/shell_live/post_editor.ex:602
#: lib/bds/desktop/shell_live/post_editor.ex:678
#, elixir-autogen, elixir-format
msgid "Language detection failed."
msgstr ""
@@ -1233,7 +1233,7 @@ msgstr ""
msgid "Link to Post"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:293
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:329
#, elixir-autogen, elixir-format
msgid "Linked Media"
msgstr ""
@@ -1244,7 +1244,7 @@ msgid "Linked Posts"
msgstr ""
#: lib/bds/desktop/shell_live/panel_renderer.ex:142
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:276
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:312
#, elixir-autogen, elixir-format
msgid "Links To"
msgstr ""
@@ -1301,7 +1301,7 @@ msgstr ""
msgid "Mapped"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:821
#: lib/bds/desktop/shell_live/post_editor.ex:897
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:120
#, elixir-autogen, elixir-format
msgid "Markdown"
@@ -1352,7 +1352,7 @@ msgstr ""
msgid "Merge Tags"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:90
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:126
#, elixir-autogen, elixir-format
msgid "Metadata"
msgstr ""
@@ -1464,8 +1464,8 @@ msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:468
#: lib/bds/desktop/shell_live/overlay_html/shell_overlay.html.heex:72
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:272
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:284
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:308
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:320
#: lib/bds/desktop/shell_live/sidebar_components.ex:320
#: lib/bds/desktop/shell_live/sidebar_components.ex:380
#: lib/bds/desktop/shell_live/sidebar_components.ex:454
@@ -1476,7 +1476,7 @@ msgstr ""
msgid "No items"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:306
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:342
#, elixir-autogen, elixir-format
msgid "No linked media"
msgstr ""
@@ -1713,7 +1713,7 @@ msgstr ""
msgid "OpenAI-compatible endpoints, model routing, airplane mode, and system prompt"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:301
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:337
#, elixir-autogen, elixir-format
msgid "Order"
msgstr ""
@@ -1799,12 +1799,16 @@ msgid "Persist the detected language for this media item"
msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:742
#: lib/bds/desktop/shell_live/post_editor.ex:464
#: lib/bds/desktop/shell_live/post_editor.ex:468
#: lib/bds/desktop/shell_live/post_editor.ex:503
#: lib/bds/desktop/shell_live/post_editor.ex:507
#: lib/bds/desktop/shell_live/post_editor.ex:542
#: lib/bds/desktop/shell_live/post_editor.ex:557
#: lib/bds/desktop/shell_live/post_editor.ex:474
#: lib/bds/desktop/shell_live/post_editor.ex:478
#: lib/bds/desktop/shell_live/post_editor.ex:513
#: lib/bds/desktop/shell_live/post_editor.ex:517
#: lib/bds/desktop/shell_live/post_editor.ex:552
#: lib/bds/desktop/shell_live/post_editor.ex:567
#: lib/bds/desktop/shell_live/post_editor.ex:596
#: lib/bds/desktop/shell_live/post_editor.ex:599
#: lib/bds/desktop/shell_live/post_editor.ex:629
#: lib/bds/desktop/shell_live/post_editor.ex:632
#: lib/bds/desktop/shell_live/sidebar_components.ex:515
#: lib/bds/desktop/shell_live/sidebar_delete.ex:174
#: lib/bds/ui/registry.ex:99
@@ -1814,7 +1818,7 @@ msgstr ""
#: lib/bds/desktop/shell_data.ex:247
#: lib/bds/desktop/shell_live/panel_renderer.ex:118
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:261
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:297
#, elixir-autogen, elixir-format
msgid "Post Links"
msgstr ""
@@ -1834,12 +1838,12 @@ msgstr ""
msgid "Post is marked as do-not-translate but has translations"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:503
#: lib/bds/desktop/shell_live/post_editor.ex:513
#, elixir-autogen, elixir-format
msgid "Post published"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:464
#: lib/bds/desktop/shell_live/post_editor.ex:474
#, elixir-autogen, elixir-format
msgid "Post saved"
msgstr ""
@@ -1863,7 +1867,7 @@ msgstr ""
msgid "Preferences"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:822
#: lib/bds/desktop/shell_live/post_editor.ex:898
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:121
#, elixir-autogen, elixir-format
msgid "Preview"
@@ -1879,7 +1883,7 @@ msgstr ""
msgid "Preview Post"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:394
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:430
#, elixir-autogen, elixir-format
msgid "Preview unavailable"
msgstr ""
@@ -1919,7 +1923,7 @@ msgstr ""
msgid "Public URL"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:70
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:106
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:11
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:11
#, elixir-autogen, elixir-format
@@ -1932,8 +1936,8 @@ msgid "Publish Selected"
msgstr ""
#: lib/bds/desktop/shell_data.ex:181
#: lib/bds/desktop/shell_live/post_editor.ex:816
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:420
#: lib/bds/desktop/shell_live/post_editor.ex:892
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:456
#: lib/bds/ui/sidebar.ex:320
#, elixir-autogen, elixir-format
msgid "Published"
@@ -2068,12 +2072,12 @@ msgstr ""
msgid "Remove"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:214
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:250
#, elixir-autogen, elixir-format
msgid "Remove category"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:129
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:165
#, elixir-autogen, elixir-format
msgid "Remove tag"
msgstr ""
@@ -2130,7 +2134,7 @@ msgstr ""
msgid "Result"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:817
#: lib/bds/desktop/shell_live/post_editor.ex:893
#, elixir-autogen, elixir-format
msgid "Reverted"
msgstr ""
@@ -2182,7 +2186,7 @@ msgid "Save Translation"
msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:702
#: lib/bds/desktop/shell_live/post_editor.ex:815
#: lib/bds/desktop/shell_live/post_editor.ex:891
#, elixir-autogen, elixir-format
msgid "Saved"
msgstr ""
@@ -2382,7 +2386,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/import_editor.ex:1126
#: lib/bds/desktop/shell_live/import_editor.ex:1183
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:202
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:238
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:24
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:23
#, elixir-autogen, elixir-format
@@ -2476,7 +2480,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/index.html.heex:297
#: lib/bds/desktop/shell_live/index.html.heex:325
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:161
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:122
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:158
#: lib/bds/desktop/shell_live/tags_editor.ex:94
#: lib/bds/desktop/shell_live/tags_editor.ex:136
#: lib/bds/desktop/shell_live/tags_editor.ex:189
@@ -2505,7 +2509,7 @@ msgid "Technology"
msgstr ""
#: lib/bds/desktop/shell_live/misc_editor.ex:747
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:250
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:286
#: lib/bds/desktop/shell_live/sidebar_components.ex:524
#: lib/bds/desktop/shell_live/sidebar_delete.ex:179
#: lib/bds/ui/registry.ex:134
@@ -2584,7 +2588,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/import_editor.ex:1182
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:146
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:285
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:117
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:153
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:23
#: lib/bds/desktop/shell_live/settings_editor_html/settings_editor.html.heex:155
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:22
@@ -2657,9 +2661,9 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:558
#: lib/bds/desktop/shell_live/media_editor.ex:563
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:76
#: lib/bds/desktop/shell_live/post_editor.ex:615
#: lib/bds/desktop/shell_live/post_editor.ex:644
#: lib/bds/desktop/shell_live/post_editor.ex:649
#: lib/bds/desktop/shell_live/post_editor.ex:691
#: lib/bds/desktop/shell_live/post_editor.ex:720
#: lib/bds/desktop/shell_live/post_editor.ex:725
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:60
#, elixir-autogen, elixir-format
msgid "Translate"
@@ -2685,7 +2689,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:183
#: lib/bds/desktop/shell_live/misc_editor.ex:743
#: lib/bds/desktop/shell_live/misc_editor.ex:745
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:93
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:129
#: lib/bds/ui/registry.ex:131
#, elixir-autogen, elixir-format
msgid "Translations"
@@ -2736,7 +2740,7 @@ msgstr ""
#: lib/bds/desktop/shell_live/media_editor.ex:701
#: lib/bds/desktop/shell_live/media_editor_html/media_editor.html.heex:10
#: lib/bds/desktop/shell_live/post_editor.ex:814
#: lib/bds/desktop/shell_live/post_editor.ex:890
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:7
#, elixir-autogen, elixir-format
msgid "Unsaved"
@@ -2756,7 +2760,7 @@ msgstr ""
msgid "Untitled Import"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:418
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:454
#: lib/bds/desktop/shell_live/script_editor_html/script_editor.html.heex:48
#: lib/bds/desktop/shell_live/template_editor_html/template_editor.html.heex:46
#, elixir-autogen, elixir-format
@@ -3219,7 +3223,7 @@ msgstr ""
#: lib/bds/desktop/shell_live.ex:649
#: lib/bds/desktop/shell_live.ex:658
#: lib/bds/desktop/shell_live.ex:665
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:371
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:407
#, elixir-autogen, elixir-format
msgid "Add Gallery Images"
msgstr ""
@@ -3228,3 +3232,33 @@ msgstr ""
#, elixir-autogen, elixir-format
msgid "Failed to process %{path}: %{reason}"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:78
#, elixir-autogen, elixir-format
msgid "Archive"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:79
#, elixir-autogen, elixir-format
msgid "Move this post to the archive"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:596
#, elixir-autogen, elixir-format
msgid "Post archived"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor.ex:629
#, elixir-autogen, elixir-format
msgid "Post unarchived"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:95
#, elixir-autogen, elixir-format
msgid "Restore this post to draft"
msgstr ""
#: lib/bds/desktop/shell_live/post_editor_html/post_editor.html.heex:94
#, elixir-autogen, elixir-format
msgid "Unarchive"
msgstr ""

View File

@@ -296,6 +296,65 @@ defmodule BDS.PostsTest do
assert contents =~ "\n---\nBody\n"
end
test "unarchive_post transitions archived draft back to draft", %{project: project} do
assert {:ok, post} =
BDS.Posts.create_post(%{
project_id: project.id,
title: "Archive Then Unarchive",
content: "Draft body"
})
assert {:ok, archived} = BDS.Posts.archive_post(post.id)
assert archived.status == :archived
assert {:ok, unarchived} = BDS.Posts.unarchive_post(archived.id)
assert unarchived.status == :draft
assert unarchived.content == "Draft body"
end
test "unarchive_post restores content from disk for previously published posts" do
temp_dir =
Path.join(System.tmp_dir!(), "bds-post-unarchive-#{System.unique_integer([:positive])}")
File.mkdir_p!(temp_dir)
on_exit(fn -> File.rm_rf(temp_dir) end)
assert {:ok, project} =
BDS.Projects.create_project(%{name: "Unarchive Pub", data_path: temp_dir})
assert {:ok, post} =
BDS.Posts.create_post(%{
project_id: project.id,
title: "Publish Then Archive",
content: "Published body"
})
assert {:ok, published} = BDS.Posts.publish_post(post.id)
assert published.content == nil
assert {:ok, archived} = BDS.Posts.archive_post(published.id)
assert archived.status == :archived
assert archived.content == nil
assert {:ok, unarchived} = BDS.Posts.unarchive_post(archived.id)
assert unarchived.status == :draft
assert unarchived.content == "Published body"
end
test "unarchive_post rejects non-archived posts", %{project: project} do
assert {:ok, post} =
BDS.Posts.create_post(%{
project_id: project.id,
title: "Still Draft",
content: "Body"
})
assert {:error, %Ecto.Changeset{}} = BDS.Posts.unarchive_post(post.id)
end
test "unarchive_post returns not_found for nonexistent post" do
assert {:error, :not_found} = BDS.Posts.unarchive_post(Ecto.UUID.generate())
end
test "rebuild_posts_from_files recreates published posts from disk" do
temp_dir =
Path.join(System.tmp_dir!(), "bds-post-rebuild-#{System.unique_integer([:positive])}")

View File

@@ -20,16 +20,16 @@ defmodule BDS.TranslationCompletenessTest do
expected = %{
"de/default.po" => 0,
"de/render.po" => 0,
"de/ui.po" => 153,
"de/ui.po" => 0,
"fr/default.po" => 0,
"fr/render.po" => 0,
"fr/ui.po" => 153,
"fr/ui.po" => 0,
"it/default.po" => 0,
"it/render.po" => 0,
"it/ui.po" => 153,
"it/ui.po" => 0,
"es/default.po" => 0,
"es/render.po" => 0,
"es/ui.po" => 153
"es/ui.po" => 0
}
actual =