Add basic Buefy support for App Settings page
also various buttons have been tweaked on some other "master view" pages
This commit is contained in:
parent
e1ff4578e9
commit
fcfc8b56bb
13 changed files with 245 additions and 52 deletions
|
@ -73,6 +73,25 @@ class View(object):
|
|||
def notfound(self):
|
||||
return httpexceptions.HTTPNotFound()
|
||||
|
||||
def get_use_buefy(self):
|
||||
"""
|
||||
Returns a flag indicating whether or not the current theme supports
|
||||
(and therefore should use) the Buefy JS library.
|
||||
"""
|
||||
# first check theme-specific setting, if one has been defined
|
||||
theme = self.request.registry.settings['tailbone.theme']
|
||||
buefy = self.rattail_config.getbool('tailbone', 'themes.{}.use_buefy'.format(theme))
|
||||
if buefy is not None:
|
||||
return buefy
|
||||
|
||||
# TODO: should not hard-code this surely, but works for now...
|
||||
if theme == 'falafel':
|
||||
return True
|
||||
|
||||
# TODO: probably should not use this fallback? it was the first setting
|
||||
# i tested with, but is poorly named to say the least
|
||||
return self.rattail_config.getbool('tailbone', 'grids.use_buefy', default=False)
|
||||
|
||||
def late_login_user(self):
|
||||
"""
|
||||
Returns the :class:`rattail:rattail.db.model.User` instance
|
||||
|
|
|
@ -33,7 +33,6 @@ import sqlalchemy as sa
|
|||
from sqlalchemy import orm
|
||||
|
||||
import colander
|
||||
from deform import widget as dfwidget
|
||||
from pyramid.httpexceptions import HTTPNotFound
|
||||
from webhelpers2.html import HTML, tags
|
||||
|
||||
|
@ -220,7 +219,7 @@ class CustomersView(MasterView):
|
|||
f.set_enum('email_preference', self.enum.EMAIL_PREFERENCE)
|
||||
preferences = list(self.enum.EMAIL_PREFERENCE.items())
|
||||
preferences.insert(0, ('', "(no preference)"))
|
||||
f.set_widget('email_preference', dfwidget.SelectWidget(values=preferences))
|
||||
f.widgets['email_preference'].values = preferences
|
||||
|
||||
# person
|
||||
if self.creating:
|
||||
|
|
|
@ -251,25 +251,6 @@ class MasterView(View):
|
|||
labels.update(cls.row_labels)
|
||||
return labels
|
||||
|
||||
def get_use_buefy(self):
|
||||
"""
|
||||
Returns a flag indicating whether or not the current theme supports
|
||||
(and therefore should use) the Buefy JS library.
|
||||
"""
|
||||
# first check theme-specific setting, if one has been defined
|
||||
theme = self.request.registry.settings['tailbone.theme']
|
||||
buefy = self.rattail_config.getbool('tailbone', 'themes.{}.use_buefy'.format(theme))
|
||||
if buefy is not None:
|
||||
return buefy
|
||||
|
||||
# TODO: should not hard-code this surely, but works for now...
|
||||
if theme == 'falafel':
|
||||
return True
|
||||
|
||||
# TODO: probably should not use this fallback? it was the first setting
|
||||
# i tested with, but is poorly named to say the least
|
||||
return self.rattail_config.getbool('tailbone', 'grids.use_buefy', default=False)
|
||||
|
||||
##############################
|
||||
# Available Views
|
||||
##############################
|
||||
|
@ -368,6 +349,8 @@ class MasterView(View):
|
|||
|
||||
defaults = {
|
||||
'model_class': getattr(self, 'model_class', None),
|
||||
'model_title': self.get_model_title(),
|
||||
'model_title_plural': self.get_model_title_plural(),
|
||||
'width': 'full',
|
||||
'filterable': self.filterable,
|
||||
'use_byte_string_filters': self.use_byte_string_filters,
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
################################################################################
|
||||
#
|
||||
# Rattail -- Retail Software Framework
|
||||
# Copyright © 2010-2018 Lance Edgar
|
||||
# Copyright © 2010-2019 Lance Edgar
|
||||
#
|
||||
# This file is part of Rattail.
|
||||
#
|
||||
|
@ -33,6 +33,7 @@ import six
|
|||
from rattail.db import model, api
|
||||
from rattail.settings import Setting
|
||||
from rattail.util import import_module_path
|
||||
from rattail.config import parse_bool
|
||||
|
||||
import colander
|
||||
from webhelpers2.html import tags
|
||||
|
@ -109,7 +110,7 @@ class AppSettingsView(View):
|
|||
if form.validate(newstyle=True):
|
||||
self.save_form(form)
|
||||
group = self.request.POST.get('settings-group')
|
||||
if group:
|
||||
if group is not None:
|
||||
self.request.session['appsettings.current_group'] = group
|
||||
self.request.session.flash("App Settings have been saved.")
|
||||
return self.redirect(self.request.current_route_url())
|
||||
|
@ -120,17 +121,56 @@ class AppSettingsView(View):
|
|||
if not current_group:
|
||||
current_group = self.request.session.get('appsettings.current_group')
|
||||
|
||||
group_options = [tags.Option(group, group) for group in groups]
|
||||
group_options.insert(0, tags.Option("(All)", "(All)"))
|
||||
return {
|
||||
use_buefy = self.get_use_buefy()
|
||||
context = {
|
||||
'index_title': "App Settings",
|
||||
'form': form,
|
||||
'dform': form.make_deform_form(),
|
||||
'groups': groups,
|
||||
'group_options': group_options,
|
||||
'current_group': current_group,
|
||||
'settings': settings,
|
||||
'use_buefy': use_buefy,
|
||||
}
|
||||
if use_buefy:
|
||||
context['buefy_data'] = self.get_buefy_data(form, groups, settings)
|
||||
# TODO: this seems hacky, and probably only needed if theme changes?
|
||||
if current_group == '(All)':
|
||||
current_group = ''
|
||||
else:
|
||||
group_options = [tags.Option(group, group) for group in groups]
|
||||
group_options.insert(0, tags.Option("(All)", "(All)"))
|
||||
context['group_options'] = group_options
|
||||
context['current_group'] = current_group
|
||||
return context
|
||||
|
||||
def get_buefy_data(self, form, groups, settings):
|
||||
dform = form.make_deform_form()
|
||||
grouped = dict([(label, [])
|
||||
for label in groups])
|
||||
|
||||
for setting in settings:
|
||||
field = dform[setting.node_name]
|
||||
s = {
|
||||
'field_name': field.name,
|
||||
'label': form.get_label(field.name),
|
||||
'data_type': setting.data_type.__name__,
|
||||
'choices': setting.choices,
|
||||
'helptext': form.render_helptext(field.name) if form.has_helptext(field.name) else None,
|
||||
'error': field.error,
|
||||
}
|
||||
value = self.get_setting_value(setting)
|
||||
if setting.data_type is bool:
|
||||
value = parse_bool(value)
|
||||
s['value'] = value
|
||||
if field.error:
|
||||
s['error_messages'] = field.error_messages()
|
||||
grouped[setting.group].append(s)
|
||||
|
||||
data = []
|
||||
for label in groups:
|
||||
group = {'label': label, 'settings': grouped[label]}
|
||||
data.append(group)
|
||||
|
||||
return data
|
||||
|
||||
def make_form(self, known_settings):
|
||||
schema = colander.MappingSchema()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue