MDL-55417 theme_noname: Update mform templates to re-use javascript
[moodle.git] / theme / noname / amd / src / form-display-errors.js
1 // This file is part of Moodle - http://moodle.org/
2 //
3 // Moodle is free software: you can redistribute it and/or modify
4 // it under the terms of the GNU General Public License as published by
5 // the Free Software Foundation, either version 3 of the License, or
6 // (at your option) any later version.
7 //
8 // Moodle is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with Moodle.  If not, see <http://www.gnu.org/licenses/>.
16 /**
17  * Custom form error event handler to manipulate the bootstrap markup and show
18  * nicely styled errors in an mform.
19  *
20  * @module     theme_noname/form-display-errors
21  * @copyright  2016 Damyon Wiese <damyon@moodle.com>
22  * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
23  */
24 define(['jquery', 'core/event'], function($, Event) {
25     return {
26         enhance: function(elementid) {
27             var element = document.getElementById(elementid);
28             $(element).on(Event.Events.FORM_FIELD_VALIDATION, function(event, msg) {
29                 event.preventDefault();
30                 var parent = $(element).closest('.form-group');
31                 var feedback = parent.find('.form-control-feedback');
32                 if (msg !== '') {
33                     parent.addClass('has-danger');
34                     $(element).addClass('form-control-danger');
35                     $(element).attr('aria-describedby', $(element).attr('id') + '-feedback');
36                     feedback.html(msg);
37                     feedback.show();
38                 } else {
39                     parent.removeClass('has-danger');
40                     $(element).removeClass('form-control-danger');
41                     $(element).attr('aria-describedby', '');
42                     feedback.hide();
43                 }
44             });
45         }
46     };
47 });