diff --git a/tailbone/templates/themes/butterball/base.mako b/tailbone/templates/themes/butterball/base.mako
index 3f0253ce..339d23bd 100644
--- a/tailbone/templates/themes/butterball/base.mako
+++ b/tailbone/templates/themes/butterball/base.mako
@@ -924,9 +924,23 @@
% endif
% if request.is_root:
- ${h.link_to("Stop being root", url('stop_root'), class_='navbar-item has-background-danger has-text-white')}
+ ${h.form(url('stop_root'), ref='stopBeingRootForm')}
+ ${h.csrf_token(request)}
+
+
+ Stop being root
+
+ ${h.end_form()}
% elif request.is_admin:
- ${h.link_to("Become root", url('become_root'), class_='navbar-item has-background-danger has-text-white')}
+ ${h.form(url('become_root'), ref='startBeingRootForm')}
+ ${h.csrf_token(request)}
+
+
+ Become root
+
+ ${h.end_form()}
% endif
% if messaging_enabled:
${h.link_to("Messages{}".format(" ({})".format(inbox_count) if inbox_count else ''), url('messages.inbox'), class_='navbar-item')}
@@ -1109,6 +1123,18 @@
const key = 'menu_' + hash + '_shown'
this[key] = !this[key]
},
+
+ % if request.is_admin:
+
+ startBeingRoot() {
+ this.$refs.startBeingRootForm.submit()
+ },
+
+ stopBeingRoot() {
+ this.$refs.stopBeingRootForm.submit()
+ },
+
+ % endif
},
}
diff --git a/tailbone/views/auth.py b/tailbone/views/auth.py
index 7ecdc6cd..730d7b6a 100644
--- a/tailbone/views/auth.py
+++ b/tailbone/views/auth.py
@@ -238,6 +238,9 @@ class AuthenticationView(View):
config.add_view(cls, attr='change_password', route_name='change_password', renderer='/change_password.mako')
# become/stop root
+ # TODO: these should require POST but i won't bother until
+ # after butterball becomes default theme..or probably should
+ # just refactor the falafel theme accordingly..?
config.add_route('become_root', '/root/yes')
config.add_view(cls, attr='become_root', route_name='become_root')
config.add_route('stop_root', '/root/no')