Commit 145f72a8 authored by Tino Goratsch's avatar Tino Goratsch

use a custom styling for the native HTML5 form validation

parent 0f8d67c8
......@@ -29,7 +29,7 @@
<label for="module" class="col-sm-2 control-label required">{lang t="categories|module"}</label>
<div class="col-sm-10">
<select class="form-control" name="module" id="module">
<select class="form-control" name="module" id="module" required>
{foreach $mod_list as $row}
<option value="{$row.id}"{$row.selected}>{$row.name}</option>
{/foreach}
......
......@@ -9,7 +9,7 @@
<label for="width" class="col-sm-2 control-label required">{lang t="categories|image_width"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="width" id="width" value="{$form.width}">
<input class="form-control" type="number" name="width" id="width" value="{$form.width}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -18,7 +18,7 @@
<label for="height" class="col-sm-2 control-label required">{lang t="categories|image_height"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="height" id="height" value="{$form.height}">
<input class="form-control" type="number" name="height" id="height" value="{$form.height}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -27,7 +27,7 @@
<label for="filesize" class="col-sm-2 control-label required">{lang t="categories|image_filesize"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="filesize" id="filesize" value="{$form.filesize}">
<input class="form-control" type="number" name="filesize" id="filesize" value="{$form.filesize}" required>
<p class="help-block">{lang t="system|statements_in_byte"}</p>
</div>
......
......@@ -9,7 +9,7 @@
<label for="date-format" class="col-sm-2 control-label required">{lang t="system|date_format"}</label>
<div class="col-sm-10">
<select class="form-control" name="dateformat" id="date-format">
<select class="form-control" name="dateformat" id="date-format" required>
{foreach $dateformat as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......
......@@ -9,20 +9,20 @@
<label for="code" class="col-sm-2 control-label required">{lang t="emoticons|code"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="code" id="code" value="{$form.code}" maxlength="10"></div>
<input class="form-control" type="text" name="code" id="code" value="{$form.code}" maxlength="10" required></div>
</div>
<div class="form-group">
<label for="description" class="col-sm-2 control-label required">{lang t="system|description"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="description" id="description" value="{$form.description}" maxlength="15">
<input class="form-control" type="text" name="description" id="description" value="{$form.description}" maxlength="15" required>
</div>
</div>
{block EMOTICONS_PICTURE_UPLOAD}
<div class="form-group">
<label for="picture" class="col-sm-2 control-label required">{lang t="emoticons|picture"}</label>
<div class="col-sm-10"><input type="file" name="picture" id="picture"></div>
<div class="col-sm-10"><input type="file" name="picture" id="picture" required></div>
</div>
{/block}
<div class="form-group">
......
......@@ -9,7 +9,7 @@
<label for="width" class="col-sm-2 control-label required">{lang t="emoticons|image_width"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="width" id="width" value="{$form.width}">
<input class="form-control" type="number" name="width" id="width" value="{$form.width}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -18,7 +18,7 @@
<label for="height" class="col-sm-2 control-label required">{lang t="emoticons|image_height"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="height" id="height" value="{$form.height}">
<input class="form-control" type="number" name="height" id="height" value="{$form.height}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -27,7 +27,7 @@
<label for="filesize" class="col-sm-2 control-label required">{lang t="emoticons|image_filesize"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="filesize" id="filesize" value="{$form.filesize}">
<input class="form-control" type="number" name="filesize" id="filesize" value="{$form.filesize}" required>
<p class="help-block">{lang t="system|statements_in_byte"}</p>
</div>
......
......@@ -9,7 +9,7 @@
<label for="date-format" class="col-sm-2 control-label required">{lang t="system|date_format"}</label>
<div class="col-sm-10">
<select class="form-control" name="dateformat" id="date-format">
<select class="form-control" name="dateformat" id="date-format" required>
{foreach $dateformat as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......@@ -20,7 +20,7 @@
<label for="sidebar-entries" class="col-sm-2 control-label required">{lang t="system|sidebar_entries_to_display"}</label>
<div class="col-sm-10">
<select class="form-control" name="sidebar" id="sidebar-entries">
<select class="form-control" name="sidebar" id="sidebar-entries" required>
{foreach $sidebar_entries as $row}
<option value="{$row.value}"{$row.selected}>{$row.value}</option>
{/foreach}
......
......@@ -16,7 +16,7 @@
<label for="date-format" class="col-sm-2 control-label required">{lang t="system|date_format"}</label>
<div class="col-sm-10">
<select class="form-control" name="dateformat" id="date-format">
<select class="form-control" name="dateformat" id="date-format" required>
{foreach $dateformat as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......@@ -27,7 +27,7 @@
<label for="sidebar-entries" class="col-sm-2 control-label required">{lang t="system|sidebar_entries_to_display"}</label>
<div class="col-sm-10">
<select class="form-control" name="sidebar" id="sidebar-entries">
<select class="form-control" name="sidebar" id="sidebar-entries" required>
{foreach $sidebar_entries as $row}
<option value="{$row.value}"{$row.selected}>{$row.value}</option>
{/foreach}
......@@ -71,7 +71,7 @@
<label for="thumbwidth" class="col-sm-2 control-label required">{lang t="gallery|thumb_image_width"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="thumbwidth" id="thumbwidth" value="{$form.thumbwidth}">
<input class="form-control" type="number" name="thumbwidth" id="thumbwidth" value="{$form.thumbwidth}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -80,7 +80,7 @@
<label for="thumbheight" class="col-sm-2 control-label required">{lang t="gallery|thumb_image_height"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="thumbheight" id="thumbheight" value="{$form.thumbheight}">
<input class="form-control" type="number" name="thumbheight" id="thumbheight" value="{$form.thumbheight}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -89,7 +89,7 @@
<label for="width" class="col-sm-2 control-label required">{lang t="gallery|image_width"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="width" id="width" value="{$form.width}">
<input class="form-control" type="number" name="width" id="width" value="{$form.width}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......@@ -98,7 +98,7 @@
<label for="height" class="col-sm-2 control-label required">{lang t="gallery|image_height"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="height" id="height" value="{$form.height}">
<input class="form-control" type="number" name="height" id="height" value="{$form.height}" required>
<p class="help-block">{lang t="system|statements_in_pixel"}</p>
</div>
......
......@@ -9,7 +9,7 @@
<label for="date-format" class="col-sm-2 control-label required">{lang t="system|date_format"}</label>
<div class="col-sm-10">
<select class="form-control" name="dateformat" id="date-format">
<select class="form-control" name="dateformat" id="date-format" required>
{foreach $dateformat as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......@@ -20,7 +20,7 @@
<label for="notify" class="col-sm-2 control-label required">{lang t="guestbook|notification"}</label>
<div class="col-sm-10">
<select class="form-control" name="notify" id="notify">
<select class="form-control" name="notify" id="notify" required>
{foreach $notify as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......@@ -31,7 +31,7 @@
<label for="notify-email" class="col-sm-2 control-label required">{lang t="guestbook|notification_email"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="notify_email" id="notify-email" value="{$form.notify_email}">
<input class="form-control" type="text" name="notify_email" id="notify-email" value="{$form.notify_email}" required>
</div>
</div>
<div class="form-group">
......
......@@ -17,7 +17,7 @@
<label for="mode" class="col-sm-2 control-label required">{lang t="menus|page_type"}</label>
<div class="col-sm-10">
<select class="form-control" name="mode" id="mode">
<select class="form-control" name="mode" id="mode" required>
{foreach $mode as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......
......@@ -3,7 +3,7 @@
<label for="block-id" class="col-sm-2 control-label required">{lang t="menus|menu_bar"}</label>
<div class="col-sm-10">
<select class="form-control" name="block_id" id="block-id">
<select class="form-control" name="block_id" id="block-id" required>
{foreach $blocks as $row}
<option value="{$row.id}"{$row.selected}>{$row.title}</option>
{/foreach}
......@@ -43,4 +43,4 @@
</div>
{javascripts}
{include_js module="menus" file="create-menu-item"}
{/javascripts}
\ No newline at end of file
{/javascripts}
......@@ -21,7 +21,7 @@
<label for="title" class="col-sm-2 control-label required">{lang t="news|title"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="title" id="title" value="{$form.title}" maxlength="120">
<input class="form-control" type="text" name="title" id="title" value="{$form.title}" maxlength="120" required>
</div>
</div>
<div class="form-group">
......@@ -70,7 +70,7 @@
<label for="link-target" class="col-sm-2 control-label">{lang t="news|target_page"}</label>
<div class="col-sm-10">
<select class="form-control" name="target" id="link-target">
<select class="form-control" name="target" id="link-target" required>
{foreach $target as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......
......@@ -9,7 +9,7 @@
<label for="date-format" class="col-sm-2 control-label required">{lang t="system|date_format"}</label>
<div class="col-sm-10">
<select class="form-control" name="dateformat" id="date-format">
<select class="form-control" name="dateformat" id="date-format" required>
<option value="">{lang t="system|pls_select"}</option>
{foreach $dateformat as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
......@@ -21,7 +21,7 @@
<label for="sidebar-entries" class="col-sm-2 control-label required">{lang t="system|sidebar_entries_to_display"}</label>
<div class="col-sm-10">
<select class="form-control" name="sidebar" id="sidebar-entries">
<select class="form-control" name="sidebar" id="sidebar-entries" required>
<option>{lang t="system|pls_select"}</option>
{foreach $sidebar_entries as $row}
<option value="{$row.value}"{$row.selected}>{$row.value}</option>
......@@ -47,7 +47,7 @@
<label for="readmore-chars" class="col-sm-2 control-label required">{lang t="news|readmore_chars"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="readmore_chars" id="readmore-chars" value="{$readmore_chars}">
<input class="form-control" type="number" name="readmore_chars" id="readmore-chars" value="{$readmore_chars}" required>
</div>
</div>
<div class="form-group">
......
......@@ -8,7 +8,7 @@
<div class="form-group">
<label for="mail" class="col-sm-2 control-label required">{lang t="system|email_address"}</label>
<div class="col-sm-10">
<input class="form-control" type="email" name="mail" id="mail" value="{$form.mail}" maxlength="120"></div>
<input class="form-control" type="email" name="mail" id="mail" value="{$form.mail}" maxlength="120" required></div>
</div>
<div class="form-group">
<label for="mailsig" class="col-sm-2 control-label">{lang t="newsletter|mailsig"}</label>
......
......@@ -23,7 +23,7 @@
<div class="form-group">
<label for="parent-id" class="col-sm-2 control-label required">{lang t="permissions|superior_role"}</label>
<div class="col-sm-10">
<select class="form-control" name="parent_id" id="parent-id">
<select class="form-control" name="parent_id" id="parent-id" required>
{foreach $parent as $row}
<option value="{$row.id}"{$row.selected}>{$row.name}</option>
{/foreach}
......
......@@ -10,7 +10,7 @@
<label for="modules" class="col-sm-2 control-label required">{lang t="system|module"}</label>
<div class="col-sm-10">
<select class="form-control" name="modules" id="modules">
<select class="form-control" name="modules" id="modules" required>
{foreach $modules as $row}
<option value="{$row.dir}"{$row.selected}>{$row.name}</option>
{/foreach}
......@@ -43,7 +43,7 @@
<label for="privileges" class="col-sm-2 control-label required">{lang t="permissions|assigned_privilege"}</label>
<div class="col-sm-10">
<select class="form-control" name="privileges" id="privileges">
<select class="form-control" name="privileges" id="privileges" required>
{foreach $privileges as $row}
<option value="{$row.id}"{$row.selected}>{$row.key}{if !empty($row.description)} ({$row.description}){/if}</option>
{/foreach}
......
......@@ -19,7 +19,7 @@
<label for="title" class="col-sm-2 control-label required">{lang t="polls|question"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="title" id="title" value="{$form.title}" maxlength="120">
<input class="form-control" type="text" name="title" id="title" value="{$form.title}" maxlength="120" required>
</div>
</div>
{foreach $answers as $row}
......
......@@ -9,7 +9,7 @@
<label for="title" class="col-sm-2 control-label required">{lang t="system|title"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="title" id="title" value="{$form.title}" maxlength="120">
<input class="form-control" type="text" name="title" id="title" value="{$form.title}" maxlength="120" required>
</div>
</div>
<div class="form-group">
......@@ -32,7 +32,7 @@
<label for="robots" class="col-sm-2 control-label required">{lang t="seo|robots"}</label>
<div class="col-sm-10">
<select class="form-control" name="robots" id="robots">
<select class="form-control" name="robots" id="robots" required>
{foreach $robots as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......
......@@ -27,10 +27,10 @@
<label for="seo-robots" class="col-sm-2 control-label">{lang t="seo|robots"}</label>
<div class="col-sm-10">
<select class="form-control" name="seo_robots" id="seo-robots">
<select class="form-control" name="seo_robots" id="seo-robots" required>
{foreach $seo.robots as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
</select>
</div>
</div>
\ No newline at end of file
</div>
......@@ -21,12 +21,16 @@
var that = this;
this.findSubmitButton();
this.element.noValidate = true;
$(this.element).on('submit', function (e) {
e.preventDefault();
$(document).trigger('acp3.ajaxFrom.submit.before');
that.processAjaxRequest();
if (that.preValidateForm(that.element)) {
that.processAjaxRequest();
}
}).on('click', function (e) {
if ($(this).prop('tagName') === 'A') {
e.preventDefault();
......@@ -41,6 +45,61 @@
$(this).attr("data-clicked", "true");
});
},
preValidateForm: function (form) {
var field,
isValid = true;
this.removeAllPreviousErrors();
for (var i = 0; i < form.elements.length; i++) {
field = form.elements[i];
// ignore buttons, fieldsets, etc.
if (field.nodeName !== "INPUT" && field.nodeName !== "TEXTAREA" && field.nodeName !== "SELECT") {
continue;
}
if (!field.checkValidity()) {
this.addErrorDecorationToFormGroup($(field));
this.addErrorMessageToFormField($(field), field.validationMessage);
isValid = false;
}
}
this.focusTabWithFirstErrorMessage();
return isValid;
},
removeAllPreviousErrors: function () {
$('form .form-group.has-error')
.removeClass('has-error')
.find('.validation-failed').remove();
},
addErrorDecorationToFormGroup: function ($elem) {
$elem.closest('.form-group').addClass('has-error');
},
removeErrorMessageFromFormField: function ($elem) {
$elem.closest('div').find('.validation-failed').remove();
},
addErrorMessageToFormField: function (formField, errorMessage) {
this.removeErrorMessageFromFormField(formField);
formField
.closest('div')
.append(
'<small class="help-block validation-failed"><i class="glyphicon glyphicon-remove"></i> ' + errorMessage + '</small>'
);
},
focusTabWithFirstErrorMessage: function () {
if ($('.tabbable').length > 0) {
var $elem = $('.tabbable .form-group.has-error:first'),
tabId = $elem.closest('.tab-pane').prop('id');
$('.tabbable .nav-tabs a[href="#' + tabId + '"]').tab('show');
$elem.find(':input').focus();
}
},
processAjaxRequest: function () {
var that = this,
$form = $(this.element),
......@@ -152,28 +211,26 @@
.prependTo(($modalBody.length > 0 && $modalBody.is(':visible')) ? $modalBody : $form)
.fadeIn();
this.prettyPrintErrorMessages($($errorBox.selector));
this.prettyPrintResponseErrorMessages($($errorBox.selector));
},
prettyPrintErrorMessages: function ($errorBox) {
// At first, remove all previous validation error states
$('form .form-group.has-error')
.removeClass('has-error')
.find('.validation-failed').remove();
prettyPrintResponseErrorMessages: function ($errorBox) {
var that = this;
// Next, highlight all input fields where the validation has failed
this.removeAllPreviousErrors();
// highlight all input fields where the validation has failed
$errorBox.find('li').each(function () {
var $this = $(this),
errorClass = $this.data('error');
if (errorClass.length > 0) {
var $elem = $('[id|="' + errorClass + '"]').filter(':not([id$="container"])');
if ($elem.length > 0) {
// Add CSS class that the validation for this entry has failed
$elem.closest('div.form-group').addClass('has-error');
that.addErrorDecorationToFormGroup($elem);
// Move the error message to the responsible input field(s)
// and remove the list item from the error box container
if ($elem.length == 1) {
$elem.closest('div').append('<small class="help-block validation-failed"><i class="glyphicon glyphicon-remove"></i> ' + $this.html() + '</small>');
that.addErrorMessageToFormField($elem, $this.html());
$this.remove();
}
}
......@@ -185,19 +242,14 @@
$errorBox.remove();
}
// As the last step, select the tab where the first error has occurred
if ($('.tabbable').length > 0) {
var tabId = $('.tabbable .form-group.has-error:first').closest('.tab-pane').prop('id');
$('.tabbable .nav-tabs a[href="#' + tabId + '"]').tab('show');
}
this.focusTabWithFirstErrorMessage();
}
});
$.fn[pluginName] = function (options) {
return this.each(function () {
if (!$.data(this, "plugin_" + pluginName)) {
$.data(this, "plugin_" +
pluginName, new Plugin(this, options));
$.data(this, "plugin_" + pluginName, new Plugin(this, options));
}
});
};
......
......@@ -20,7 +20,7 @@
<label for="homepage" class="col-sm-2 control-label required">{lang t="system|homepage"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="homepage" id="homepage" value="{$form.homepage}">
<input class="form-control" type="text" name="homepage" id="homepage" value="{$form.homepage}" required>
<p class="help-block">{lang t="system|homepage_description"}</p>
</div>
......@@ -29,7 +29,7 @@
<label for="entries" class="col-sm-2 control-label required">{lang t="system|records_per_page"}</label>
<div class="col-sm-10">
<select class="form-control" name="entries" id="entries">
<select class="form-control" name="entries" id="entries" required>
{foreach $entries as $row}
<option value="{$row.value}"{$row.selected}>{$row.value}</option>
{/foreach}
......@@ -40,7 +40,7 @@
<label for="flood" class="col-sm-2 control-label required">{lang t="system|flood_barrier"}</label>
<div class="col-sm-10">
<input class="form-control" type="number" name="flood" id="flood" value="{$form.flood}" min="0">
<input class="form-control" type="number" name="flood" id="flood" value="{$form.flood}" min="0" required>
<p class="help-block">{lang t="system|flood_barrier_description"}</p>
</div>
......@@ -49,7 +49,7 @@
<label for="wysiwyg" class="col-sm-2 control-label required">{lang t="system|editor"}</label>
<div class="col-sm-10">
<select class="form-control" name="wysiwyg" id="wysiwyg">
<select class="form-control" name="wysiwyg" id="wysiwyg" required>
{foreach $wysiwyg as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......@@ -60,7 +60,7 @@
<label for="language" class="col-sm-2 control-label required">{lang t="system|language"}</label>
<div class="col-sm-10">
<select class="form-control" name="language" id="language">
<select class="form-control" name="language" id="language" required>
<option value="">{lang t="system|pls_select"}</option>
{foreach $languages as $row}
<option value="{$row.iso}"{if $row.selected} selected="selected"{/if}>{$row.name}</option>
......@@ -89,7 +89,7 @@
<label for="date-format-long" class="col-sm-2 control-label required">{lang t="system|date_format_long"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="date_format_long" id="date-format-long" value="{$form.date_format_long}" maxlength="20">
<input class="form-control" type="text" name="date_format_long" id="date-format-long" value="{$form.date_format_long}" maxlength="20" required>
<p class="help-block">{lang t="system|php_date_function"}</p>
</div>
......@@ -98,14 +98,14 @@
<label for="date-format-short" class="col-sm-2 control-label required">{lang t="system|date_format_short"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="date_format_short" id="date-format-short" value="{$form.date_format_short}" maxlength="20">
<input class="form-control" type="text" name="date_format_short" id="date-format-short" value="{$form.date_format_short}" maxlength="20" required>
</div>
</div>
<div class="form-group">
<label for="date-time-zone" class="col-sm-2 control-label required">{lang t="system|time_zone"}</label>
<div class="col-sm-10">
<select class="form-control" name="date_time_zone" id="date-time-zone">
<select class="form-control" name="date_time_zone" id="date-time-zone" required>
{foreach $time_zones as $key => $values}
<optgroup label="{$key}">
{foreach $values as $country => $value}
......@@ -136,7 +136,7 @@
<label for="maintenance-message" class="col-sm-2 control-label required">{lang t="system|maintenance_msg"}</label>
<div class="col-sm-10">
<textarea class="form-control" name="maintenance_message" id="maintenance-message" cols="50" rows="6">{$form.maintenance_message}</textarea>
<textarea class="form-control" name="maintenance_message" id="maintenance-message" cols="50" rows="6" required>{$form.maintenance_message}</textarea>
</div>
</div>
</div>
......@@ -159,7 +159,7 @@
<label for="cache-minify" class="col-sm-2 control-label required">{lang t="system|minify_cache_lifetime"}</label>
<div class="col-sm-10">
<input class="form-control" type="text" name="cache_minify" id="cache-minify" value="{$form.cache_minify}" maxlength="20">
<input class="form-control" type="text" name="cache_minify" id="cache-minify" value="{$form.cache_minify}" maxlength="20" required>
<p class="help-block">{lang t="system|minify_cache_lifetime_description"}</p>
</div>
......@@ -170,7 +170,7 @@
<label for="mailer-type" class="col-sm-2 control-label required">{lang t="system|mailer_type"}</label>
<div class="col-sm-10">
<select class="form-control" name="mailer_type" id="mailer-type">
<select class="form-control" name="mailer_type" id="mailer-type" required>
{foreach $mailer_type as $row}
<option value="{$row.value}"{$row.selected}>{$row.lang}</option>
{/foreach}
......
......@@ -9,7 +9,7 @@
<label for="mail" class="col-sm-2 control-label required">{lang t="system|email_address"}</label>
<div class="col-sm-10">
<input class="form-control" type="email" name="mail" id="mail" value="{$form.mail}" maxlength="120"></div>
<input class="form-control" type="email" name="mail" id="mail" value="{$form.mail}" maxlength="120" required></div>
</div>
<div class="form-group">
<label for="{$languages.0.id}" class="col-sm-2 control-label required">{lang t="users|allow_language_override"}</label>
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment