mirror of
https://github.com/inventree/InvenTree.git
synced 2025-05-01 13:06:45 +00:00
Renamed Theme to ColorTheme, ColorTheme is now a per-user selection
This commit is contained in:
parent
2e5ec5d249
commit
10dd8fad80
@ -11,7 +11,8 @@ from crispy_forms.helper import FormHelper
|
|||||||
from crispy_forms.layout import Layout, Field
|
from crispy_forms.layout import Layout, Field
|
||||||
from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton
|
from crispy_forms.bootstrap import PrependedText, AppendedText, PrependedAppendedText, StrictButton
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from common.models import Theme
|
from common.models import ColorTheme
|
||||||
|
|
||||||
|
|
||||||
class HelperForm(forms.ModelForm):
|
class HelperForm(forms.ModelForm):
|
||||||
""" Provides simple integration of crispy_forms extension. """
|
""" Provides simple integration of crispy_forms extension. """
|
||||||
@ -163,24 +164,24 @@ class SetPasswordForm(HelperForm):
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
class ThemeSelectForm(forms.ModelForm):
|
class ColorThemeSelectForm(forms.ModelForm):
|
||||||
""" Form for setting color theme
|
""" Form for setting color theme
|
||||||
"""
|
"""
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Theme
|
model = ColorTheme
|
||||||
fields = [
|
fields = [
|
||||||
'theme'
|
'name'
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
super(ThemeSelectForm, self).__init__(*args, **kwargs)
|
super(ColorThemeSelectForm, self).__init__(*args, **kwargs)
|
||||||
self.helper = FormHelper()
|
self.helper = FormHelper()
|
||||||
# Form rendering
|
# Form rendering
|
||||||
self.helper.form_show_labels = False
|
self.helper.form_show_labels = False
|
||||||
self.helper.form_class = 'form-inline'
|
self.helper.form_class = 'form-inline'
|
||||||
# self.helper.field_template = 'bootstrap4/layout/inline_field.html'
|
# self.helper.field_template = 'bootstrap4/layout/inline_field.html'
|
||||||
self.helper.layout = Layout(
|
self.helper.layout = Layout(
|
||||||
Field('theme'),
|
Field('name'),
|
||||||
StrictButton(_('Apply Theme'), css_class='btn btn-primary', type='submit')
|
StrictButton(_('Apply Theme'), css_class='btn btn-primary', type='submit')
|
||||||
)
|
)
|
||||||
|
@ -36,7 +36,7 @@ from django.views.generic.base import RedirectView
|
|||||||
from rest_framework.documentation import include_docs_urls
|
from rest_framework.documentation import include_docs_urls
|
||||||
|
|
||||||
from .views import IndexView, SearchView, DatabaseStatsView
|
from .views import IndexView, SearchView, DatabaseStatsView
|
||||||
from .views import SettingsView, EditUserView, SetPasswordView, ThemeSelectView
|
from .views import SettingsView, EditUserView, SetPasswordView, ColorThemeSelectView
|
||||||
from .views import DynamicJsView
|
from .views import DynamicJsView
|
||||||
|
|
||||||
from .api import InfoView
|
from .api import InfoView
|
||||||
@ -71,7 +71,7 @@ settings_urls = [
|
|||||||
url(r'^user/?', SettingsView.as_view(template_name='InvenTree/settings/user.html'), name='settings-user'),
|
url(r'^user/?', SettingsView.as_view(template_name='InvenTree/settings/user.html'), name='settings-user'),
|
||||||
url(r'^currency/?', SettingsView.as_view(template_name='InvenTree/settings/currency.html'), name='settings-currency'),
|
url(r'^currency/?', SettingsView.as_view(template_name='InvenTree/settings/currency.html'), name='settings-currency'),
|
||||||
url(r'^part/?', SettingsView.as_view(template_name='InvenTree/settings/part.html'), name='settings-part'),
|
url(r'^part/?', SettingsView.as_view(template_name='InvenTree/settings/part.html'), name='settings-part'),
|
||||||
url(r'^theme/?', ThemeSelectView.as_view(), name='settings-theme'),
|
url(r'^theme/?', ColorThemeSelectView.as_view(), name='settings-theme'),
|
||||||
url(r'^other/?', SettingsView.as_view(template_name='InvenTree/settings/other.html'), name='settings-other'),
|
url(r'^other/?', SettingsView.as_view(template_name='InvenTree/settings/other.html'), name='settings-other'),
|
||||||
|
|
||||||
# Catch any other urls
|
# Catch any other urls
|
||||||
|
@ -19,9 +19,9 @@ from django.views.generic.base import TemplateView
|
|||||||
|
|
||||||
from part.models import Part, PartCategory
|
from part.models import Part, PartCategory
|
||||||
from stock.models import StockLocation, StockItem
|
from stock.models import StockLocation, StockItem
|
||||||
from common.models import InvenTreeSetting, Theme
|
from common.models import InvenTreeSetting, ColorTheme
|
||||||
|
|
||||||
from .forms import DeleteForm, EditUserForm, SetPasswordForm, ThemeSelectForm
|
from .forms import DeleteForm, EditUserForm, SetPasswordForm, ColorThemeSelectForm
|
||||||
from .helpers import str2bool
|
from .helpers import str2bool
|
||||||
|
|
||||||
from rest_framework import views
|
from rest_framework import views
|
||||||
@ -557,33 +557,45 @@ class SettingsView(TemplateView):
|
|||||||
return ctx
|
return ctx
|
||||||
|
|
||||||
|
|
||||||
class ThemeSelectView(FormView):
|
class ColorThemeSelectView(FormView):
|
||||||
""" View for selecting a color theme """
|
""" View for selecting a color theme """
|
||||||
|
|
||||||
form_class = ThemeSelectForm
|
form_class = ColorThemeSelectForm
|
||||||
success_url = reverse_lazy('settings-theme')
|
success_url = reverse_lazy('settings-theme')
|
||||||
template_name = "InvenTree/settings/theme.html"
|
template_name = "InvenTree/settings/theme.html"
|
||||||
|
|
||||||
|
def get_user_theme(self):
|
||||||
|
""" Get user color theme """
|
||||||
|
try:
|
||||||
|
user_theme = ColorTheme.objects.filter(user=self.request.user).get()
|
||||||
|
except ColorTheme.DoesNotExist:
|
||||||
|
user_theme = None
|
||||||
|
|
||||||
|
return user_theme
|
||||||
|
|
||||||
def get_initial(self):
|
def get_initial(self):
|
||||||
""" Select user theme """
|
""" Select user theme """
|
||||||
initial = super(ThemeSelectView, self).get_initial()
|
initial = super(ColorThemeSelectView, self).get_initial()
|
||||||
initial['theme'] = Theme.objects.all().get().theme
|
user_theme = self.get_user_theme()
|
||||||
|
if user_theme:
|
||||||
|
initial['name'] = user_theme.name
|
||||||
return initial
|
return initial
|
||||||
|
|
||||||
def post(self, request, *args, **kwargs):
|
def post(self, request, *args, **kwargs):
|
||||||
""" Save user color theme """
|
""" Save user color theme """
|
||||||
form = self.get_form()
|
form = self.get_form()
|
||||||
if form.is_valid():
|
if form.is_valid():
|
||||||
theme_select = form.cleaned_data['theme']
|
theme_select = form.cleaned_data['name']
|
||||||
|
# Get current user theme
|
||||||
|
user_theme = self.get_user_theme()
|
||||||
|
|
||||||
try:
|
# Create theme entry if user did not select one yet
|
||||||
user_theme = Theme.objects.all().get()
|
if not user_theme:
|
||||||
except Theme.DoesNotExist:
|
user_theme = ColorTheme()
|
||||||
print('No theme selected yet')
|
|
||||||
user_theme = Theme()
|
|
||||||
|
|
||||||
# Set color theme
|
# Set color theme to form selection
|
||||||
user_theme.theme = theme_select
|
user_theme.user = str(request.user)
|
||||||
|
user_theme.name = theme_select
|
||||||
user_theme.save()
|
user_theme.save()
|
||||||
|
|
||||||
return self.form_valid(form)
|
return self.form_valid(form)
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Generated by Django 3.0.7 on 2020-09-07 20:12
|
# Generated by Django 3.0.7 on 2020-09-07 21:13
|
||||||
|
|
||||||
from django.db import migrations, models
|
from django.db import migrations, models
|
||||||
|
|
||||||
@ -11,10 +11,11 @@ class Migration(migrations.Migration):
|
|||||||
|
|
||||||
operations = [
|
operations = [
|
||||||
migrations.CreateModel(
|
migrations.CreateModel(
|
||||||
name='Theme',
|
name='ColorTheme',
|
||||||
fields=[
|
fields=[
|
||||||
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
('theme', models.CharField(blank=True, choices=[('', 'Default'), ('-darker', 'Darker')], default='', max_length=20)),
|
('name', models.CharField(blank=True, choices=[('', 'Default'), ('-darker', 'Darker')], default='', max_length=20)),
|
||||||
|
('user', models.CharField(max_length=150)),
|
||||||
],
|
],
|
||||||
),
|
),
|
||||||
]
|
]
|
@ -156,15 +156,16 @@ class Currency(models.Model):
|
|||||||
super().save(*args, **kwargs)
|
super().save(*args, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class Theme(models.Model):
|
class ColorTheme(models.Model):
|
||||||
""" Color Theme setting """
|
""" Color Theme setting """
|
||||||
|
|
||||||
class ThemeChoices(models.TextChoices):
|
class ColorThemeChoices(models.TextChoices):
|
||||||
DEFAULT = '', _('Default')
|
DEFAULT = '', _('Default')
|
||||||
DARKER = '-darker', _('Darker')
|
DARKER = '-darker', _('Darker')
|
||||||
|
|
||||||
theme = models.CharField(max_length=20,
|
name = models.CharField(max_length=20,
|
||||||
choices=ThemeChoices.choices,
|
choices=ColorThemeChoices.choices,
|
||||||
default=ThemeChoices.DEFAULT,
|
default=ColorThemeChoices.DEFAULT,
|
||||||
blank=True)
|
blank=True)
|
||||||
|
|
||||||
|
user = models.CharField(max_length=150)
|
@ -6,7 +6,7 @@ from django import template
|
|||||||
from InvenTree import version, settings
|
from InvenTree import version, settings
|
||||||
from InvenTree.helpers import decimal2string
|
from InvenTree.helpers import decimal2string
|
||||||
|
|
||||||
from common.models import InvenTreeSetting, Theme
|
from common.models import InvenTreeSetting, ColorTheme
|
||||||
|
|
||||||
register = template.Library()
|
register = template.Library()
|
||||||
|
|
||||||
@ -91,6 +91,9 @@ def inventree_setting(key, *args, **kwargs):
|
|||||||
|
|
||||||
|
|
||||||
@register.simple_tag()
|
@register.simple_tag()
|
||||||
def get_theme_css():
|
def get_theme_css(username):
|
||||||
user_theme = Theme.objects.all().get().theme
|
try:
|
||||||
|
user_theme = ColorTheme.objects.filter(user=username).get().name
|
||||||
|
except ColorTheme.DoesNotExist:
|
||||||
|
user_theme = ''
|
||||||
return f'{settings.STATIC_URL}css/inventree' + user_theme + '.css'
|
return f'{settings.STATIC_URL}css/inventree' + user_theme + '.css'
|
||||||
|
@ -21,10 +21,9 @@
|
|||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
{% load crispy_forms_tags %}
|
{% load crispy_forms_tags %}
|
||||||
{% crispy form %}
|
{% crispy form %}
|
||||||
{# <button type='submit' class='btn btn-primary'>{% trans "Apply Theme" %}</button> #}
|
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -39,7 +39,7 @@
|
|||||||
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
|
<link rel="stylesheet" href="{% static 'css/select2.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'css/select2-bootstrap.css' %}">
|
<link rel="stylesheet" href="{% static 'css/select2-bootstrap.css' %}">
|
||||||
<link rel="stylesheet" href="{% static 'css/bootstrap-toggle.css' %}">
|
<link rel="stylesheet" href="{% static 'css/bootstrap-toggle.css' %}">
|
||||||
<link rel="stylesheet" href="{% get_theme_css %}">
|
<link rel="stylesheet" href="{% get_theme_css user.get_username %}">
|
||||||
|
|
||||||
{% block css %}
|
{% block css %}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user