summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--app/views/assets/index.html.erb10
-rw-r--r--app/views/events/index.html.erb12
-rw-r--r--app/views/menu_items/index.html.erb10
-rw-r--r--app/views/nodes/_node_list.html.erb8
-rw-r--r--app/views/nodes/index.html.erb14
-rw-r--r--app/views/shared/_page_actions.html.erb32
-rw-r--r--app/views/users/_user.html.erb6
-rw-r--r--app/views/users/index.html.erb18
-rw-r--r--config/initializers/will_paginate.rb4
-rw-r--r--config/locales/de.yml9
-rw-r--r--config/locales/en.yml9
-rw-r--r--public/stylesheets/admin.css108
12 files changed, 177 insertions, 63 deletions
diff --git a/app/views/assets/index.html.erb b/app/views/assets/index.html.erb
index 81d2686a..af11f54f 100644
--- a/app/views/assets/index.html.erb
+++ b/app/views/assets/index.html.erb
@@ -1,8 +1,8 @@
1<h1><%= t(".title") %></h1> 1<%= render "shared/page_actions",
2 2 :title => t(".title"),
3<%= link_to new_asset_path, class: 'action_button' do %> 3 :icon_name => "photo-plus",
4 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_asset") %> 4 :label => t(".create_asset"),
5<% end %> 5 :options => [[t(".create_asset"), new_asset_path]] %>
6 6
7<%= will_paginate @assets %> 7<%= will_paginate @assets %>
8 8
diff --git a/app/views/events/index.html.erb b/app/views/events/index.html.erb
index cc3f163d..c4f0a7f9 100644
--- a/app/views/events/index.html.erb
+++ b/app/views/events/index.html.erb
@@ -1,10 +1,8 @@
1<h1><%= t(".title") %></h1> 1<%= render "shared/page_actions",
2 2 :title => t(".title"),
3<div class="button_row"> 3 :icon_name => "calendar-plus",
4 <%= link_to new_event_path, class: 'action_button' do %> 4 :label => t(".create_event"),
5 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_event") %> 5 :options => [[t(".create_event"), new_event_path]] %>
6 <% end %>
7</div>
8 6
9<%= will_paginate @events %> 7<%= will_paginate @events %>
10 8
diff --git a/app/views/menu_items/index.html.erb b/app/views/menu_items/index.html.erb
index 0eacc34a..b1c235da 100644
--- a/app/views/menu_items/index.html.erb
+++ b/app/views/menu_items/index.html.erb
@@ -1,8 +1,8 @@
1<h1><%= t(".title") %></h1> 1<%= render "shared/page_actions",
2 2 :title => t(".title"),
3<%= link_to new_menu_item_path, class: 'action_button' do %> 3 :icon_name => "list-details",
4 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_item") %> 4 :label => t(".create_item"),
5<% end %> 5 :options => [[t(".create_item"), new_menu_item_path]] %>
6 6
7<p class="field_hint"><%= t(".reorder_hint") %></p> 7<p class="field_hint"><%= t(".reorder_hint") %></p>
8 8
diff --git a/app/views/nodes/_node_list.html.erb b/app/views/nodes/_node_list.html.erb
index 458ab1ae..f3101058 100644
--- a/app/views/nodes/_node_list.html.erb
+++ b/app/views/nodes/_node_list.html.erb
@@ -14,11 +14,6 @@
14 14
15<%= will_paginate @nodes %> 15<%= will_paginate @nodes %>
16<table class="node_table"> 16<table class="node_table">
17 <tr class="header">
18 <th class="title"><%= t("admin.columns.title") %></th>
19 <th class="actions"><%= t("admin.columns.actions") %></th>
20 <th class="revision"><%= t("admin.columns.rev") %></th>
21 </tr>
22 <% @nodes.each do |node| %> 17 <% @nodes.each do |node| %>
23 <tr class="<%= cycle("even", "odd") %>"> 18 <tr class="<%= cycle("even", "odd") %>">
24 <td class="title"> 19 <td class="title">
@@ -30,7 +25,7 @@
30 t(".flag_embargo", :date => admin_datetime(node.head.published_at)), 25 t(".flag_embargo", :date => admin_datetime(node.head.published_at)),
31 :tier => :attention) if node.embargoed? %> 26 :tier => :attention) if node.embargoed? %>
32 <%= flag("file-pencil", t(".flag_draft")) if node.draft %> 27 <%= flag("file-pencil", t(".flag_draft")) if node.draft %>
33 <%= flag("file-off", t(".flag_no_head")) unless node.head %> 28 <%= flag("world-off", t(".flag_no_head")) unless node.head %>
34 </span> 29 </span>
35 <div class="title_body"> 30 <div class="title_body">
36 <div class="node_title"><%= link_to title_for_node(node), node_path(node) %></div> 31 <div class="node_title"><%= link_to title_for_node(node), node_path(node) %></div>
@@ -54,7 +49,6 @@
54 </span> 49 </span>
55 </div> 50 </div>
56 </td> 51 </td>
57 <td><%= node.head ? node.head.revision : t(".no_revision") %></td>
58 </tr> 52 </tr>
59 <% end %> 53 <% end %>
60</table> 54</table>
diff --git a/app/views/nodes/index.html.erb b/app/views/nodes/index.html.erb
index 357c938b..b88eca06 100644
--- a/app/views/nodes/index.html.erb
+++ b/app/views/nodes/index.html.erb
@@ -1,10 +1,8 @@
1<h1><%= t(".title") %></h1> 1<%= render "shared/page_actions",
2 2 :title => t(".title"),
3<div> 3 :icon_name => "file-plus",
4 <%= link_to new_node_path, class: 'action_button' do %> 4 :label => t(".create_node"),
5 <%= icon("plus", library: "tabler", "aria-hidden": true) %> <%= t(".create_node") %> 5 :options => [[t(".create_node"), new_node_path]],
6 <% end %> 6 :hint => t(".create_hint") %>
7 <span class="field_hint"><%= t(".create_hint") %></span>
8</div>
9 7
10<%= render 'node_list' %> 8<%= render 'node_list' %>
diff --git a/app/views/shared/_page_actions.html.erb b/app/views/shared/_page_actions.html.erb
new file mode 100644
index 00000000..66aeb785
--- /dev/null
+++ b/app/views/shared/_page_actions.html.erb
@@ -0,0 +1,32 @@
1<div class="page_actions">
2 <h1><%= title %></h1>
3
4 <% if options.size == 1 %>
5 <%= link_to options.first.last, class: "action_button",
6 "aria-label" => options.first.first, title: options.first.first do %>
7 <%= icon(icon_name, library: "tabler", "aria-hidden": true) %>
8 <% end %>
9 <% else %>
10 <div class="page_action_group">
11 <details class="action_menu">
12 <summary class="action_button" aria-label="<%= label %>" title="<%= label %>">
13 <%= icon(icon_name, library: "tabler", "aria-hidden": true) %>
14 <%= icon("chevron-down", library: "tabler", "aria-hidden": true) %>
15 </summary>
16 <div class="action_menu_items">
17 <% options.each do |option_label, path| %>
18 <%= link_to option_label, path, class: "action_button" %>
19 <% end %>
20 </div>
21 </details>
22
23 <% if local_assigns[:hint].present? %>
24 <details class="action_hint">
25 <summary aria-label="<%= t("admin.common.explain") %>"
26 title="<%= t("admin.common.explain") %>">?</summary>
27 <p><%= hint %></p>
28 </details>
29 <% end %>
30 </div>
31 <% end %>
32</div>
diff --git a/app/views/users/_user.html.erb b/app/views/users/_user.html.erb
index 028ee02f..e70c7032 100644
--- a/app/views/users/_user.html.erb
+++ b/app/views/users/_user.html.erb
@@ -79,7 +79,7 @@
79 form: { data: { confirm: t(".confirm_revoke_redaktion", :login => user.login) }, 79 form: { data: { confirm: t(".confirm_revoke_redaktion", :login => user.login) },
80 class: 'button_to destructive' }, 80 class: 'button_to destructive' },
81 "aria-label" => t(".revoke_redaktion"), title: t(".revoke_redaktion") do %> 81 "aria-label" => t(".revoke_redaktion"), title: t(".revoke_redaktion") do %>
82 <%= icon("user-minus", library: "tabler", "aria-hidden": true) %> 82 <%= icon("users-minus", library: "tabler", "aria-hidden": true) %>
83 <% end %> 83 <% end %>
84 <% end %> 84 <% end %>
85 <% elsif user.otp_enrolled? %> 85 <% elsif user.otp_enrolled? %>
@@ -87,13 +87,13 @@
87 form: { data: { confirm: t(".confirm_grant_redaktion", :login => user.login) }, 87 form: { data: { confirm: t(".confirm_grant_redaktion", :login => user.login) },
88 class: 'button_to state_changing' }, 88 class: 'button_to state_changing' },
89 "aria-label" => t(".grant_redaktion"), title: t(".grant_redaktion") do %> 89 "aria-label" => t(".grant_redaktion"), title: t(".grant_redaktion") do %>
90 <%= icon("user-plus", library: "tabler", "aria-hidden": true) %> 90 <%= icon("users-plus", library: "tabler", "aria-hidden": true) %>
91 <% end %> 91 <% end %>
92 <% else %> 92 <% else %>
93 <button type="button" class="disabled_action" disabled 93 <button type="button" class="disabled_action" disabled
94 title="<%= t(".grant_redaktion_blocked") %>" 94 title="<%= t(".grant_redaktion_blocked") %>"
95 aria-label="<%= t(".grant_redaktion_blocked") %>"> 95 aria-label="<%= t(".grant_redaktion_blocked") %>">
96 <%= icon("user-plus", library: "tabler", "aria-hidden": true) %> 96 <%= icon("users-plus", library: "tabler", "aria-hidden": true) %>
97 </button> 97 </button>
98 <% end %> 98 <% end %>
99 <% end %> 99 <% end %>
diff --git a/app/views/users/index.html.erb b/app/views/users/index.html.erb
index 2936bbea..71102c2c 100644
--- a/app/views/users/index.html.erb
+++ b/app/views/users/index.html.erb
@@ -1,14 +1,10 @@
1<h1><%= t(".title") %></h1> 1<%= render "shared/page_actions",
2 2 :title => t(".title"),
3<p class="button_row"> 3 :icon_name => "user-plus",
4 <% UsersController::ROLE_PRESETS.each_key do |preset| %> 4 :label => t(".create_account"),
5 <%= link_to new_user_path(:preset => preset), class: 'action_button' do %> 5 :options => UsersController::ROLE_PRESETS.each_key.map { |preset|
6 <%= icon("plus", library: "tabler", "aria-hidden": true) %> 6 [t(".create_#{preset}"), new_user_path(:preset => preset)] },
7 <%= t(".create_#{preset}") %> 7 :hint => t(".admin_hint") %>
8 <% end %>
9 <% end %>
10</p>
11<p class="field_hint"><%= t(".admin_hint") %></p>
12 8
13<% UsersController::GROUP_ORDER.each do |group| %> 9<% UsersController::GROUP_ORDER.each do |group| %>
14 <% members = @users[group] || [] %> 10 <% members = @users[group] || [] %>
diff --git a/config/initializers/will_paginate.rb b/config/initializers/will_paginate.rb
new file mode 100644
index 00000000..55c6d6e6
--- /dev/null
+++ b/config/initializers/will_paginate.rb
@@ -0,0 +1,4 @@
1Rails.application.config.to_prepare do
2 WillPaginate::ViewHelpers.pagination_options[:inner_window] = 1
3 WillPaginate::ViewHelpers.pagination_options[:outer_window] = 0
4end
diff --git a/config/locales/de.yml b/config/locales/de.yml
index 6f8dd24a..a4181b9b 100644
--- a/config/locales/de.yml
+++ b/config/locales/de.yml
@@ -76,9 +76,9 @@ de:
76 skip_last_comma: true 76 skip_last_comma: true
77 77
78 will_paginate: 78 will_paginate:
79 previous_label: "&#8592; Zurück" 79 previous_label: "&#8592;"
80 previous_aria_label: "Vorherige Seite" 80 previous_aria_label: "Vorherige Seite"
81 next_label: "Weiter &#8594;" 81 next_label: "&#8594;"
82 next_aria_label: "Nächste Seite" 82 next_aria_label: "Nächste Seite"
83 page_gap: "&hellip;" 83 page_gap: "&hellip;"
84 container_aria_label: "Seitennavigation" 84 container_aria_label: "Seitennavigation"
@@ -337,6 +337,7 @@ de:
337 action_log: "Letzte Änderungen dieses Kontos" 337 action_log: "Letzte Änderungen dieses Kontos"
338 index: 338 index:
339 title: "Benutzerkonten" 339 title: "Benutzerkonten"
340 create_account: "Konto anlegen"
340 create_editor: "Editor-Konto anlegen" 341 create_editor: "Editor-Konto anlegen"
341 create_redaktion: "Redaktions-Konto anlegen" 342 create_redaktion: "Redaktions-Konto anlegen"
342 create_admin: "Admin-Konto anlegen" 343 create_admin: "Admin-Konto anlegen"
@@ -374,14 +375,12 @@ de:
374 toggle_preview: "Live-Vorschau umschalten" 375 toggle_preview: "Live-Vorschau umschalten"
375 force_render: "Vorschau neu rendern" 376 force_render: "Vorschau neu rendern"
376 revisions: "Revisionen" 377 revisions: "Revisionen"
378 explain: "Was macht das?"
377 "yes": "ja" 379 "yes": "ja"
378 "no": "nein" 380 "no": "nein"
379 columns: 381 columns:
380 id: "ID"
381 title: "Titel" 382 title: "Titel"
382 actions: "Aktionen"
383 locked_by: "Gesperrt von" 383 locked_by: "Gesperrt von"
384 rev: "Rev."
385 path: "Pfad" 384 path: "Pfad"
386 preview: "Vorschau" 385 preview: "Vorschau"
387 name: "Name" 386 name: "Name"
diff --git a/config/locales/en.yml b/config/locales/en.yml
index c7a728ab..4cf7f61f 100644
--- a/config/locales/en.yml
+++ b/config/locales/en.yml
@@ -27,9 +27,9 @@ en:
27 ccc_date: "%d %B, %Y" 27 ccc_date: "%d %B, %Y"
28 28
29 will_paginate: 29 will_paginate:
30 previous_label: "&#8592; Previous" 30 previous_label: "&#8592;"
31 previous_aria_label: "Previous page" 31 previous_aria_label: "Previous page"
32 next_label: "Next &#8594;" 32 next_label: "&#8594;"
33 next_aria_label: "Next page" 33 next_aria_label: "Next page"
34 page_gap: "&hellip;" 34 page_gap: "&hellip;"
35 container_aria_label: "Pagination" 35 container_aria_label: "Pagination"
@@ -285,6 +285,7 @@ en:
285 285
286 index: 286 index:
287 title: "User accounts" 287 title: "User accounts"
288 create_account: "Create an account"
288 create_editor: "Create editor account" 289 create_editor: "Create editor account"
289 create_redaktion: "Create Redaktion account" 290 create_redaktion: "Create Redaktion account"
290 create_admin: "Create admin account" 291 create_admin: "Create admin account"
@@ -322,14 +323,12 @@ en:
322 toggle_preview: "Toggle live preview" 323 toggle_preview: "Toggle live preview"
323 force_render: "Force preview render" 324 force_render: "Force preview render"
324 revisions: "revisions" 325 revisions: "revisions"
326 explain: "What does this do?"
325 "yes": "yes" 327 "yes": "yes"
326 "no": "no" 328 "no": "no"
327 columns: 329 columns:
328 id: "ID"
329 title: "Title" 330 title: "Title"
330 actions: "Actions"
331 locked_by: "Locked by" 331 locked_by: "Locked by"
332 rev: "Rev."
333 path: "Path" 332 path: "Path"
334 preview: "Preview" 333 preview: "Preview"
335 name: "Name" 334 name: "Name"
diff --git a/public/stylesheets/admin.css b/public/stylesheets/admin.css
index 8b976599..e6f31709 100644
--- a/public/stylesheets/admin.css
+++ b/public/stylesheets/admin.css
@@ -338,7 +338,7 @@ div.pagination span.gap {
338 justify-content: center; 338 justify-content: center;
339 min-width: 1.75rem; 339 min-width: 1.75rem;
340 height: 1.75rem; 340 height: 1.75rem;
341 padding: 0 0.4rem; 341 padding: 0 0.2rem;
342 border-radius: 4px; 342 border-radius: 4px;
343 font-style: normal; 343 font-style: normal;
344} 344}
@@ -357,6 +357,11 @@ div.pagination span.gap {
357 color: var(--text-muted); 357 color: var(--text-muted);
358} 358}
359 359
360div.pagination .previous_page,
361div.pagination .next_page {
362 min-width: 2rem;
363}
364
360div.pagination .previous_page.disabled, 365div.pagination .previous_page.disabled,
361div.pagination .next_page.disabled { 366div.pagination .next_page.disabled {
362 color: var(--text-muted); 367 color: var(--text-muted);
@@ -824,11 +829,6 @@ table.revisions_table tr:hover {
824.node_table td.actions { 829.node_table td.actions {
825 width: 1px; 830 width: 1px;
826 white-space: nowrap; 831 white-space: nowrap;
827}
828
829/* Only where the action column is last. In the node lists rev. follows it,
830 and the 25px gutter is a real gap between columns there. */
831.user_table td.actions {
832 padding-right: 0; 832 padding-right: 0;
833} 833}
834 834
@@ -901,6 +901,7 @@ table.revisions_table tr:hover {
901.flag_stack { 901.flag_stack {
902 display: inline-flex; 902 display: inline-flex;
903 flex-direction: column; 903 flex-direction: column;
904 flex-shrink: 0;
904 align-items: flex-start; 905 align-items: flex-start;
905 gap: 0.25rem; 906 gap: 0.25rem;
906 vertical-align: -0.15em; 907 vertical-align: -0.15em;
@@ -917,6 +918,11 @@ table.revisions_table tr:hover {
917.flag_stack .flag_attention svg { color: var(--accent); } 918.flag_stack .flag_attention svg { color: var(--accent); }
918.flag_stack .flag_alert svg { color: var(--danger); } 919.flag_stack .flag_alert svg { color: var(--danger); }
919 920
921table.node_table td {
922 padding-top: 0.8rem;
923 padding-bottom: 0.8rem;
924}
925
920.title_with_flags { 926.title_with_flags {
921 display: flex; 927 display: flex;
922 align-items: flex-start; 928 align-items: flex-start;
@@ -931,9 +937,15 @@ table.revisions_table tr:hover {
931} 937}
932 938
933.node_table .node_path { 939.node_table .node_path {
934 margin-top: 0.15rem; 940 margin-top: 0.25rem;
941 font-size: 0.875rem;
935} 942}
936 943
944.node_table .node_path a {
945 color: var(--text-muted);
946}
947
948
937.user_group_heading { 949.user_group_heading {
938 margin-top: 1.5rem; 950 margin-top: 1.5rem;
939} 951}
@@ -1516,6 +1528,88 @@ input#menu_item_title {
1516 } 1528 }
1517} 1529}
1518 1530
1531.page_actions {
1532 display: flex;
1533 flex-wrap: wrap;
1534 align-items: baseline;
1535 gap: 0.5rem;
1536 margin-bottom: 1rem;
1537}
1538
1539/* Pushes the actions to the right of the heading. */
1540.page_actions h1 {
1541 margin: 0 auto 0 0;
1542}
1543
1544.page_action_group {
1545 display: flex;
1546 align-items: flex-start;
1547 gap: 0.5rem;
1548}
1549
1550.action_menu {
1551 position: relative;
1552}
1553
1554/* Safari renders a disclosure triangle unless both are set. */
1555.action_menu > summary,
1556.action_hint > summary {
1557 cursor: pointer;
1558 list-style: none;
1559}
1560
1561.action_menu > summary::-webkit-details-marker,
1562.action_hint > summary::-webkit-details-marker {
1563 display: none;
1564}
1565
1566.action_menu_items {
1567 position: absolute;
1568 top: 100%;
1569 right: 0;
1570 z-index: 1;
1571 display: flex;
1572 flex-direction: column;
1573 align-items: stretch;
1574 gap: 0.25rem;
1575 margin-top: 0.25rem;
1576 padding: 0.5rem;
1577 background-color: var(--surface-raised);
1578 border: 1px solid var(--border);
1579 border-radius: var(--radius);
1580}
1581
1582.action_hint > summary {
1583 display: inline-flex;
1584 align-items: center;
1585 justify-content: center;
1586 width: 1.5rem;
1587 height: 1.5rem;
1588 border: 1px solid var(--border);
1589 border-radius: 50%;
1590 color: var(--text-muted);
1591 font-weight: bold;
1592}
1593
1594.action_hint {
1595 position: relative;
1596}
1597
1598.action_hint p {
1599 position: absolute;
1600 top: 100%;
1601 right: 0;
1602 z-index: 1;
1603 width: max-content;
1604 max-width: 22rem;
1605 margin: 0.5rem 0 0;
1606 padding: 0.5rem;
1607 color: var(--text-muted);
1608 background-color: var(--surface-raised);
1609 border: 1px solid var(--border);
1610 border-radius: var(--radius);
1611}
1612
1519/* ============================================================ 1613/* ============================================================
1520 Draft list (dashboard widget) 1614 Draft list (dashboard widget)
1521 ============================================================ */ 1615 ============================================================ */