mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2024-11-26 03:21:05 +00:00
Adds themes
This commit is contained in:
parent
ab1c7c6d0a
commit
e15193e100
7 changed files with 133 additions and 17 deletions
73
bookwyrm/migrations/0142_auto_20220226_2024.py
Normal file
73
bookwyrm/migrations/0142_auto_20220226_2024.py
Normal file
|
@ -0,0 +1,73 @@
|
||||||
|
# Generated by Django 3.2.12 on 2022-02-26 20:24
|
||||||
|
|
||||||
|
import django.core.validators
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
def add_default_themes(apps, schema_editor):
|
||||||
|
"""add light and dark themes"""
|
||||||
|
db_alias = schema_editor.connection.alias
|
||||||
|
theme_model = apps.get_model("bookwyrm", "Theme")
|
||||||
|
theme_model.objects.using(db_alias).bulk_create(
|
||||||
|
[
|
||||||
|
theme_model.objects.using(db_alias)(
|
||||||
|
name="BookWyrm Light",
|
||||||
|
path="bookwyrm-light.scss",
|
||||||
|
),
|
||||||
|
theme_model.objects.using(db_alias)(
|
||||||
|
name="BookWyrm Dark",
|
||||||
|
path="bookwyrm-dark.scss",
|
||||||
|
),
|
||||||
|
]
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
("bookwyrm", "0141_alter_report_status"),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name="Theme",
|
||||||
|
fields=[
|
||||||
|
(
|
||||||
|
"id",
|
||||||
|
models.AutoField(
|
||||||
|
auto_created=True,
|
||||||
|
primary_key=True,
|
||||||
|
serialize=False,
|
||||||
|
verbose_name="ID",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
("created_date", models.DateTimeField(auto_now_add=True)),
|
||||||
|
("name", models.CharField(max_length=10, unique=True)),
|
||||||
|
(
|
||||||
|
"theme_file",
|
||||||
|
models.FileField(
|
||||||
|
upload_to="css/",
|
||||||
|
validators=[
|
||||||
|
django.core.validators.FileExtensionValidator(
|
||||||
|
["scss", "sass"]
|
||||||
|
)
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
migrations.AddField(
|
||||||
|
model_name="sitesettings",
|
||||||
|
name="default_theme",
|
||||||
|
field=models.ForeignKey(
|
||||||
|
blank=True,
|
||||||
|
null=True,
|
||||||
|
on_delete=django.db.models.deletion.SET_NULL,
|
||||||
|
to="bookwyrm.theme",
|
||||||
|
),
|
||||||
|
),
|
||||||
|
migrations.RunPython(
|
||||||
|
add_default_themes, reversed_code=migrations.RunPython.noop
|
||||||
|
),
|
||||||
|
]
|
|
@ -3,6 +3,7 @@ import datetime
|
||||||
from urllib.parse import urljoin
|
from urllib.parse import urljoin
|
||||||
import uuid
|
import uuid
|
||||||
|
|
||||||
|
from django.core.validators import FileExtensionValidator
|
||||||
from django.db import models, IntegrityError
|
from django.db import models, IntegrityError
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
@ -24,6 +25,9 @@ class SiteSettings(models.Model):
|
||||||
)
|
)
|
||||||
instance_description = models.TextField(default="This instance has no description.")
|
instance_description = models.TextField(default="This instance has no description.")
|
||||||
instance_short_description = models.CharField(max_length=255, blank=True, null=True)
|
instance_short_description = models.CharField(max_length=255, blank=True, null=True)
|
||||||
|
default_theme = models.ForeignKey(
|
||||||
|
"Theme", null=True, blank=True, on_delete=models.SET_NULL
|
||||||
|
)
|
||||||
|
|
||||||
# admin setup options
|
# admin setup options
|
||||||
install_mode = models.BooleanField(default=False)
|
install_mode = models.BooleanField(default=False)
|
||||||
|
@ -104,6 +108,29 @@ class SiteSettings(models.Model):
|
||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
|
class Theme(models.Model):
|
||||||
|
"""Theme files"""
|
||||||
|
|
||||||
|
created_date = models.DateTimeField(auto_now_add=True)
|
||||||
|
name = models.CharField(max_length=10, unique=True)
|
||||||
|
theme_file = models.FileField(
|
||||||
|
upload_to="css/",
|
||||||
|
validators=[FileExtensionValidator(["scss", "sass"])],
|
||||||
|
null=True,
|
||||||
|
)
|
||||||
|
path = models.CharField(max_length=50, blank=True, null=True)
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_theme(cls, user):
|
||||||
|
"""get the theme given the user/site"""
|
||||||
|
if user and user.theme:
|
||||||
|
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):
|
||||||
"""gives someone access to create an account on the instance"""
|
"""gives someone access to create an account on the instance"""
|
||||||
|
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
@import "../vendor/bulma/sass/utilities/derived-variables.sass";
|
@import "vendor/bulma/sass/utilities/derived-variables.sass";
|
||||||
|
|
||||||
/* Colors
|
/* Colors
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
|
@ -51,3 +51,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";
|
|
@ -1,7 +1,6 @@
|
||||||
@charset "utf-8";
|
@charset "utf-8";
|
||||||
|
|
||||||
@import "instance-settings";
|
@import "instance-settings";
|
||||||
@import "themes/light.scss";
|
|
||||||
@import "vendor/bulma/bulma.sass";
|
@import "vendor/bulma/bulma.sass";
|
||||||
@import "vendor/icons.css";
|
@import "vendor/icons.css";
|
||||||
@import "bookwyrm/all.scss";
|
@import "bookwyrm/all.scss";
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
<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/bookwyrm.scss' %}" rel="stylesheet" type="text/css" />
|
<link href="{% sass_src 'css/light.scss' %}" rel="stylesheet" type="text/css" />
|
||||||
|
|
||||||
<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 %}" />
|
||||||
|
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
{% block site-subtabs %}
|
{% block site-subtabs %}
|
||||||
<ul class="menu-list">
|
<ul class="menu-list">
|
||||||
<li><a href="#instance-info">{% trans "Instance Info" %}</a></li>
|
<li><a href="#instance-info">{% trans "Instance Info" %}</a></li>
|
||||||
<li><a href="#images">{% trans "Images" %}</a></li>
|
<li><a href="#display">{% trans "Display" %}</a></li>
|
||||||
<li><a href="#footer">{% trans "Footer Content" %}</a></li>
|
<li><a href="#footer">{% trans "Footer Content" %}</a></li>
|
||||||
<li><a href="#registration">{% trans "Registration" %}</a></li>
|
<li><a href="#registration">{% trans "Registration" %}</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
@ -68,20 +68,35 @@
|
||||||
|
|
||||||
<hr aria-hidden="true">
|
<hr aria-hidden="true">
|
||||||
|
|
||||||
<section class="block" id="images">
|
<section class="block" id="display">
|
||||||
<h2 class="title is-4">{% trans "Images" %}</h2>
|
<h2 class="title is-4">{% trans "Display" %}</h2>
|
||||||
<div class="box is-flex">
|
<div class="box">
|
||||||
<div>
|
<h3 class="title is-5">{% trans "Images" %}</h3>
|
||||||
<label class="label" for="id_logo">{% trans "Logo:" %}</label>
|
<div class="block is-flex">
|
||||||
{{ site_form.logo }}
|
<div>
|
||||||
|
<label class="label" for="id_logo">{% trans "Logo:" %}</label>
|
||||||
|
{{ site_form.logo }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label class="label" for="id_logo_small">{% trans "Logo small:" %}</label>
|
||||||
|
{{ site_form.logo_small }}
|
||||||
|
</div>
|
||||||
|
<div>
|
||||||
|
<label class="label" for="id_favicon">{% trans "Favicon:" %}</label>
|
||||||
|
{{ site_form.favicon }}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div>
|
|
||||||
<label class="label" for="id_logo_small">{% trans "Logo small:" %}</label>
|
<h3 class="title is-5">{% trans "Themes" %}</h3>
|
||||||
{{ site_form.logo_small }}
|
<div class="block">
|
||||||
</div>
|
<label class="label" for="id_default_theme">
|
||||||
<div>
|
{% trans "Default theme:" %}
|
||||||
<label class="label" for="id_favicon">{% trans "Favicon:" %}</label>
|
</label>
|
||||||
{{ site_form.favicon }}
|
<div class="select">
|
||||||
|
{{ site_form.default_theme }}
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<button type="button" class="button">{% trans "Upload theme" %}</button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
Loading…
Reference in a new issue