plugin_settings.mako
139 lines
| 5.2 KiB
| application/x-mako
|
MakoHtmlLexer
r1282 | <%inherit file="/base/base.mako"/> | |||
<%def name="title()"> | ||||
r3584 | ${_('Authentication Settings')} | |||
%if c.rhodecode_name: | ||||
r1282 | · ${h.branding(c.rhodecode_name)}} | |||
r3584 | %endif | |||
r1282 | </%def> | |||
<%def name="breadcrumbs_links()"> | ||||
r1758 | ${h.link_to(_('Admin'),h.route_path('admin_home'))} | |||
r1282 | » | |||
${h.link_to(_('Authentication Plugins'),request.resource_path(resource.__parent__, route_name='auth_home'))} | ||||
» | ||||
${resource.display_name} | ||||
</%def> | ||||
<%def name="menu_bar_nav()"> | ||||
r3584 | ${self.menu_items(active='admin')} | |||
</%def> | ||||
<%def name="menu_bar_subnav()"> | ||||
${self.admin_menu(active='authentication')} | ||||
r1282 | </%def> | |||
<%def name="main()"> | ||||
r3584 | ||||
r1282 | <div class="box"> | |||
r3584 | ||||
r1282 | <div class='sidebar-col-wrapper'> | |||
<div class="sidebar"> | ||||
<ul class="nav nav-pills nav-stacked"> | ||||
% for item in resource.get_root().get_nav_list(): | ||||
r3584 | <li ${('class=active' if item == resource else '')}> | |||
r1282 | <a href="${request.resource_path(item, route_name='auth_home')}">${item.display_name}</a> | |||
</li> | ||||
% endfor | ||||
</ul> | ||||
</div> | ||||
<div class="main-content-full-width"> | ||||
<div class="panel panel-default"> | ||||
<div class="panel-heading"> | ||||
<h3 class="panel-title">${_('Plugin')}: ${resource.display_name}</h3> | ||||
</div> | ||||
<div class="panel-body"> | ||||
<div class="plugin_form"> | ||||
<div class="fields"> | ||||
r1918 | ${h.secure_form(request.resource_path(resource, route_name='auth_home'), request=request)} | |||
r1282 | <div class="form"> | |||
%for node in plugin.get_settings_schema(): | ||||
r3245 | <% | |||
label_to_type = {'label-checkbox': 'bool', 'label-textarea': 'textarea'} | ||||
%> | ||||
r1282 | <div class="field"> | |||
r3245 | <div class="label ${label_to_type.get(node.widget)}"><label for="${node.name}">${node.title}</label></div> | |||
r1282 | <div class="input"> | |||
%if node.widget in ["string", "int", "unicode"]: | ||||
r3245 | ${h.text(node.name, defaults.get(node.name), class_="large")} | |||
r1282 | %elif node.widget == "password": | |||
r3245 | ${h.password(node.name, defaults.get(node.name), class_="large")} | |||
r1282 | %elif node.widget == "bool": | |||
r5397 | %if node.name == "global_2fa" and c.rhodecode_edition_id != "EE": | |||
<input type="checkbox" disabled/> | ||||
<%node.description = _('This feature is available in RhodeCode EE edition only. Contact {sales_email} to obtain a trial license.').format(sales_email='<a href="mailto:sales@rhodecode.com">sales@rhodecode.com</a>')%> | ||||
%else: | ||||
<div class="checkbox" >${h.checkbox(node.name, True, checked=defaults.get(node.name))}</div> | ||||
%endif | ||||
r1282 | %elif node.widget == "select": | |||
r3252 | ${h.select(node.name, defaults.get(node.name), node.validator.choices, class_="select2AuthSetting")} | |||
r3387 | %elif node.widget == "select_with_labels": | |||
${h.select(node.name, defaults.get(node.name), node.choices, class_="select2AuthSetting")} | ||||
r3245 | %elif node.widget == "textarea": | |||
<div class="textarea" style="margin-left: 0px">${h.textarea(node.name, defaults.get(node.name), rows=10)}</div> | ||||
r1282 | %elif node.widget == "readonly": | |||
${node.default} | ||||
%else: | ||||
This field is of type ${node.typ}, which cannot be displayed. Must be one of [string|int|bool|select]. | ||||
%endif | ||||
r3245 | ||||
r1282 | %if node.name in errors: | |||
<span class="error-message">${errors.get(node.name)}</span> | ||||
<br /> | ||||
%endif | ||||
r5397 | <p class="help-block pre-formatting">${node.description | n}</p> | |||
r1282 | </div> | |||
</div> | ||||
%endfor | ||||
## Allow derived templates to add something below the form | ||||
## input fields | ||||
%if hasattr(next, 'below_form_fields'): | ||||
${next.below_form_fields()} | ||||
%endif | ||||
<div class="buttons"> | ||||
${h.submit('save',_('Save'),class_="btn")} | ||||
</div> | ||||
</div> | ||||
${h.end_form()} | ||||
</div> | ||||
</div> | ||||
r3290 | ||||
% if request.GET.get('schema'): | ||||
## this is for development and creation of example configurations for documentation | ||||
<pre> | ||||
% for node in plugin.get_settings_schema(): | ||||
*option*: `${node.name}` => `${defaults.get(node.name)}`${'\n # '.join(['']+node.description.splitlines())} | ||||
% endfor | ||||
</pre> | ||||
% endif | ||||
r1282 | </div> | |||
</div> | ||||
</div> | ||||
</div> | ||||
</div> | ||||
r3290 | ||||
r1282 | <script> | |||
$(document).ready(function() { | ||||
var select2Options = { | ||||
containerCssClass: 'drop-menu', | ||||
dropdownCssClass: 'drop-menu-dropdown', | ||||
dropdownAutoWidth: true, | ||||
minimumResultsForSearch: -1 | ||||
r3252 | }; | |||
$('.select2AuthSetting').select2(select2Options); | ||||
r1282 | }); | |||
</script> | ||||
</%def> | ||||