diff --git a/.editorconfig b/.editorconfig
index d102bc5a..f2e8a178 100644
--- a/.editorconfig
+++ b/.editorconfig
@@ -32,7 +32,7 @@ indent_size = 2
max_line_length = off
# Computer generated files
-[{package.json,*.lock,*.mo}]
+[{icons.css,package.json,*.lock,*.mo}]
indent_size = unset
indent_style = unset
max_line_length = unset
diff --git a/bookwyrm/migrations/0085_user_saved_lists.py b/bookwyrm/migrations/0085_user_saved_lists.py
new file mode 100644
index 00000000..d4d9278c
--- /dev/null
+++ b/bookwyrm/migrations/0085_user_saved_lists.py
@@ -0,0 +1,20 @@
+# Generated by Django 3.2.4 on 2021-08-23 18:05
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+ dependencies = [
+ ("bookwyrm", "0084_auto_20210817_1916"),
+ ]
+
+ operations = [
+ migrations.AddField(
+ model_name="user",
+ name="saved_lists",
+ field=models.ManyToManyField(
+ related_name="saved_lists", to="bookwyrm.List"
+ ),
+ ),
+ ]
diff --git a/bookwyrm/models/user.py b/bookwyrm/models/user.py
index e10bcd29..0ef23d3f 100644
--- a/bookwyrm/models/user.py
+++ b/bookwyrm/models/user.py
@@ -104,6 +104,9 @@ class User(OrderedCollectionPageMixin, AbstractUser):
through_fields=("user_subject", "user_object"),
related_name="blocked_by",
)
+ saved_lists = models.ManyToManyField(
+ "List", symmetrical=False, related_name="saved_lists"
+ )
favorites = models.ManyToManyField(
"Status",
symmetrical=False,
diff --git a/bookwyrm/static/css/fonts/icomoon.eot b/bookwyrm/static/css/fonts/icomoon.eot
index 566fb13d..2c801b2b 100644
Binary files a/bookwyrm/static/css/fonts/icomoon.eot and b/bookwyrm/static/css/fonts/icomoon.eot differ
diff --git a/bookwyrm/static/css/fonts/icomoon.svg b/bookwyrm/static/css/fonts/icomoon.svg
index 6be97327..6327b19e 100644
--- a/bookwyrm/static/css/fonts/icomoon.svg
+++ b/bookwyrm/static/css/fonts/icomoon.svg
@@ -33,13 +33,12 @@
-
+
-
-
-
-
+
+
+
diff --git a/bookwyrm/static/css/fonts/icomoon.ttf b/bookwyrm/static/css/fonts/icomoon.ttf
index 55df6418..242ca739 100644
Binary files a/bookwyrm/static/css/fonts/icomoon.ttf and b/bookwyrm/static/css/fonts/icomoon.ttf differ
diff --git a/bookwyrm/static/css/fonts/icomoon.woff b/bookwyrm/static/css/fonts/icomoon.woff
index fa53e8cf..67b0f0a6 100644
Binary files a/bookwyrm/static/css/fonts/icomoon.woff and b/bookwyrm/static/css/fonts/icomoon.woff differ
diff --git a/bookwyrm/static/css/vendor/icons.css b/bookwyrm/static/css/vendor/icons.css
index c78af145..db783c24 100644
--- a/bookwyrm/static/css/vendor/icons.css
+++ b/bookwyrm/static/css/vendor/icons.css
@@ -1,156 +1,150 @@
-
-/** @todo Replace icons with SVG symbols.
- @see https://www.youtube.com/watch?v=9xXBYcWgCHA */
@font-face {
- font-family: 'icomoon';
- src: url('../fonts/icomoon.eot?n5x55');
- src: url('../fonts/icomoon.eot?n5x55#iefix') format('embedded-opentype'),
- url('../fonts/icomoon.ttf?n5x55') format('truetype'),
- url('../fonts/icomoon.woff?n5x55') format('woff'),
- url('../fonts/icomoon.svg?n5x55#icomoon') format('svg');
- font-weight: normal;
- font-style: normal;
- font-display: block;
+ font-family: 'icomoon';
+ src: url('../fonts/icomoon.eot?19nagi');
+ src: url('../fonts/icomoon.eot?19nagi#iefix') format('embedded-opentype'),
+ url('../fonts/icomoon.ttf?19nagi') format('truetype'),
+ url('../fonts/icomoon.woff?19nagi') format('woff'),
+ url('../fonts/icomoon.svg?19nagi#icomoon') format('svg');
+ font-weight: normal;
+ font-style: normal;
+ font-display: block;
}
[class^="icon-"], [class*=" icon-"] {
- /* use !important to prevent issues with browser extensions that change fonts */
- font-family: 'icomoon' !important;
- speak: never;
- font-style: normal;
- font-weight: normal;
- font-variant: normal;
- text-transform: none;
- line-height: 1;
+ /* use !important to prevent issues with browser extensions that change fonts */
+ font-family: 'icomoon' !important;
+ speak: never;
+ font-style: normal;
+ font-weight: normal;
+ font-variant: normal;
+ text-transform: none;
+ line-height: 1;
- /* Better Font Rendering =========== */
- -webkit-font-smoothing: antialiased;
- -moz-osx-font-smoothing: grayscale;
+ /* Better Font Rendering =========== */
+ -webkit-font-smoothing: antialiased;
+ -moz-osx-font-smoothing: grayscale;
}
.icon-graphic-heart:before {
- content: "\e91e";
+ content: "\e91e";
}
.icon-graphic-paperplane:before {
- content: "\e91f";
+ content: "\e91f";
}
.icon-graphic-banknote:before {
- content: "\e920";
-}
-.icon-stars:before {
- content: "\e91a";
+ content: "\e920";
}
.icon-warning:before {
- content: "\e91b";
+ content: "\e91b";
}
.icon-book:before {
- content: "\e900";
+ content: "\e900";
}
.icon-bookmark:before {
- content: "\e91c";
+ content: "\e91a";
}
.icon-rss:before {
- content: "\e91d";
+ content: "\e91d";
}
.icon-envelope:before {
- content: "\e901";
+ content: "\e901";
}
.icon-arrow-right:before {
- content: "\e902";
+ content: "\e902";
}
.icon-bell:before {
- content: "\e903";
+ content: "\e903";
}
.icon-x:before {
- content: "\e904";
+ content: "\e904";
}
.icon-quote-close:before {
- content: "\e905";
+ content: "\e905";
}
.icon-quote-open:before {
- content: "\e906";
+ content: "\e906";
}
.icon-image:before {
- content: "\e907";
+ content: "\e907";
}
.icon-pencil:before {
- content: "\e908";
+ content: "\e908";
}
.icon-list:before {
- content: "\e909";
+ content: "\e909";
}
.icon-unlock:before {
- content: "\e90a";
+ content: "\e90a";
}
.icon-unlisted:before {
- content: "\e90a";
+ content: "\e90a";
}
.icon-globe:before {
- content: "\e90b";
+ content: "\e90b";
}
.icon-public:before {
- content: "\e90b";
+ content: "\e90b";
}
.icon-lock:before {
- content: "\e90c";
+ content: "\e90c";
}
.icon-followers:before {
- content: "\e90c";
+ content: "\e90c";
}
.icon-chain-broken:before {
- content: "\e90d";
+ content: "\e90d";
}
.icon-chain:before {
- content: "\e90e";
+ content: "\e90e";
}
.icon-comments:before {
- content: "\e90f";
+ content: "\e90f";
}
.icon-comment:before {
- content: "\e910";
+ content: "\e910";
}
.icon-boost:before {
- content: "\e911";
+ content: "\e911";
}
.icon-arrow-left:before {
- content: "\e912";
+ content: "\e912";
}
.icon-arrow-up:before {
- content: "\e913";
+ content: "\e913";
}
.icon-arrow-down:before {
- content: "\e914";
+ content: "\e914";
}
.icon-home:before {
- content: "\e915";
+ content: "\e915";
}
.icon-local:before {
- content: "\e916";
+ content: "\e916";
}
.icon-dots-three:before {
- content: "\e917";
+ content: "\e917";
}
.icon-check:before {
- content: "\e918";
+ content: "\e918";
}
.icon-dots-three-vertical:before {
- content: "\e919";
+ content: "\e919";
}
.icon-search:before {
- content: "\e986";
+ content: "\e986";
}
.icon-star-empty:before {
- content: "\e9d7";
+ content: "\e9d7";
}
.icon-star-half:before {
- content: "\e9d8";
+ content: "\e9d8";
}
.icon-star-full:before {
- content: "\e9d9";
+ content: "\e9d9";
}
.icon-heart:before {
- content: "\e9da";
+ content: "\e9da";
}
.icon-plus:before {
- content: "\ea0a";
+ content: "\ea0a";
}
diff --git a/bookwyrm/templates/lists/bookmark_button.html b/bookwyrm/templates/lists/bookmark_button.html
new file mode 100644
index 00000000..f8f94763
--- /dev/null
+++ b/bookwyrm/templates/lists/bookmark_button.html
@@ -0,0 +1,39 @@
+{% load i18n %}
+{% load interaction %}
+
+{% if request.user.is_authenticated %}
+
+{% with request.user|saved:list as saved %}
+
+
+
+{% endwith %}
+
+{% endif %}
+
diff --git a/bookwyrm/templates/lists/list_layout.html b/bookwyrm/templates/lists/list_layout.html
index b24ce9e3..68abafc0 100644
--- a/bookwyrm/templates/lists/list_layout.html
+++ b/bookwyrm/templates/lists/list_layout.html
@@ -11,12 +11,13 @@
{% include 'lists/created_text.html' with list=list %}
- {% if request.user == list.user %}
-
- {% trans "Edit List" as button_text %}
- {% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="pencil" controls_text="edit_list" focus="edit_list_header" %}
+
+ {% if request.user == list.user %}
+ {% trans "Edit List" as button_text %}
+ {% include 'snippets/toggle/open_button.html' with text=button_text icon_with_text="pencil" controls_text="edit_list" focus="edit_list_header" %}
+ {% endif %}
+ {% include "lists/bookmark_button.html" with list=list %}
- {% endif %}
diff --git a/bookwyrm/templates/lists/lists.html b/bookwyrm/templates/lists/lists.html
index 21f6ada4..d909f5e8 100644
--- a/bookwyrm/templates/lists/lists.html
+++ b/bookwyrm/templates/lists/lists.html
@@ -27,6 +27,21 @@
{% include 'lists/create_form.html' with controls_text="create_list" %}
+{% if request.user.is_authenticated %}
+
+
+
+{% endif %}
+
{% if lists %}
{% include 'lists/list_items.html' with lists=lists %}
diff --git a/bookwyrm/templates/snippets/fav_button.html b/bookwyrm/templates/snippets/fav_button.html
index 0670b4c5..4645ec06 100644
--- a/bookwyrm/templates/snippets/fav_button.html
+++ b/bookwyrm/templates/snippets/fav_button.html
@@ -4,15 +4,27 @@
{% with status.id|uuid as uuid %}
{% with request.user|liked:status as liked %}
-
-