68 lines
3.0 KiB
Ruby
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
|