Provided the same treatment to the role and group forms
This commit is contained in:
@@ -2,7 +2,42 @@
|
||||
"bundle": {
|
||||
"js/pages/group": {
|
||||
"scripts": [
|
||||
"uf-tweaks/js/pages/group.js"
|
||||
"uf-tweaks/js/pages/group.js",
|
||||
"uf-tweaks/js/widgets/groups.js",
|
||||
"uf-tweaks/js/slug-override.js"
|
||||
],
|
||||
"options": {
|
||||
"sprinkle": {
|
||||
"onCollision": "merge"
|
||||
}
|
||||
}
|
||||
},
|
||||
"js/pages/groups": {
|
||||
"scripts": [
|
||||
"uf-tweaks/js/widgets/groups.js",
|
||||
"uf-tweaks/js/slug-override.js"
|
||||
],
|
||||
"options": {
|
||||
"sprinkle": {
|
||||
"onCollision": "merge"
|
||||
}
|
||||
}
|
||||
},
|
||||
"js/pages/role": {
|
||||
"scripts": [
|
||||
"uf-tweaks/js/widgets/roles.js",
|
||||
"uf-tweaks/js/slug-override.js"
|
||||
],
|
||||
"options": {
|
||||
"sprinkle": {
|
||||
"onCollision": "merge"
|
||||
}
|
||||
}
|
||||
},
|
||||
"js/pages/roles": {
|
||||
"scripts": [
|
||||
"uf-tweaks/js/widgets/roles.js",
|
||||
"uf-tweaks/js/slug-override.js"
|
||||
],
|
||||
"options": {
|
||||
"sprinkle": {
|
||||
|
||||
20
assets/uf-tweaks/js/slug-override.js
Normal file
20
assets/uf-tweaks/js/slug-override.js
Normal file
@@ -0,0 +1,20 @@
|
||||
|
||||
function slugOverride(form, button_id) {
|
||||
// Auto-generate slug
|
||||
form.find('input[name=name]').on('input change', function() {
|
||||
var manualSlug = form.find(button_id).prop('checked');
|
||||
if (!manualSlug) {
|
||||
var slug = getSlug($(this).val());
|
||||
form.find('input[name=slug]').val(slug);
|
||||
}
|
||||
});
|
||||
|
||||
form.find(button_id).on('change', function() {
|
||||
if ($(this).prop('checked')) {
|
||||
form.find('input[name=slug]').prop('readonly', false);
|
||||
} else {
|
||||
form.find('input[name=slug]').prop('readonly', true);
|
||||
form.find('input[name=name]').trigger('change');
|
||||
}
|
||||
});
|
||||
}
|
||||
64
assets/uf-tweaks/js/widgets/groups.js
Normal file
64
assets/uf-tweaks/js/widgets/groups.js
Normal file
@@ -0,0 +1,64 @@
|
||||
/**
|
||||
* Groups widget. Sets up dropdowns, modals, etc for a table of groups.
|
||||
*
|
||||
* This script depends on slug-override.js
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Override the admin "attachGroupForm" method for the sake of an element id override
|
||||
*/
|
||||
function attachGroupForm() {
|
||||
$("body").on('renderSuccess.ufModal', function (data) {
|
||||
var modal = $(this).ufModal('getModal');
|
||||
var form = modal.find('.js-form');
|
||||
|
||||
|
||||
/**
|
||||
* Set up modal widgets
|
||||
*/
|
||||
// Set up any widgets inside the modal
|
||||
form.find(".js-select2").select2({
|
||||
width: '100%'
|
||||
});
|
||||
|
||||
// Auto-generate slug
|
||||
slugOverride(form, '#input-group-slug-override');
|
||||
|
||||
// Fontawesome-iconpicker
|
||||
// Starcraft icons
|
||||
var sc_icons = [{
|
||||
title: "sc sc-terran",
|
||||
searchTerms: ['starcraft', 'terran']
|
||||
},
|
||||
{
|
||||
title: "sc sc-zerg",
|
||||
searchTerms: ['starcraft', 'zerg']
|
||||
}, {
|
||||
title: "sc sc-protoss",
|
||||
searchTerms: ['starcraft', 'protoss']
|
||||
},
|
||||
]
|
||||
|
||||
$('.icp-auto').iconpicker({
|
||||
// this is a hacky way to add in our custom icons to the default FA5 icons.
|
||||
// See https://github.com/farbelous/fontawesome-iconpicker/issues/77
|
||||
icons: typeof sc_icons != 'undefined' ? $.merge(sc_icons, $.iconpicker.defaultOptions.icons) : null,
|
||||
});
|
||||
|
||||
// Set icon when changed
|
||||
form.find('input[name=icon]').on('input change', function() {
|
||||
$(this).prev(".icon-preview").find("i").removeClass().addClass($(this).val());
|
||||
});
|
||||
|
||||
$('.icp-auto').iconpicker();
|
||||
|
||||
// Set up the form for submission
|
||||
form.ufForm({
|
||||
validator: page.validators
|
||||
}).on("submitSuccess.ufForm", function() {
|
||||
// Reload page on success
|
||||
window.location.reload();
|
||||
});
|
||||
});
|
||||
}
|
||||
29
assets/uf-tweaks/js/widgets/roles.js
Normal file
29
assets/uf-tweaks/js/widgets/roles.js
Normal file
@@ -0,0 +1,29 @@
|
||||
/**
|
||||
* Roles widget. Sets up dropdowns, modals, etc for a table of roles.
|
||||
*
|
||||
* This script depends on slug-override.js
|
||||
*
|
||||
*/
|
||||
|
||||
/**
|
||||
* Override the admin "attachRoleForm" method for the sake of an element id override
|
||||
*/
|
||||
function attachRoleForm() {
|
||||
$("body").on('renderSuccess.ufModal', function (data) {
|
||||
var modal = $(this).ufModal('getModal');
|
||||
var form = modal.find('.js-form');
|
||||
|
||||
/**
|
||||
* Set up modal widgets
|
||||
*/
|
||||
slugOverride(form, '#input-role-slug-override');
|
||||
|
||||
// Set up the form for submission
|
||||
form.ufForm({
|
||||
validator: page.validators
|
||||
}).on("submitSuccess.ufForm", function() {
|
||||
// Reload page on success
|
||||
window.location.reload();
|
||||
});
|
||||
});
|
||||
}
|
||||
12
locale/en_US/messages.php
Normal file
12
locale/en_US/messages.php
Normal file
@@ -0,0 +1,12 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
* AVSDev UF Tweaks (https://avsdev.uk)
|
||||
*
|
||||
* @link https://git.avsdev.uk/avsdev/sprinkle-uf-tweaks
|
||||
* @license https://git.avsdev.uk/avsdev/sprinkle-uf-tweaks/blob/master/LICENSE.md (LGPL-3.0 License)
|
||||
*/
|
||||
|
||||
return [
|
||||
'ICON' => 'Icon',
|
||||
];
|
||||
11
templates/forms/group.html.twig
Normal file
11
templates/forms/group.html.twig
Normal file
@@ -0,0 +1,11 @@
|
||||
{% extends "@admin/forms/group.html.twig" %}
|
||||
|
||||
{% block group_form %}
|
||||
{% include "forms/partials/input-group-name.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
|
||||
{% include "forms/partials/input-group-slug.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
|
||||
{% include "forms/partials/input-group-icon.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
|
||||
{% include "forms/partials/input-group-description.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,8 @@
|
||||
{% if 'description' not in form.fields.hidden %}
|
||||
{% if col_width %}<div class="{{col_width}}">{% endif %}
|
||||
<div class="form-group">
|
||||
<label for="input-{{type}}-description" class="control-label">{{field_name | default(translate('DESCRIPTION'))}}</label>
|
||||
<textarea id="input-{{type}}-description" class="form-control" type="text" name="description" {% if 'description' in form.fields.disabled %}disabled{% endif %} rows=6>{{current_value}}</textarea>
|
||||
</div>
|
||||
{% if col_width %}</div>{% endif %}
|
||||
{% endif %}
|
||||
11
templates/forms/partials/abstract/input-icon.html.twig
Normal file
11
templates/forms/partials/abstract/input-icon.html.twig
Normal file
@@ -0,0 +1,11 @@
|
||||
{% if 'icon' not in form.fields.hidden %}
|
||||
{% if col_width %}<div class="{{col_width}}">{% endif %}
|
||||
<div class="form-group iconpicker-container">
|
||||
<label for="input-{{type}}-icon" class="control-label">{{field_name | default(translate("ICON"))}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon icon-preview"><i class="{{current_value}} fa-fw"></i></span>
|
||||
<input type="text" id="input-{{type}}-icon" class="form-control icp icp-auto" name="icon" autocomplete="off" value="{{current_value}}" placeholder="{{ placeholder | default(translate('ICON')) }}" {% if 'icon' in form.fields.disabled %}disabled{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
{% if col_width %}</div>{% endif %}
|
||||
{% endif %}
|
||||
11
templates/forms/partials/abstract/input-name.html.twig
Normal file
11
templates/forms/partials/abstract/input-name.html.twig
Normal file
@@ -0,0 +1,11 @@
|
||||
{% if 'name' not in form.fields.hidden %}
|
||||
{% if col_width %}<div class="{{col_width}}">{% endif %}
|
||||
<div class="form-group">
|
||||
<label for="input-{{type}}-name" class="control-label">{{field_name | default(translate('NAME'))}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="fas fa-edit fa-fw"></i></span>
|
||||
<input type="text" id="input-{{type}}-name" class="form-control" name="name" autocomplete="off" value="{{current_value}}" placeholder="{{ placeholder | default(translate('NAME')) }}" {% if 'name' in form.fields.disabled %}disabled{% endif %}>
|
||||
</div>
|
||||
</div>
|
||||
{% if col_width %}</div>{% endif %}
|
||||
{% endif %}
|
||||
18
templates/forms/partials/abstract/input-slug.html.twig
Normal file
18
templates/forms/partials/abstract/input-slug.html.twig
Normal file
@@ -0,0 +1,18 @@
|
||||
{% if 'description' not in form.fields.hidden %}
|
||||
{% if col_width %}<div class="{{col_width}}">{% endif %}
|
||||
<div class="form-group">
|
||||
<label for="input-{{type}}-slug" class="control-label">{{field_name | default(translate('SLUG'))}}</label>
|
||||
<div class="input-group">
|
||||
<span class="input-group-addon"><i class="fas fa-tag fa-fw"></i></span>
|
||||
<input type="text" id="input-{{type}}-slug" class="form-control" name="slug" autocomplete="off" value="{{current_value}}" placeholder="{{placeholder | default(translate('SLUG'))}}" {% if 'slug' in form.fields.disabled %}disabled{% endif %} readonly>
|
||||
{% if 'slug' not in form.fields.disabled %}
|
||||
<span class="input-group-btn" data-toggle="buttons">
|
||||
<label class="btn btn-primary">
|
||||
<input type="checkbox" id="input-{{type}}-slug-override" autocomplete="off"> {{translate("OVERRIDE")}}
|
||||
</label>
|
||||
</span>
|
||||
{% endif %}
|
||||
</div>
|
||||
</div>
|
||||
{% if col_width %}</div>{% endif %}
|
||||
{% endif %}
|
||||
@@ -0,0 +1,9 @@
|
||||
{% block input_group_description %}
|
||||
{% include "forms/partials/abstract/input-description.html.twig" with
|
||||
{
|
||||
"type" : "group",
|
||||
"current_value" : group.description,
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
11
templates/forms/partials/input-group-icon.html.twig
Normal file
11
templates/forms/partials/input-group-icon.html.twig
Normal file
@@ -0,0 +1,11 @@
|
||||
{% block input_group_icon %}
|
||||
{% include "forms/partials/abstract/input-icon.html.twig" with
|
||||
{
|
||||
"type" : "group",
|
||||
"current_value" : group.icon,
|
||||
"field_name" : translate('GROUP.ICON'),
|
||||
"placeholder" : translate('GROUP.ICON_EXPLAIN'),
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
11
templates/forms/partials/input-group-name.html.twig
Normal file
11
templates/forms/partials/input-group-name.html.twig
Normal file
@@ -0,0 +1,11 @@
|
||||
{% block input_group_name %}
|
||||
{% include "forms/partials/abstract/input-name.html.twig" with
|
||||
{
|
||||
"type" : "group",
|
||||
"current_value" : group.name,
|
||||
"field_name" : translate('GROUP.NAME'),
|
||||
"placeholder" : translate('GROUP.NAME_EXPLAIN'),
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
9
templates/forms/partials/input-group-slug.html.twig
Normal file
9
templates/forms/partials/input-group-slug.html.twig
Normal file
@@ -0,0 +1,9 @@
|
||||
{% block input_group_slug %}
|
||||
{% include "forms/partials/abstract/input-slug.html.twig" with
|
||||
{
|
||||
"type" : "group",
|
||||
"current_value" : group.slug,
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
@@ -0,0 +1,9 @@
|
||||
{% block input_role_description %}
|
||||
{% include "forms/partials/abstract/input-description.html.twig" with
|
||||
{
|
||||
"type" : "role",
|
||||
"current_value" : role.description,
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
10
templates/forms/partials/input-role-name.html.twig
Normal file
10
templates/forms/partials/input-role-name.html.twig
Normal file
@@ -0,0 +1,10 @@
|
||||
{% block input_role_name %}
|
||||
{% include "forms/partials/abstract/input-name.html.twig" with
|
||||
{
|
||||
"type" : "role",
|
||||
"current_value" : role.name,
|
||||
"placeholder" : translate('ROLE.NAME_EXPLAIN'),
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
9
templates/forms/partials/input-role-slug.html.twig
Normal file
9
templates/forms/partials/input-role-slug.html.twig
Normal file
@@ -0,0 +1,9 @@
|
||||
{% block input_role_slug %}
|
||||
{% include "forms/partials/abstract/input-slug.html.twig" with
|
||||
{
|
||||
"type" : "role",
|
||||
"current_value" : role.slug,
|
||||
"col_width" : col_width
|
||||
}
|
||||
%}
|
||||
{% endblock %}
|
||||
10
templates/forms/partials/input-user-name.html.twig
Normal file
10
templates/forms/partials/input-user-name.html.twig
Normal file
@@ -0,0 +1,10 @@
|
||||
{% block input_user_name %}
|
||||
{% if 'name' not in form.fields.hidden %}
|
||||
{% if col_width %}<div class="{{col_width}}">{% endif %}
|
||||
<div class="row">
|
||||
{% include "forms/partials/input-user-first_name.html.twig" with { 'col_width': 'col-sm-6' } %}
|
||||
{% include "forms/partials/input-user-last_name.html.twig" with { 'col_width': 'col-sm-6' } %}
|
||||
</div>
|
||||
{% if col_width %}</div>{% endif %}
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
26
templates/forms/role.html.twig
Normal file
26
templates/forms/role.html.twig
Normal file
@@ -0,0 +1,26 @@
|
||||
<form class="js-form" method="{{form.method | default('POST')}}" action="{{site.uri.public}}/{{form.action}}">
|
||||
{% include "forms/csrf.html.twig" %}
|
||||
<div class="js-form-alerts">
|
||||
</div>
|
||||
<div class="row">
|
||||
{% block role_form %}
|
||||
{% include "forms/partials/input-role-name.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
|
||||
{% include "forms/partials/input-role-slug.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
|
||||
{% include "forms/partials/input-role-description.html.twig" with { 'col_width': 'col-sm-12' } %}
|
||||
{% endblock %}
|
||||
</div><br>
|
||||
<div class="row">
|
||||
<div class="col-xs-8 col-sm-4">
|
||||
<button type="submit" class="btn btn-block btn-lg btn-success">{{form.submit_text}}</button>
|
||||
</div>
|
||||
<div class="col-xs-4 col-sm-4 pull-right">
|
||||
<button type="button" class="btn btn-block btn-lg btn-link" data-dismiss="modal">{{translate("CANCEL")}}</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- Include validation rules -->
|
||||
<script>
|
||||
{% include "pages/partials/page.js.twig" %}
|
||||
</script>
|
||||
Reference in New Issue
Block a user