mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-29 13:01:08 +00:00
Use selected theme
This commit is contained in:
parent
e15193e100
commit
43269429ac
6 changed files with 50 additions and 26 deletions
|
@ -1,4 +1,4 @@
|
||||||
# Generated by Django 3.2.12 on 2022-02-26 20:24
|
# Generated by Django 3.2.12 on 2022-02-26 20:47
|
||||||
|
|
||||||
import django.core.validators
|
import django.core.validators
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
@ -9,17 +9,13 @@ def add_default_themes(apps, schema_editor):
|
||||||
"""add light and dark themes"""
|
"""add light and dark themes"""
|
||||||
db_alias = schema_editor.connection.alias
|
db_alias = schema_editor.connection.alias
|
||||||
theme_model = apps.get_model("bookwyrm", "Theme")
|
theme_model = apps.get_model("bookwyrm", "Theme")
|
||||||
theme_model.objects.using(db_alias).bulk_create(
|
theme_model.objects.using(db_alias).create(
|
||||||
[
|
|
||||||
theme_model.objects.using(db_alias)(
|
|
||||||
name="BookWyrm Light",
|
name="BookWyrm Light",
|
||||||
path="bookwyrm-light.scss",
|
path="bookwyrm-light.scss",
|
||||||
),
|
)
|
||||||
theme_model.objects.using(db_alias)(
|
theme_model.objects.using(db_alias).create(
|
||||||
name="BookWyrm Dark",
|
name="BookWyrm Dark",
|
||||||
path="bookwyrm-dark.scss",
|
path="bookwyrm-dark.scss",
|
||||||
),
|
|
||||||
]
|
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -43,10 +39,11 @@ class Migration(migrations.Migration):
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
("created_date", models.DateTimeField(auto_now_add=True)),
|
("created_date", models.DateTimeField(auto_now_add=True)),
|
||||||
("name", models.CharField(max_length=10, unique=True)),
|
("name", models.CharField(max_length=50, unique=True)),
|
||||||
(
|
(
|
||||||
"theme_file",
|
"theme_file",
|
||||||
models.FileField(
|
models.FileField(
|
||||||
|
null=True,
|
||||||
upload_to="css/",
|
upload_to="css/",
|
||||||
validators=[
|
validators=[
|
||||||
django.core.validators.FileExtensionValidator(
|
django.core.validators.FileExtensionValidator(
|
||||||
|
@ -55,6 +52,7 @@ class Migration(migrations.Migration):
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
("path", models.CharField(blank=True, max_length=50, null=True)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
migrations.AddField(
|
migrations.AddField(
|
||||||
|
@ -67,7 +65,17 @@ class Migration(migrations.Migration):
|
||||||
to="bookwyrm.theme",
|
to="bookwyrm.theme",
|
||||||
),
|
),
|
||||||
),
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="user",
|
||||||
|
name="theme",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to="bookwyrm.theme",
|
||||||
|
),
|
||||||
|
),
|
||||||
migrations.RunPython(
|
migrations.RunPython(
|
||||||
add_default_themes, reversed_code=migrations.RunPython.noop
|
add_default_themes, reverse_code=migrations.RunPython.noop
|
||||||
),
|
),
|
||||||
]
|
]
|
|
@ -26,7 +26,7 @@ from .group import Group, GroupMember, GroupMemberInvitation
|
||||||
|
|
||||||
from .import_job import ImportJob, ImportItem
|
from .import_job import ImportJob, ImportItem
|
||||||
|
|
||||||
from .site import SiteSettings, SiteInvite
|
from .site import SiteSettings, Theme, SiteInvite
|
||||||
from .site import PasswordReset, InviteRequest
|
from .site import PasswordReset, InviteRequest
|
||||||
from .announcement import Announcement
|
from .announcement import Announcement
|
||||||
from .antispam import EmailBlocklist, IPBlocklist, AutoMod, automod_task
|
from .antispam import EmailBlocklist, IPBlocklist, AutoMod, automod_task
|
||||||
|
|
|
@ -112,7 +112,7 @@ class Theme(models.Model):
|
||||||
"""Theme files"""
|
"""Theme files"""
|
||||||
|
|
||||||
created_date = models.DateTimeField(auto_now_add=True)
|
created_date = models.DateTimeField(auto_now_add=True)
|
||||||
name = models.CharField(max_length=10, unique=True)
|
name = models.CharField(max_length=50, unique=True)
|
||||||
theme_file = models.FileField(
|
theme_file = models.FileField(
|
||||||
upload_to="css/",
|
upload_to="css/",
|
||||||
validators=[FileExtensionValidator(["scss", "sass"])],
|
validators=[FileExtensionValidator(["scss", "sass"])],
|
||||||
|
@ -120,15 +120,13 @@ class Theme(models.Model):
|
||||||
)
|
)
|
||||||
path = models.CharField(max_length=50, blank=True, null=True)
|
path = models.CharField(max_length=50, blank=True, null=True)
|
||||||
|
|
||||||
@classmethod
|
def __str__(self):
|
||||||
def get_theme(cls, user):
|
return self.name
|
||||||
|
|
||||||
|
@property
|
||||||
|
def theme_path(self):
|
||||||
"""get the theme given the user/site"""
|
"""get the theme given the user/site"""
|
||||||
if user and user.theme:
|
return self.theme_file.path if self.theme_file else self.path
|
||||||
return user.theme.path
|
|
||||||
site = SiteSettings.objects.get()
|
|
||||||
if site.theme:
|
|
||||||
return site.theme.path
|
|
||||||
return "light.scss"
|
|
||||||
|
|
||||||
|
|
||||||
class SiteInvite(models.Model):
|
class SiteInvite(models.Model):
|
||||||
|
|
|
@ -136,6 +136,7 @@ class User(OrderedCollectionPageMixin, AbstractUser):
|
||||||
updated_date = models.DateTimeField(auto_now=True)
|
updated_date = models.DateTimeField(auto_now=True)
|
||||||
last_active_date = models.DateTimeField(default=timezone.now)
|
last_active_date = models.DateTimeField(default=timezone.now)
|
||||||
manually_approves_followers = fields.BooleanField(default=False)
|
manually_approves_followers = fields.BooleanField(default=False)
|
||||||
|
theme = models.ForeignKey("Theme", null=True, blank=True, on_delete=models.SET_NULL)
|
||||||
|
|
||||||
# options to turn features on and off
|
# options to turn features on and off
|
||||||
show_goal = models.BooleanField(default=True)
|
show_goal = models.BooleanField(default=True)
|
||||||
|
@ -172,6 +173,19 @@ class User(OrderedCollectionPageMixin, AbstractUser):
|
||||||
property_fields = [("following_link", "following")]
|
property_fields = [("following_link", "following")]
|
||||||
field_tracker = FieldTracker(fields=["name", "avatar"])
|
field_tracker = FieldTracker(fields=["name", "avatar"])
|
||||||
|
|
||||||
|
@property
|
||||||
|
def get_theme(self):
|
||||||
|
"""get the theme given the user/site"""
|
||||||
|
if self.theme:
|
||||||
|
path = self.theme.theme_path
|
||||||
|
else:
|
||||||
|
site_model = apps.get_model("bookwyrm", "SiteSettings", require_ready=True)
|
||||||
|
site = site_model.objects.get()
|
||||||
|
if site.default_theme:
|
||||||
|
path = site.default_theme.theme_path
|
||||||
|
path = path or "light.scss"
|
||||||
|
return f"css/{path}"
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def confirmation_link(self):
|
def confirmation_link(self):
|
||||||
"""helper for generating confirmation links"""
|
"""helper for generating confirmation links"""
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@import "../vendor/bulma/sass/utilities/derived-variables.sass";
|
@import "vendor/bulma/sass/utilities/derived-variables.sass";
|
||||||
|
|
||||||
/* Colors
|
/* Colors
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
@ -53,3 +53,5 @@ $menu-item-active-background-color: $link-background;
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
$family-primary: $family-sans-serif;
|
$family-primary: $family-sans-serif;
|
||||||
$family-secondary: $family-sans-serif;
|
$family-secondary: $family-sans-serif;
|
||||||
|
|
||||||
|
@import "bookwyrm.scss";
|
||||||
|
|
|
@ -8,7 +8,9 @@
|
||||||
<head>
|
<head>
|
||||||
<title>{% block title %}BookWyrm{% endblock %} - {{ site.name }}</title>
|
<title>{% block title %}BookWyrm{% endblock %} - {{ site.name }}</title>
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||||
<link href="{% sass_src 'css/light.scss' %}" rel="stylesheet" type="text/css" />
|
{% with theme_path=user.get_theme %}
|
||||||
|
<link href="{% sass_src theme_path %}" rel="stylesheet" type="text/css" />
|
||||||
|
{% endwith %}
|
||||||
|
|
||||||
<link rel="search" type="application/opensearchdescription+xml" href="{% url 'opensearch' %}" title="{% blocktrans with site_name=site.name %}{{ site_name }} search{% endblocktrans %}" />
|
<link rel="search" type="application/opensearchdescription+xml" href="{% url 'opensearch' %}" title="{% blocktrans with site_name=site.name %}{{ site_name }} search{% endblocktrans %}" />
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue