From 344321e1ef968aa1f41a78d6e04eb5b84f04e407 Mon Sep 17 00:00:00 2001 From: Damyon Wiese Date: Thu, 11 Aug 2016 17:16:59 +0800 Subject: [PATCH] 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 --- lib/form/advcheckbox.php | 14 +--- lib/form/button.php | 11 +-- lib/form/checkbox.php | 13 +-- lib/form/editor.php | 12 +-- lib/form/filemanager.php | 12 +-- lib/form/filepicker.php | 11 ++- lib/form/grading.php | 10 ++- lib/form/group.php | 14 ++-- lib/form/password.php | 13 +-- lib/form/radio.php | 6 +- lib/form/recaptcha.php | 11 ++- lib/form/select.php | 18 ++--- lib/form/selectgroups.php | 17 ++-- lib/form/static.php | 12 +-- lib/form/submit.php | 12 +-- lib/form/templatable_form_element.php | 80 +++++++++++++++++++ lib/form/text.php | 12 +-- lib/form/textarea.php | 14 +--- lib/form/url.php | 14 ++-- lib/form/warning.php | 13 ++- theme/noname/scss/moodle/buttons.scss | 18 ----- .../core_form/element-autocomplete.mustache | 41 ++-------- .../core_form/element-button-inline.mustache | 16 ++-- .../core_form/element-button.mustache | 14 ++-- .../element-checkbox-inline.mustache | 3 +- .../core_form/element-checkbox.mustache | 2 +- .../core_form/element-date_selector.mustache | 13 ++- ...element-date_time_selector-inline.mustache | 9 +++ .../element-date_time_selector.mustache | 16 ++-- .../element-duration-inline.mustache | 1 + .../core_form/element-editor.mustache | 36 +-------- .../core_form/element-filemanager.mustache | 36 +-------- .../core_form/element-filepicker.mustache | 36 +-------- .../core_form/element-grading.mustache | 38 ++------- .../core_form/element-group-inline.mustache | 7 ++ .../core_form/element-group.mustache | 11 +-- .../core_form/element-password.mustache | 36 ++------- .../core_form/element-radio-inline.mustache | 33 ++++++++ .../core_form/element-radio.mustache | 36 +++++++++ .../core_form/element-recaptcha.mustache | 36 +-------- .../core_form/element-select-inline.mustache | 38 ++------- .../core_form/element-select.mustache | 41 ++-------- .../element-selectgroups-inline.mustache | 38 ++------- .../core_form/element-selectgroups.mustache | 41 ++-------- .../core_form/element-static.mustache | 36 +-------- .../core_form/element-submit-inline.mustache | 17 ++-- .../core_form/element-submit.mustache | 19 ++--- .../element-template-inline.mustache | 33 ++++++++ .../core_form/element-template.mustache | 35 ++++++++ .../core_form/element-text-inline.mustache | 37 ++------- .../templates/core_form/element-text.mustache | 39 ++------- .../core_form/element-textarea.mustache | 46 +++-------- .../templates/core_form/element-url.mustache | 39 ++------- .../core_form/element-warning.mustache | 15 ++-- 54 files changed, 483 insertions(+), 748 deletions(-) create mode 100644 lib/form/templatable_form_element.php create mode 100644 theme/noname/templates/core_form/element-date_time_selector-inline.mustache create mode 100644 theme/noname/templates/core_form/element-duration-inline.mustache create mode 100644 theme/noname/templates/core_form/element-group-inline.mustache create mode 100644 theme/noname/templates/core_form/element-radio-inline.mustache create mode 100644 theme/noname/templates/core_form/element-radio.mustache create mode 100644 theme/noname/templates/core_form/element-template-inline.mustache create mode 100644 theme/noname/templates/core_form/element-template.mustache diff --git a/lib/form/advcheckbox.php b/lib/form/advcheckbox.php index 00bcb17aac9..979e78945f3 100644 --- a/lib/form/advcheckbox.php +++ b/lib/form/advcheckbox.php @@ -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; - } } diff --git a/lib/form/button.php b/lib/form/button.php index 3546f67e28f..1229b38757f 100644 --- a/lib/form/button.php +++ b/lib/form/button.php @@ -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; - } } diff --git a/lib/form/checkbox.php b/lib/form/checkbox.php index 00ab2401934..83e64992875 100644 --- a/lib/form/checkbox.php +++ b/lib/form/checkbox.php @@ -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; - } } diff --git a/lib/form/editor.php b/lib/form/editor.php index 85d4f868920..204931688ac 100644 --- a/lib/form/editor.php +++ b/lib/form/editor.php @@ -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; } diff --git a/lib/form/filemanager.php b/lib/form/filemanager.php index 7cde5ef88ad..0cbf543ea7e 100644 --- a/lib/form/filemanager.php +++ b/lib/form/filemanager.php @@ -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; } diff --git a/lib/form/filepicker.php b/lib/form/filepicker.php index b81a631f92f..985879fd29d 100644 --- a/lib/form/filepicker.php +++ b/lib/form/filepicker.php @@ -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; } diff --git a/lib/form/grading.php b/lib/form/grading.php index d2aadeed85f..af379c7f8e5 100644 --- a/lib/form/grading.php +++ b/lib/form/grading.php @@ -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; } } diff --git a/lib/form/group.php b/lib/form/group.php index fbe4de83a7d..c19b31b1df6 100644 --- a/lib/form/group.php +++ b/lib/form/group.php @@ -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(); diff --git a/lib/form/password.php b/lib/form/password.php index 1e57a0a5627..14658e1e8f1 100644 --- a/lib/form/password.php +++ b/lib/form/password.php @@ -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; - } } diff --git a/lib/form/radio.php b/lib/form/radio.php index 3f6a731872d..05a0c3682f4 100644 --- a/lib/form/radio.php +++ b/lib/form/radio.php @@ -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 * @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=''; diff --git a/lib/form/recaptcha.php b/lib/form/recaptcha.php index f086f841ac3..b4cc75697ee 100644 --- a/lib/form/recaptcha.php +++ b/lib/form/recaptcha.php @@ -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; } diff --git a/lib/form/select.php b/lib/form/select.php index 57c85049716..219d4ee0a02 100644 --- a/lib/form/select.php +++ b/lib/form/select.php @@ -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; } diff --git a/lib/form/selectgroups.php b/lib/form/selectgroups.php index b277138be12..6afa6236e04 100644 --- a/lib/form/selectgroups.php +++ b/lib/form/selectgroups.php @@ -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; } diff --git a/lib/form/static.php b/lib/form/static.php index d31329f7f7a..bd82163612d 100644 --- a/lib/form/static.php +++ b/lib/form/static.php @@ -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; } diff --git a/lib/form/submit.php b/lib/form/submit.php index 7ccd0cc37e9..99712b04e65 100644 --- a/lib/form/submit.php +++ b/lib/form/submit.php @@ -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; } diff --git a/lib/form/templatable_form_element.php b/lib/form/templatable_form_element.php new file mode 100644 index 00000000000..2fa96ab6d73 --- /dev/null +++ b/lib/form/templatable_form_element.php @@ -0,0 +1,80 @@ +. + +/** + * 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; + } +} \ No newline at end of file diff --git a/lib/form/text.php b/lib/form/text.php index 0264a99ccf2..e101dd00aa5 100644 --- a/lib/form/text.php +++ b/lib/form/text.php @@ -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; - } } diff --git a/lib/form/textarea.php b/lib/form/textarea.php index 34ef9fe7546..eda6edec16c 100644 --- a/lib/form/textarea.php +++ b/lib/form/textarea.php @@ -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; - } } diff --git a/lib/form/url.php b/lib/form/url.php index 47dfa7a7696..c372be073c1 100644 --- a/lib/form/url.php +++ b/lib/form/url.php @@ -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; } } diff --git a/lib/form/warning.php b/lib/form/warning.php index 38c21a3d18e..fe7ec66ab5b 100644 --- a/lib/form/warning.php +++ b/lib/form/warning.php @@ -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 * @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; + } } diff --git a/theme/noname/scss/moodle/buttons.scss b/theme/noname/scss/moodle/buttons.scss index 36d8b438ddb..df1df0ef9c8 100644 --- a/theme/noname/scss/moodle/buttons.scss +++ b/theme/noname/scss/moodle/buttons.scss @@ -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; diff --git a/theme/noname/templates/core_form/element-autocomplete.mustache b/theme/noname/templates/core_form/element-autocomplete.mustache index 03ae368948a..75f93a1ff82 100644 --- a/theme/noname/templates/core_form/element-autocomplete.mustache +++ b/theme/noname/templates/core_form/element-autocomplete.mustache @@ -1,8 +1,5 @@ -
- -
+{{< core_form/element-template }} + {{$element}} - -
-
-{{#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}} \ No newline at end of file + {{/element}} +{{/ core_form/element-template }} \ No newline at end of file diff --git a/theme/noname/templates/core_form/element-button-inline.mustache b/theme/noname/templates/core_form/element-button-inline.mustache index 96abc13f04d..ed45cab9da1 100644 --- a/theme/noname/templates/core_form/element-button-inline.mustache +++ b/theme/noname/templates/core_form/element-button-inline.mustache @@ -1,11 +1,15 @@ -
- +{{< core_form/element-template-inline }} + {{$element}} -
\ No newline at end of file + {{/element}} +{{/ core_form/element-template-inline }} \ No newline at end of file diff --git a/theme/noname/templates/core_form/element-button.mustache b/theme/noname/templates/core_form/element-button.mustache index 996a3cb13f6..fe1d92fdb70 100644 --- a/theme/noname/templates/core_form/element-button.mustache +++ b/theme/noname/templates/core_form/element-button.mustache @@ -1,16 +1,14 @@ -
- -
+{{< core_form/element-template }} + {{$element}} -
-
+ {{/element}} +{{/ core_form/element-template }} \ No newline at end of file diff --git a/theme/noname/templates/core_form/element-checkbox-inline.mustache b/theme/noname/templates/core_form/element-checkbox-inline.mustache index 5400d7433a4..15b0c5bba4e 100644 --- a/theme/noname/templates/core_form/element-checkbox-inline.mustache +++ b/theme/noname/templates/core_form/element-checkbox-inline.mustache @@ -4,7 +4,8 @@ {{#element.frozen}}readonly disabled{{/element.frozen}} {{#error}} autofocus aria-describedby="id_error_{{element.name}}" - {{/error}} > + {{/error}} + {{{element.attributes}}} > {{{label}}} {{{helpbutton}}}