diff --git a/tailbone/config.py b/tailbone/config.py index 51293a26..00a8a6f7 100644 --- a/tailbone/config.py +++ b/tailbone/config.py @@ -47,3 +47,8 @@ class ConfigExtension(BaseExtension): def configure(self, config): Session.configure(rattail_config=config) configure_session(config, Session) + + +def expose_vuejs_experiments(config): + return config.getbool('tailbone', 'expose_vuejs_experiments', + default=False) diff --git a/tailbone/templates/users/index.mako b/tailbone/templates/users/index.mako new file mode 100644 index 00000000..4c5351b7 --- /dev/null +++ b/tailbone/templates/users/index.mako @@ -0,0 +1,11 @@ +## -*- coding: utf-8; -*- +<%inherit file="/principal/index.mako" /> + +<%def name="context_menu_items()"> + ${parent.context_menu_items()} + % if expose_vuejs_experiments: +
  • ${h.link_to("Vue.js Index", url('{}.vue_index'.format(route_prefix)))}
  • + % endif + + +${parent.body()} diff --git a/tailbone/templates/users/vue_index.mako b/tailbone/templates/users/vue_index.mako new file mode 100644 index 00000000..8558a7ce --- /dev/null +++ b/tailbone/templates/users/vue_index.mako @@ -0,0 +1,95 @@ +## -*- coding: utf-8; -*- +<%inherit file="/users/index.mako" /> + +<%def name="extra_javascript()"> + ${parent.extra_javascript()} + + + ${h.javascript_link('https://cdn.jsdelivr.net/npm/vue')} + + + ${h.javascript_link('https://unpkg.com/vuex')} + + + ${h.javascript_link('https://cdn.jsdelivr.net/npm/vue-tables-2@1.4.70/dist/vue-tables-2.min.js')} + + + ${h.stylesheet_link('https://cdnjs.cloudflare.com/ajax/libs/bulma/0.7.2/css/bulma.min.css')} +## + + + +## TODO: just, ugh. +


    + +
    + ## TODO: need to make endpoint a bit more configurable somehow + +
    + + diff --git a/tailbone/views/users.py b/tailbone/views/users.py index bbd21b36..8eebb32e 100644 --- a/tailbone/views/users.py +++ b/tailbone/views/users.py @@ -42,6 +42,7 @@ from tailbone import forms from tailbone.db import Session from tailbone.views import MasterView from tailbone.views.principal import PrincipalMasterView, PermissionsRenderer +from tailbone.config import expose_vuejs_experiments class UsersView(PrincipalMasterView): @@ -124,6 +125,16 @@ class UsersView(PrincipalMasterView): g.set_link('last_name') g.set_link('display_name') + def template_kwargs_index(self, **kwargs): + kwargs['expose_vuejs_experiments'] = expose_vuejs_experiments(self.rattail_config) + return kwargs + + def vue_index(self): + if not expose_vuejs_experiments(self.rattail_config): + raise self.notfound() + + return self.render_to_response('vue_index', {}) + def unique_username(self, node, value): query = self.Session.query(model.User)\ .filter(model.User.username == value) @@ -308,6 +319,21 @@ class UsersView(PrincipalMasterView): assert not removing._roles self.Session.delete(removing) + @classmethod + def defaults(cls, config): + rattail_config = config.registry.settings.get('rattail_config') + route_prefix = cls.get_route_prefix() + url_prefix = cls.get_url_prefix() + permission_prefix = cls.get_permission_prefix() + + # vue-index + config.add_route('{}.vue_index'.format(route_prefix), '{}/vue-index/'.format(url_prefix)) + config.add_view(cls, attr='vue_index', route_name='{}.vue_index'.format(route_prefix), + permission='{}.list'.format(permission_prefix)) + + cls._principal_defaults(config) + cls._defaults(config) + class UserEventsView(MasterView): """