MDL-55417 forms: Clean up form element template patch

Use a trait and a base mustache template for all form elements to reduce code
duplication and increase standardisation.

Part of MDL-55071
This commit is contained in:
Damyon Wiese
2016-09-23 10:53:30 +01:00
committed by Dan Poltawski
parent 91bda4cd45
commit 344321e1ef
54 changed files with 483 additions and 748 deletions
+4 -10
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/advcheckbox.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* HTML class for an advcheckbox type element
@@ -40,6 +40,9 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_advcheckbox extends HTML_QuickForm_advcheckbox implements templatable {
use templatable_form_element;
/** @var string html for help button, if empty then no help will icon will be dispalyed. */
var $_helpbutton='';
@@ -131,13 +134,4 @@ class MoodleQuickForm_advcheckbox extends HTML_QuickForm_advcheckbox implements
}
return $output;
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
return $context;
}
}
+2 -9
View File
@@ -40,6 +40,8 @@ require_once(__DIR__ . '/../outputcomponents.php');
*/
class MoodleQuickForm_button extends HTML_QuickForm_button implements templatable
{
use templatable_form_element;
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -86,13 +88,4 @@ class MoodleQuickForm_button extends HTML_QuickForm_button implements templatabl
return 'default';
}
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
return $context;
}
}
+3 -10
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/checkbox.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* HTML class for a checkbox type element
@@ -41,6 +41,8 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_checkbox extends HTML_QuickForm_checkbox implements templatable {
use templatable_form_element;
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -139,13 +141,4 @@ class MoodleQuickForm_checkbox extends HTML_QuickForm_checkbox implements templa
}
return $output;
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
return $context;
}
}
+6 -6
View File
@@ -30,7 +30,7 @@ global $CFG;
require_once('HTML/QuickForm/element.php');
require_once($CFG->dirroot.'/lib/filelib.php');
require_once($CFG->dirroot.'/repository/lib.php');
require_once($CFG->libdir.'/outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Editor element
@@ -45,6 +45,10 @@ require_once($CFG->libdir.'/outputcomponents.php');
* @todo MDL-29426 ajax format conversion
*/
class MoodleQuickForm_editor extends HTML_QuickForm_element implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help will icon will be dispalyed. */
public $_helpbutton = '';
@@ -451,11 +455,7 @@ class MoodleQuickForm_editor extends HTML_QuickForm_element implements templatab
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
+6 -6
View File
@@ -30,7 +30,7 @@ global $CFG;
require_once('HTML/QuickForm/element.php');
require_once($CFG->dirroot.'/lib/filelib.php');
require_once($CFG->dirroot.'/repository/lib.php');
require_once($CFG->libdir.'/outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Filemanager form element
@@ -42,6 +42,10 @@ require_once($CFG->libdir.'/outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_filemanager extends HTML_QuickForm_element implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help will icon will be dispalyed. */
public $_helpbutton = '';
@@ -300,11 +304,7 @@ class MoodleQuickForm_filemanager extends HTML_QuickForm_element implements temp
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
+5 -6
View File
@@ -29,7 +29,7 @@ global $CFG;
require_once("HTML/QuickForm/button.php");
require_once($CFG->dirroot.'/repository/lib.php');
require_once($CFG->libdir.'/outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Filepicker form element
@@ -42,6 +42,9 @@ require_once($CFG->libdir.'/outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_filepicker extends HTML_QuickForm_input implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help will icon will be dispalyed. */
public $_helpbutton = '';
@@ -223,11 +226,7 @@ class MoodleQuickForm_filepicker extends HTML_QuickForm_input implements templat
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
+8 -2
View File
@@ -28,7 +28,7 @@
global $CFG;
require_once("HTML/QuickForm/element.php");
require_once($CFG->dirroot.'/grade/grading/form/lib.php');
require_once($CFG->libdir.'/outputcomponents.php');
require_once('templatable_form_element.php');
if (class_exists('HTML_QuickForm')) {
HTML_QuickForm::registerRule('gradingvalidated', 'callback', '_validate', 'MoodleQuickForm_grading');
@@ -49,6 +49,10 @@ if (class_exists('HTML_QuickForm')) {
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_grading extends HTML_QuickForm_input implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -162,6 +166,8 @@ class MoodleQuickForm_grading extends HTML_QuickForm_input implements templatabl
}
public function export_for_template(renderer_base $output) {
return $this->toHtml();
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
}
+8 -6
View File
@@ -26,7 +26,7 @@
*/
require_once("HTML/QuickForm/group.php");
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* HTML class for a form element group
@@ -39,6 +39,10 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_group extends HTML_QuickForm_group implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -153,15 +157,13 @@ class MoodleQuickForm_group extends HTML_QuickForm_group implements templatable
public function export_for_template(renderer_base $output) {
global $OUTPUT;
$context = $this->export_for_template_base($output);
$this->_renderedfromtemplate = true;
include_once('HTML/QuickForm/Renderer/Default.php');
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$elements = [];
foreach ($this->_elements as $key => $element) {
$element->_generateId();
+3 -10
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/password.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Password type form element
@@ -39,6 +39,8 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_password extends HTML_QuickForm_password implements templatable {
use templatable_form_element;
/** @var string, html for help button, if empty then no help */
var $_helpbutton='';
@@ -84,13 +86,4 @@ class MoodleQuickForm_password extends HTML_QuickForm_password implements templa
function getHelpButton(){
return $this->_helpbutton;
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
return $context;
}
}
+4 -2
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/radio.php');
require_once('templatable_form_element.php');
/**
* radio type form element
*
@@ -37,7 +37,9 @@ require_once('HTML/QuickForm/radio.php');
* @copyright 2006 Jamie Pratt <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_radio extends HTML_QuickForm_radio{
class MoodleQuickForm_radio extends HTML_QuickForm_radio implements templatable {
use templatable_form_element;
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
+5 -6
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/input.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* recaptcha type form element
@@ -39,6 +39,9 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_recaptcha extends HTML_QuickForm_input implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -155,11 +158,7 @@ class MoodleQuickForm_recaptcha extends HTML_QuickForm_input implements templata
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
+7 -11
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/select.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* select type form element
@@ -39,6 +39,11 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_select extends HTML_QuickForm_select implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -192,15 +197,7 @@ class MoodleQuickForm_select extends HTML_QuickForm_select implements templatabl
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
$context['attributes'] = [];
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
if (!in_array($name, ['id', 'name', 'multiple'])) {
$context['attributes'][] = ['name' => $name, 'value' => $value];
}
}
$context = $this->export_for_template_base($output);
$options = [];
foreach ($this->_options as $option) {
@@ -215,7 +212,6 @@ class MoodleQuickForm_select extends HTML_QuickForm_select implements templatabl
$options[] = $o;
}
$context['options'] = $options;
$context['hideLabel'] = $this->_hiddenLabel;
return $context;
}
+6 -11
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/element.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* select type form element
@@ -40,6 +40,10 @@ require_once(__DIR__ . '/../outputcomponents.php');
*/
class MoodleQuickForm_selectgroups extends HTML_QuickForm_element implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var bool add choose option */
var $showchoose = false;
@@ -510,15 +514,7 @@ class MoodleQuickForm_selectgroups extends HTML_QuickForm_element implements tem
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
$context['attributes'] = [];
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
if (!in_array($name, ['id', 'name', 'multiple'])) {
$context['attributes'][] = ['name' => $name, 'value' => $value];
}
}
$context = $this->export_for_template_base($output);
$optiongroups = [];
if ($this->showchoose) {
$optionsgroups[] = [
@@ -548,7 +544,6 @@ class MoodleQuickForm_selectgroups extends HTML_QuickForm_element implements tem
$optiongroups[] = $og;
}
$context['optiongroups'] = $optiongroups;
$context['hideLabel'] = $this->_hiddenLabel;
return $context;
}
+6 -6
View File
@@ -26,7 +26,7 @@
*/
require_once("HTML/QuickForm/static.php");
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Text type element
@@ -39,6 +39,10 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_static extends HTML_QuickForm_static implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string Form element type */
var $_elementTemplateType='static';
@@ -85,11 +89,7 @@ class MoodleQuickForm_static extends HTML_QuickForm_static implements templatabl
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
+6 -6
View File
@@ -26,7 +26,7 @@
*/
require_once("HTML/QuickForm/submit.php");
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* submit type form element
@@ -39,6 +39,10 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_submit extends HTML_QuickForm_submit implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/**
* constructor
*
@@ -110,11 +114,7 @@ class MoodleQuickForm_submit extends HTML_QuickForm_submit implements templatabl
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context = $this->export_for_template_base($output);
if ($this->getName() == 'cancel') {
$context['iscancel'] = true;
}
+80
View File
@@ -0,0 +1,80 @@
<?php
// This file is part of Moodle - http://moodle.org/
//
// Moodle is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// Moodle is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with Moodle. If not, see <http://www.gnu.org/licenses/>.
/**
* Adds export_for_template behaviour to an mform element in a consistent and predictable way.
*
* @package core_form
* @copyright 2016 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
defined('MOODLE_INTERNAL') || die();
// Some form elements are used before $CFG is created - do not rely on it here.
require_once(__DIR__ . '/../outputcomponents.php');
/**
* templatable_form_element trait.
*
* @package core_form
* @copyright 2016 Damyon Wiese
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
trait templatable_form_element {
/**
* Function to export the renderer data in a format that is suitable for a
* mustache template. This means:
* 1. No complex types - only stdClass, array, int, string, float, bool
* 2. Any additional info that is required for the template is pre-calculated (e.g. capability checks).
*
* This trait can be used as-is for simple form elements - or imported with a different name
* so it can be extended with additional context variables before being returned.
*
* @param renderer_base $output Used to do a final render of any components that need to be rendered for export.
* @return stdClass|array
*/
public function export_for_template(renderer_base $output) {
$context = [];
// Not all elements have all of these attributes - but they are common enough to be valid for a few.
$standardattributes = ['id', 'name', 'label', 'multiple', 'checked', 'error', 'size', 'value'];
$standardproperties = ['frozen', 'helpbutton', 'hiddenLabel'];
// Standard attributes.
foreach ($standardattributes as $attrname) {
$value = $this->getAttribute($attrname);
$context[$attrname] = $value;
}
// Standard class properties.
foreach ($standardproperties as $propname) {
$classpropname = '_' . $propname;
$context[strtolower($propname)] = isset($this->$classpropname) ? $this->$classpropname : false;
}
// Other attributes.
$otherattributes = [];
foreach ($this->getAttributes() as $attr => $value) {
if (!in_array($attr, $standardattributes)) {
$otherattributes[] = $attr . '="' . s($value) . '"';
}
}
$context['attributes'] = implode(' ', $otherattributes);
return $context;
}
}
+2 -10
View File
@@ -26,7 +26,7 @@
*/
require_once("HTML/QuickForm/text.php");
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Text type form element
@@ -39,6 +39,7 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_text extends HTML_QuickForm_text implements templatable {
use templatable_form_element;
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -127,13 +128,4 @@ class MoodleQuickForm_text extends HTML_QuickForm_text implements templatable {
return $this->_helpbutton;
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context['hideLabel'] = $this->_hiddenLabel;
return $context;
}
}
+3 -11
View File
@@ -26,7 +26,7 @@
*/
require_once('HTML/QuickForm/textarea.php');
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* Textarea type form element
@@ -39,6 +39,8 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_textarea extends HTML_QuickForm_textarea implements templatable {
use templatable_form_element;
/** @var string Need to store id of form as we may need it for helpbutton */
var $_formid = '';
@@ -131,14 +133,4 @@ class MoodleQuickForm_textarea extends HTML_QuickForm_textarea implements templa
return 'default';
}
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context['hideLabel'] = $this->_hiddenLabel;
return $context;
}
}
+7 -7
View File
@@ -26,7 +26,7 @@
*/
require_once("HTML/QuickForm/text.php");
require_once(__DIR__ . '/../outputcomponents.php');
require_once('templatable_form_element.php');
/**
* url type form element
@@ -38,6 +38,10 @@ require_once(__DIR__ . '/../outputcomponents.php');
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_url extends HTML_QuickForm_text implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string html for help button, if empty then no help */
var $_helpbutton='';
@@ -172,12 +176,8 @@ EOD;
}
public function export_for_template(renderer_base $output) {
$context = [];
$context['frozen'] = $this->_flagFrozen;
foreach ($this->getAttributes() as $name => $value) {
$context[$name] = $value;
}
$context['filepickerhtml'] = $this->getFilePickerHTML();
$context = $this->export_for_template_base($output);
$context['filepickerhtml'] = $this->toHtml();
return $context;
}
}
+12 -1
View File
@@ -25,6 +25,7 @@
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
require_once("HTML/QuickForm/static.php");
require_once('templatable_form_element.php');
/**
* static warning
@@ -36,7 +37,11 @@ require_once("HTML/QuickForm/static.php");
* @copyright 2008 Jamie Pratt <[email protected]>
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
class MoodleQuickForm_warning extends HTML_QuickForm_static{
class MoodleQuickForm_warning extends HTML_QuickForm_static implements templatable {
use templatable_form_element {
export_for_template as export_for_template_base;
}
/** @var string Form element type */
var $_elementTemplateType='warning';
@@ -99,4 +104,10 @@ class MoodleQuickForm_warning extends HTML_QuickForm_static{
function getElementTemplateType(){
return $this->_elementTemplateType;
}
public function export_for_template(renderer_base $output) {
$context = $this->export_for_template_base($output);
$context['html'] = $this->toHtml();
return $context;
}
}
-18
View File
@@ -54,24 +54,6 @@ p.arrow_button {
margin: 0 0 10px 5px;
}
input[name="searchwikicontent"] + input[type="submit"],
select + input[type="submit"],
input[type="text"] + input[type="button"],
input[type="password"] + input[type="submit"],
input[type="text"] + button,
input[type="text"] + input[type="submit"] {
@extend .btn-lineup;
}
input.form-submit,
input[type="button"],
input[type="submit"],
input[type="reset"] {
@extend .btn;
@extend .btn-secondary;
@extend .btn-lineup;
}
input {
&.fp-btn-choose {
@extend .btn-sm;
@@ -1,8 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline">
{{< core_form/element-template }}
{{$element}}
<select class="custom-select {{#error}}form-control-danger{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
@@ -10,38 +7,10 @@
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.attributes}}
{{name}}={{#quote}}{{value}}{{/quote}} ddd
{{/element.attributes}}
>
{{{element.attributes}}} >
{{#element.options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{text}}</option>
{{/element.options}}
</select>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,11 +1,15 @@
<div class="form-group">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
{{< core_form/element-template-inline }}
{{$element}}
<button {{#element.frozen}}readonly{{/element.frozen}}
class="btn btn-secondary"
name="{{element.name}}"
id="{{element.id}}" >
id="{{element.id}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}}
>
{{{element.value}}}
</button>
</div>
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,16 +1,14 @@
<div class="form-group row">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline">
{{< core_form/element-template }}
{{$element}}
<button {{#element.frozen}}readonly{{/element.frozen}}
class="btn btn-secondary m-l-0"
name="{{element.name}}"
id="{{element.id}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
{{/error}}
{{{element.attributes}}}>
{{{element.value}}}
</button>
</div>
</div>
{{/element}}
{{/ core_form/element-template }}
@@ -4,7 +4,8 @@
{{#element.frozen}}readonly disabled{{/element.frozen}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
{{/error}}
{{{element.attributes}}} >
{{{label}}} {{{helpbutton}}}
</label>
<span class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
@@ -6,7 +6,7 @@
{{#element.frozen}}readonly disabled{{/element.frozen}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
{{/error}} {{{element.attributes}}} >
{{{label}}} {{{helpbutton}}}
</label>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
@@ -1,10 +1,9 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline fdate_selector">
{{< core_form/element-template }}
{{$element}}
<div class="fdate_selector">
{{#element.elements}}
{{{.}}}
{{/element.elements}}
</div>
</div>
</div>
{{/element}}
{{/ core_form/element-template }}
@@ -0,0 +1,9 @@
{{< core_form/element-template-inline }}
{{$element}}
<div class="fdate_time_selector">
{{#element.elements}}
{{{.}}}
{{/element.elements}}
</div>
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,13 +1,9 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline fdate_time_selector">
{{< core_form/element-template }}
{{$element}}
<div class="fdate_time_selector">
{{#element.elements}}
{{{.}}}
{{/element.elements}}
</div>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{/element}}
{{/ core_form/element-template }}
@@ -0,0 +1 @@
{{> core_form/element-group-inline }}
@@ -1,33 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
<div class="form-control-feedback" id="id_error_{{element.name}}_5btext_5d" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,33 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,33 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,33 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{{element}}}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
{{/element}}
{{/ core_form/element-template }}
@@ -0,0 +1,7 @@
{{< core_form/element-template-inline }}
{{$element}}
{{#element.elements}}
{{{.}}}
{{/element.elements}}
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,10 +1,7 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline">
{{< core_form/element-template }}
{{$element}}
{{#element.elements}}
{{{.}}}
{{/element.elements}}
</div>
</div>
{{/element}}
{{/ core_form/element-template }}
@@ -1,8 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
<input type="password"
{{#element.frozen}}readonly{{/element.frozen}}
class="form-control {{#error}}form-control-danger{{/error}}"
@@ -12,12 +9,9 @@
size="{{element.size}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{/error}} {{{attributes}}}>
{{/element}}
{{/ core_form/element-template }}
{{#js}}
require(['core/yui'], function(Y) {
Y.use('moodle-form-passwordunmask', function() {
@@ -26,24 +20,4 @@ require(['core/yui'], function(Y) {
checkboxname: {{#quote}}{{element.name}}{{/quote}} });
});
});
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
@@ -0,0 +1,33 @@
<label class="form-check-inline {{#error}}has-danger{{/error}}">
<input type="radio" name="{{element.name}}"
id="{{element.id}}" value="{{element.value}}" size="{{element.size}}"
{{#element.frozen}}readonly disabled{{/element.frozen}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}} >
{{{label}}} {{{helpbutton}}}
</label>
<span class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</span>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
@@ -0,0 +1,36 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<div class="col-md-9 push-md-3 checkbox">
<label>
<input type="radio" name="{{element.name}}"
id="{{element.id}}" value="{{element.value}}" size="{{element.size}}"
{{#element.frozen}}readonly disabled{{/element.frozen}}
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} {{{element.attributes}}} >
{{{label}}} {{{helpbutton}}}
</label>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
@@ -1,33 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,7 +1,5 @@
<div class="form-group {{#error}}has-danger{{/error}}">
<label for="{{element.id}}" class="{{#element.hideLabel}}sr-only{{/element.hideLabel}}">
{{{label}}} {{{helpbutton}}}
</label>
{{< core_form/element-template-inline }}
{{$element}}
<select class="custom-select {{#error}}form-control-danger{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
@@ -9,36 +7,10 @@
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.attributes}}
{{name}}={{#quote}}{{value}}{{/quote}}
{{/element.attributes}}>
{{element.attributes}} >
{{#element.options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{text}}</option>
{{/element.options}}
</select>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,8 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
<select class="custom-select {{#error}}form-control-danger{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
@@ -10,38 +7,10 @@
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.attributes}}
{{name}}={{#quote}}{{value}}{{/quote}} ddd
{{/element.attributes}}
>
{{element.attributes}} >
{{#element.options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{text}}</option>
{{/element.options}}
</select>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,7 +1,5 @@
<div class="form-group {{#error}}has-danger{{/error}}">
<label for="{{element.id}}" class="{{#element.hideLabel}}sr-only{{/element.hideLabel}}">
{{{label}}} {{{helpbutton}}}
</label>
{{< core_form/element-template-inline }}
{{$element}}
<select class="form-control {{#error}}form-control-danger{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
@@ -9,36 +7,10 @@
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.attributes}}
{{name}}={{#quote}}{{value}}{{/quote}}
{{/element.attributes}}>
{{{#element.attributes}}} >
{{#element.options}}
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{{text}}}</option>
{{/element.options}}
</select>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,8 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
<select class="form-control {{#error}}form-control-danger{{/error}}" name="{{element.name}}"
id="{{element.id}}"
{{#element.multiple}}multiple{{/element.multiple}}
@@ -10,10 +7,7 @@
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{#element.attributes}}
{{name}}={{#quote}}{{value}}{{/quote}}
{{/element.attributes}}
>
{{{#element.attributes}}} >
{{#element.optiongroups}}
<optgroup label="{{text}}">
{{#options}}
@@ -22,30 +16,5 @@
{{/element.optiongroups}}
</optgroup>
</select>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,33 +1,5 @@
<div class="form-group row fitem {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,10 +1,13 @@
<div class="form-group">
<label class="col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
{{< core_form/element-template-inline }}
{{$element}}
<input type="submit" {{#element.frozen}}readonly{{/element.frozen}}
class="btn btn-primary"
class="btn
{{^element.iscancel}}btn-primary{{/element.iscancel}}
{{#element.iscancel}}btn-secondary{{/element.iscancel}}
{{#error}} btn-danger {{/error}}"
name="{{element.name}}"
id="{{element.id}}"
value="{{element.value}}" >
</div>
value="{{element.value}}"
{{{element.attributes}}} >
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,15 +1,16 @@
<div class="form-group row">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline">
{{< core_form/element-template }}
{{$element}}
<input type="submit" {{#element.frozen}}readonly{{/element.frozen}}
class="btn {{^iscancel}}btn-primary{{/iscancel}}{{#iscancel}}btn-secondary{{/iscancel}} m-l-0"
class="btn
{{^element.iscancel}}btn-primary{{/element.iscancel}}
{{#element.iscancel}}btn-secondary{{/element.iscancel}}
{{#error}} btn-danger {{/error}}"
name="{{element.name}}"
id="{{element.id}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
value="{{element.value}}">
</div>
</div>
value="{{element.value}}"
{{{element.attributes}}} >
{{/element}}
{{/ core_form/element-template }}
@@ -0,0 +1,33 @@
<div class="form-group {{#error}}has-danger{{/error}}">
<label class="col-form-label {{#element.hiddenlabel}}sr-only{{/element.hiddenlabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
{{$ element }}
<!-- Element goes here -->
{{/ element }}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
@@ -0,0 +1,35 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hiddenlabel}}sr-only{{/element.hiddenlabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9 form-inline">
{{$ element }}
<!-- Element goes here -->
{{/ element }}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
@@ -1,7 +1,5 @@
<div class="form-group {{#error}}has-danger{{/error}}">
<label class="{{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
{{< core_form/element-template-inline }}
{{$element}}
<input type="text"
{{#element.frozen}}readonly{{/element.frozen}}
class="form-control {{#error}}form-control-danger{{/error}}"
@@ -11,30 +9,7 @@
size="{{element.size}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/error}}
{{{element.attributes}}}>
{{/element}}
{{/ core_form/element-template-inline }}
@@ -1,8 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
<input type="text"
{{#element.frozen}}readonly{{/element.frozen}}
class="form-control {{#error}}form-control-danger{{/error}}"
@@ -12,31 +9,7 @@
size="{{element.size}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/error}}
{{{element.attributes}}} >
{{/element}}
{{/ core_form/element-template }}
@@ -1,33 +1,13 @@
<div class="form-group row fitem {{#error}}has-danger{{/error}}" id="fitem_{{element.id}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
<textarea name="{{element.name}}" id="{{element.id}}">{{element.value}}</textarea>
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{< core_form/element-template }}
{{$element}}
<textarea
name="{{element.name}}"
id="{{element.id}}"
{{#element.frozen}}readonly{{/element.frozen}}
class="form-control {{#error}}form-control-danger{{/error}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}}
{{{element.attributes}}} >{{element.value}}</textarea>
{{/element}}
{{/ core_form/element-template }}
@@ -1,8 +1,5 @@
<div class="form-group row {{#error}}has-danger{{/error}}">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
{{< core_form/element-template }}
{{$element}}
<input type="url"
{{#element.frozen}}readonly{{/element.frozen}}
class="form-control {{#error}}form-control-danger{{/error}}"
@@ -12,32 +9,8 @@
size="{{element.size}}"
{{#error}}
autofocus aria-describedby="id_error_{{element.name}}"
{{/error}} >
{{/error}}
{{{element.attributes}}} >
{{{element.filepickerhtml}}}
<div class="form-control-feedback" id="id_error_{{element.name}}" {{^error}} style="display: none;"{{/error}}>
{{{error}}}
</div>
</div>
</div>
{{#js}}
require(['jquery', 'core/event'], function($, Event) {
var element = document.getElementById('{{element.id}}');
$(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
event.preventDefault();
var parent = $(element).closest('.form-group');
var feedback = parent.find('.form-control-feedback');
if (msg !== '') {
parent.addClass('has-danger');
$(element).addClass('form-control-danger');
$(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
feedback.html(msg);
feedback.show();
} else {
parent.removeClass('has-danger');
$(element).removeClass('form-control-danger');
$(element).attr('aria-describedby', '');
feedback.hide();
}
});
});
{{/js}}
{{/element}}
{{/ core_form/element-template }}
@@ -1,10 +1,5 @@
<div class="form-group row fitem has-danger">
<label class="col-md-3 col-form-label {{#element.hideLabel}}sr-only{{/element.hideLabel}}" for="{{element.id}}">
{{{label}}} {{{helpbutton}}}
</label>
<div class="col-md-9">
<div class="form-control-feedback" id="id_error_{{element.name}}">
{{{element.html}}}
</div>
</div>
</div>
{{< core_form/element-template }}
{{$element}}
{{{element.html}}}
{{/element}}
{{/ core_form/element-template }}