{% include 'snippets/book_cover.html' with book=book size=large %}
{% include 'snippets/rate_action.html' with user=request.user book=book %}
- {% include 'snippets/shelve_button.html' %}
+ {% include 'snippets/shelve_button/shelve_button.html' %}
{% if request.user.is_authenticated and not book.cover %}
- {% include 'snippets/shelve_button.html' with book=book %}
+ {% include 'snippets/shelve_button/shelve_button.html' with book=book %}
{% active_shelf book as active_shelf %}
{% if active_shelf.shelf.identifier == 'reading' and book.latest_readthrough %}
{% include 'snippets/progress_update.html' with readthrough=book.latest_readthrough %}
diff --git a/bookwyrm/templates/snippets/book_preview.html b/bookwyrm/templates/snippets/book_preview.html
index 6f8ff53ac..0c75f9b15 100644
--- a/bookwyrm/templates/snippets/book_preview.html
+++ b/bookwyrm/templates/snippets/book_preview.html
@@ -3,7 +3,7 @@
- {% include 'snippets/shelve_button_dropdown.html' with class="is-small" button_uuid=uuid%}
- {% endif %}
-
-
-{% include 'snippets/start_reading_modal.html' with book=active_shelf.book controls_text="start-reading" controls_uid=uuid %}
-
-{% latest_read_through book request.user as readthrough %}
-{% include 'snippets/finish_reading_modal.html' with book=active_shelf.book controls_text="finish-reading" controls_uid=uuid readthrough=readthrough %}
-
-{% endwith %}
-{% endif %}
diff --git a/bookwyrm/templates/snippets/finish_reading_modal.html b/bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html
similarity index 100%
rename from bookwyrm/templates/snippets/finish_reading_modal.html
rename to bookwyrm/templates/snippets/shelve_button/finish_reading_modal.html
diff --git a/bookwyrm/templates/snippets/shelve_button/shelve_button.html b/bookwyrm/templates/snippets/shelve_button/shelve_button.html
new file mode 100644
index 000000000..5f6ed8d20
--- /dev/null
+++ b/bookwyrm/templates/snippets/shelve_button/shelve_button.html
@@ -0,0 +1,27 @@
+{% load bookwyrm_tags %}
+{% if request.user.is_authenticated %}
+
+{% with book.id|uuid as uuid %}
+{% active_shelf book as active_shelf %}
+
+ {% if switch_mode and active_shelf.book != book %}
+
+ {% include 'snippets/switch_edition_button.html' with edition=book size='is-small' %}
+
+ {% else %}
+
+ {% include 'snippets/shelve_button/shelve_button_options.html' with class="shelf-option is-small" shelves=request.user.shelf_set.all active_shelf=active_shelf button_uuid=uuid %}
+
+ {% include 'snippets/shelve_button/shelve_button_dropdown.html' with class="is-small" button_uuid=uuid%}
+ {% endif %}
+
+
+{% include 'snippets/shelve_button/want_to_read_modal.html' with book=active_shelf.book controls_text="want-to-read" controls_uid=uuid no_body=True %}
+
+{% include 'snippets/shelve_button/start_reading_modal.html' with book=active_shelf.book controls_text="start-reading" controls_uid=uuid %}
+
+{% latest_read_through book request.user as readthrough %}
+{% include 'snippets/shelve_button/finish_reading_modal.html' with book=active_shelf.book controls_text="finish-reading" controls_uid=uuid readthrough=readthrough %}
+
+{% endwith %}
+{% endif %}
diff --git a/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html b/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html
new file mode 100644
index 000000000..47cf35059
--- /dev/null
+++ b/bookwyrm/templates/snippets/shelve_button/shelve_button_dropdown.html
@@ -0,0 +1,10 @@
+{% extends 'components/dropdown.html' %}
+{% block dropdown-trigger %}
+
+ More shelves
+
+{% endblock %}
+
+{% block dropdown-list %}
+{% include 'snippets/shelve_button/shelve_button_options.html' with active_shelf=active_shelf shelves=request.user.shelf_set.all dropdown=True class="shelf-option is-fullwidth is-small" %}
+{% endblock %}
diff --git a/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html b/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html
new file mode 100644
index 000000000..2d7d9609a
--- /dev/null
+++ b/bookwyrm/templates/snippets/shelve_button/shelve_button_options.html
@@ -0,0 +1,25 @@
+{% load bookwyrm_tags %}
+{% for shelf in shelves %}
+{% comparison_bool shelf.identifier active_shelf.shelf.identifier as is_current %}
+{% if dropdown %}
{% endif %}
+
+ {% if shelf.identifier == 'reading' %}{% if not dropdown or active_shelf.shelf.identifier|next_shelf != shelf.identifier %}
+ {% include 'snippets/toggle/toggle_button.html' with class=class text="Start reading" controls_text="start-reading" controls_uid=button_uuid focus="modal-title-start-reading" disabled=is_current %}
+ {% endif %}{% elif shelf.identifier == 'read' and active_shelf.shelf.identifier == 'read' %}{% if not dropdown or active_shelf.shelf.identifier|next_shelf != shelf.identifier %}
+