module SeriesHelper def show_series_data(work) series_data = series_data_for_work(work) series_data.join(ArchiveConfig.DELIMITER_FOR_OUTPUT).html_safe end # this should only show prev and next works visible to the current user def series_data_for_work(work) series = work.serial_works.map(&:series).compact series.map do |serial| works_in_series = serial.works_in_order.posted.select( # Include only the fields needed to calculate visibility: :id, :restricted, :hidden_by_admin, :posted ).select(&:visible?) visible_position = works_in_series.index(work) || works_in_series.length unless !visible_position # Span used at end of previous_link and beginning of next_link to prevent extra # whitespace around main_link if next or previous link is missing. It also allows # us to use CSS to insert a decorative divider divider_span = content_tag(:span, " ", class: "divider") # This is empty if there is no previous work, otherwise it is # # with a left-pointing arrow before "Previous" previous_link = if visible_position > 0 link_to(ts("← Previous Work").html_safe, works_in_series[visible_position - 1], class: "previous") + divider_span else "".html_safe end # This part is always included # Part # of TITLE main_link = content_tag(:span, ts("Part %{position} of %{series_title}", position: (visible_position + 1).to_s, series_title: link_to(serial.title, serial)).html_safe, class: "position") # This is empty if there is no next work, otherwise it is # # with a right-pointing arrow after "Work" next_link = if visible_position < works_in_series.size - 1 divider_span + link_to(ts("Next Work →").html_safe, works_in_series[visible_position + 1], class: "next") else "".html_safe end # put the parts together and wrap them in content_tag(:span, previous_link + main_link + next_link, class: "series") end end end def work_series_description(work, series) serial = SerialWork.where(work_id: work.id, series_id: series.id).first ts("Part %{position} of %{title}".html_safe, position: serial.position, title: link_to(series.title, series)) end def series_list_for_feeds(work) series = work.series if series.empty? return "None" else list = [] for s in series list << ts("Part %{serial_index} of %{link_to_series}", serial_index: s.serial_works.where(work_id: work.id).select(:position).first.position, link_to_series: link_to(s.title, series_url(s))) end return list.join(', ') end end # Generates confirmation message for "Remove Me As Co-Creator" def series_removal_confirmation(series, user) if !(series.work_pseuds & user.pseuds).empty? ts("You're listed as a creator of works in this series. Do you want to remove yourself as a creator of this series and all of its works?") else ts("Are you sure you want to be removed as a creator of this series?") end end end