Files
writebook/app/helpers/books_helper.rb

68 lines
3.0 KiB
Ruby

module BooksHelper
def book_toc_tag(book, &)
tag.ol class: "toc", tabindex: 0,
data: {
controller: "arrangement",
action: arrangement_actions,
arrangement_cursor_class: "arrangement-cursor",
arrangement_selected_class: "arrangement-selected",
arrangement_placeholder_class: "arrangement-placeholder",
arrangement_move_mode_class: "arrangement-move-mode",
arrangement_url_value: book_leaves_moves_url(book)
}, &
end
def book_part_create_button(book, kind, **, &)
url = url_for [ book, kind.new ]
button_to url, class: "btn btn--plain txt-medium fill-transparent disable-when-arranging disable-when-deleting", draggable: true,
data: {
action: "dragstart->arrangement#dragStartCreate dragend->arrangement#dragEndCreate",
arrangement_url_param: url
}, **, &
end
def link_to_first_leafable(leaves)
if first_leaf = leaves.first
link_to leafable_slug_path(first_leaf), data: hotkey_data_attributes("right"), class: "disable-when-arranging", hidden: true do
tag.span(class: "btn") do
image_tag("arrow-right.svg", aria: { hidden: true }, size: 24) + tag.span("Start reading", class: "for-screen-reader")
end + tag.span(first_leaf.title, class: "overflow-ellipsis")
end
end
end
def link_to_previous_leafable(leaf, hotkey: true, for_edit: false)
if previous_leaf = leaf.previous
path = for_edit ? edit_leafable_path(previous_leaf) : leafable_slug_path(previous_leaf)
link_to path, data: hotkey_data_attributes("left", enabled: hotkey), class: "btn" do
image_tag("arrow-left.svg", aria: { hidden: true }, size: 24) + tag.span("Previous: #{ previous_leaf.title }", class: "for-screen-reader")
end
else
link_to book_slug_path(leaf.book), data: hotkey_data_attributes("left", enabled: hotkey), class: "btn" do
image_tag("arrow-left.svg", aria: { hidden: true }, size: 24) + tag.span("Table of contents: #{ leaf.book.title }", class: "for-screen-reader")
end
end
end
def link_to_next_leafable(leaf, hotkey: true, for_edit: false)
if next_leaf = leaf.next
path = for_edit ? edit_leafable_path(next_leaf) : leafable_slug_path(next_leaf)
link_to path, data: hotkey_data_attributes("right", enabled: hotkey), class: "btn txt-medium min-width" do
tag.span("Next: #{next_leaf.title }", class: "overflow-ellipsis") + image_tag("arrow-right.svg", aria: { hidden: true }, size: 24)
end
else
link_to book_slug_path(leaf.book), data: hotkey_data_attributes("right", enabled: hotkey), class: "btn txt-medium" do
tag.span("Table of contents: #{leaf.book.title }", class: "overflow-ellipsis") + image_tag("arrow-reverse.svg", aria: { hidden: true }, size: 24)
end
end
end
private
def hotkey_data_attributes(key, enabled: true)
if enabled
{ controller: "hotkey", action: "keydown.#{key}@document->hotkey#click touch:swipe-#{key}@window->hotkey#click" }
end
end
end