mirror of
https://github.com/moodle/moodle.git
synced 2025-01-19 14:27:22 +01:00
MDL-57697 survery: migrate validation script from yui2
Just a modernisation of the existing yui2 code to AMD/jQuery and away from alert();
This commit is contained in:
parent
f99313477d
commit
3f037586ae
1
mod/survey/amd/build/validation.min.js
vendored
Normal file
1
mod/survey/amd/build/validation.min.js
vendored
Normal file
@ -0,0 +1 @@
|
||||
define(["jquery","core/str","core/modal_factory","core/notification"],function(a,b,c,d){return{ensureRadiosChosen:function(e,f){var g=b.get_strings([{key:"error",component:"moodle"},{key:"questionsnotanswered",component:"survey"}]).then(function(a){return c.create({type:c.types.CANCEL,title:a[0],body:a[1]})})["catch"](d.exception),h=a("#"+e);h.submit(function(a){var b=!1;return f.forEach(function(a){var c=h.find('input:radio[name="'+a.name+'"]:checked');c.val()==a["default"]&&(b=!0)}),!b||(a.preventDefault(),g.then(function(a){a.show()}),!1)})}}});
|
71
mod/survey/amd/src/validation.js
Normal file
71
mod/survey/amd/src/validation.js
Normal file
@ -0,0 +1,71 @@
|
||||
// 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/>.
|
||||
|
||||
/**
|
||||
* Javascript to handle survey validation.
|
||||
*
|
||||
* @module mod_survey/validation
|
||||
* @package mod_survey
|
||||
* @copyright 2017 Dan Poltawski <dan@moodle.com>
|
||||
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
|
||||
* @since 3.3
|
||||
*/
|
||||
define(['jquery', 'core/str', 'core/modal_factory', 'core/notification'], function($, Str, ModalFactory, Notification) {
|
||||
return {
|
||||
/**
|
||||
* Prevents form submission until all radio buttons are chosen, displays
|
||||
* modal error if any choices are missing.
|
||||
*
|
||||
* @param {String} formid HTML id of form
|
||||
* @param {Array} questions
|
||||
*/
|
||||
ensureRadiosChosen: function(formid, questions) {
|
||||
// Prepare modal for display in case of problems.
|
||||
var modalPromise = Str.get_strings([
|
||||
{key: 'error', component: 'moodle'},
|
||||
{key: 'questionsnotanswered', component: 'survey'},
|
||||
]).then(function(strings) {
|
||||
return ModalFactory.create({
|
||||
type: ModalFactory.types.CANCEL,
|
||||
title: strings[0],
|
||||
body: strings[1],
|
||||
});
|
||||
}).catch(Notification.exception);
|
||||
|
||||
var form = $('#' + formid);
|
||||
form.submit(function(e) {
|
||||
var error = false;
|
||||
questions.forEach(function(question) {
|
||||
var checkedResponse = form.find('input:radio[name="' + question.name + '"]:checked');
|
||||
if (checkedResponse.val() == question.default) {
|
||||
error = true;
|
||||
}
|
||||
});
|
||||
|
||||
if (error) {
|
||||
e.preventDefault();
|
||||
// Display the modal error.
|
||||
modalPromise.then(function(modal) {
|
||||
modal.show();
|
||||
return;
|
||||
});
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
});
|
||||
}
|
||||
};
|
||||
});
|
@ -1,27 +0,0 @@
|
||||
|
||||
M.mod_survey = {};
|
||||
|
||||
M.mod_survey.init = function(Y) {
|
||||
if (document.getElementById('surveyform')) {
|
||||
var surveyform = document.getElementById('surveyform');
|
||||
Y.YUI2.util.Event.addListener('surveyform', "submit", function(e) {
|
||||
var error = false;
|
||||
if (document.getElementById('surveyform')) {
|
||||
var surveyform = document.getElementById('surveyform');
|
||||
for (var i=0; i < surveycheck.questions.length; i++) {
|
||||
var tempquestion = surveycheck.questions[i];
|
||||
if (surveyform[tempquestion['question']][tempquestion['default']].checked) {
|
||||
error = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (error) {
|
||||
alert(M.util.get_string('questionsnotanswered', 'survey'));
|
||||
Y.YUI2.util.Event.preventDefault(e);
|
||||
return false;
|
||||
} else {
|
||||
return true;
|
||||
}
|
||||
});
|
||||
}
|
||||
};
|
@ -175,20 +175,11 @@ if (!is_enrolled($context)) {
|
||||
exit;
|
||||
}
|
||||
|
||||
$checkarray = Array('questions' => Array());
|
||||
if (!empty($checklist)) {
|
||||
foreach ($checklist as $question => $default) {
|
||||
$checkarray['questions'][] = Array('question' => $question, 'default' => $default);
|
||||
}
|
||||
$questions = array();
|
||||
foreach ($checklist as $question => $default) {
|
||||
$questions[] = array('name' => $question, 'default' => $default);
|
||||
}
|
||||
$PAGE->requires->data_for_js('surveycheck', $checkarray);
|
||||
$module = array(
|
||||
'name' => 'mod_survey',
|
||||
'fullpath' => '/mod/survey/survey.js',
|
||||
'requires' => array('yui2-event'),
|
||||
);
|
||||
$PAGE->requires->string_for_js('questionsnotanswered', 'survey');
|
||||
$PAGE->requires->js_init_call('M.mod_survey.init', $checkarray, true, $module);
|
||||
$PAGE->requires->js_call_amd('mod_survey/validation', 'ensureRadiosChosen', array('surveyform', $questions));
|
||||
|
||||
echo '<br />';
|
||||
echo '<input type="submit" class="btn btn-primary" value="'.get_string("clicktocontinue", "survey").'" />';
|
||||
|
Loading…
x
Reference in New Issue
Block a user