diff options
Diffstat (limited to 'app/helpers/nodes_helper.rb')
| -rw-r--r-- | app/helpers/nodes_helper.rb | 60 |
1 files changed, 47 insertions, 13 deletions
diff --git a/app/helpers/nodes_helper.rb b/app/helpers/nodes_helper.rb index a054a2e..5884c8c 100644 --- a/app/helpers/nodes_helper.rb +++ b/app/helpers/nodes_helper.rb | |||
| @@ -12,7 +12,6 @@ module NodesHelper | |||
| 12 | end | 12 | end |
| 13 | end | 13 | end |
| 14 | 14 | ||
| 15 | |||
| 16 | def truncated_title_for_node node | 15 | def truncated_title_for_node node |
| 17 | if (title = title_for_node node) && title.size > 20 | 16 | if (title = title_for_node node) && title.size > 20 |
| 18 | "<span title='#{title}'>#{truncate(title, 40)}</span>" | 17 | "<span title='#{title}'>#{truncate(title, 40)}</span>" |
| @@ -29,19 +28,54 @@ module NodesHelper | |||
| 29 | User.all.map {|u| [u.login, u.id]} | 28 | User.all.map {|u| [u.login, u.id]} |
| 30 | end | 29 | end |
| 31 | 30 | ||
| 32 | def event_information | 31 | def node_last_editor(node) |
| 33 | if @node.event | 32 | editor = node.draft&.editor || node.head&.editor |
| 34 | safe_join([ | 33 | return nil unless editor |
| 35 | "#{@node.event.start_time.to_fs(:db)} - #{@node.event.end_time.to_fs(:db)} > ", | 34 | editor == current_user ? t("editor_self") : editor.login |
| 36 | link_to('show', event_path(@node.event)), | 35 | end |
| 37 | ' ', | 36 | |
| 38 | link_to('edit', edit_event_path(@node.event)) | 37 | def node_head_editor(node) |
| 39 | ]) | 38 | editor = node.head&.editor |
| 39 | return nil unless editor | ||
| 40 | editor == current_user ? t("publisher_self") : editor.login | ||
| 41 | end | ||
| 42 | |||
| 43 | DEFAULT_EVENT_TAG_BY_PAGE_TAG = { | ||
| 44 | 'erfa-detail' => 'open-day', | ||
| 45 | 'chaostreff-detail' => 'open-day' | ||
| 46 | }.freeze | ||
| 47 | |||
| 48 | def default_event_tag_mapping(page) | ||
| 49 | page_tags = page.tag_list | ||
| 50 | DEFAULT_EVENT_TAG_BY_PAGE_TAG.find { |page_tag, _| page_tags.include?(page_tag) } | ||
| 51 | end | ||
| 52 | |||
| 53 | def default_event_tag_list(page) | ||
| 54 | default_event_tag_mapping(page)&.last | ||
| 55 | end | ||
| 56 | |||
| 57 | def event_schedule_text(event) | ||
| 58 | if event.rrule.present? | ||
| 59 | recurrence = event.humanize_rrule(I18n.locale) | ||
| 60 | if recurrence | ||
| 61 | time = event.start_time&.strftime("%H:%M") | ||
| 62 | time ? "#{recurrence} #{t(:event_schedule_time, time: time)}" : recurrence | ||
| 63 | else | ||
| 64 | "#{event.rrule} (#{t(:event_schedule_unrecognized)})" | ||
| 65 | end | ||
| 66 | elsif event.start_time | ||
| 67 | I18n.l(event.start_time, format: :long) | ||
| 40 | else | 68 | else |
| 41 | safe_join([ | 69 | t(:event_schedule_none) |
| 42 | 'no event attached > ', | ||
| 43 | link_to('add', new_event_path(:node_id => @node.id)) | ||
| 44 | ]) | ||
| 45 | end | 70 | end |
| 46 | end | 71 | end |
| 72 | |||
| 73 | def matching_node_kinds(node) | ||
| 74 | path = node.unique_path | ||
| 75 | CccConventions::NODE_KINDS.select { |_, config| config[:parent_match]&.call(path) } | ||
| 76 | end | ||
| 77 | |||
| 78 | def sitemap_node_open?(node) | ||
| 79 | !CccConventions::SITEMAP_COLLAPSED_PATHS.include?(node.unique_name) | ||
| 80 | end | ||
| 47 | end | 81 | end |
