Skip to content

Commit

Permalink
MDL-57697 survery: migrate validation script from yui2
Browse files Browse the repository at this point in the history
Just a modernisation of the existing yui2 code to AMD/jQuery and away from alert();
  • Loading branch information
danpoltawski committed Feb 8, 2017
1 parent f993134 commit 3f03758
Show file tree
Hide file tree
Showing 4 changed files with 76 additions and 40 deletions.
1 change: 1 addition & 0 deletions mod/survey/amd/build/validation.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

71 changes: 71 additions & 0 deletions mod/survey/amd/src/validation.js
Original file line number Diff line number Diff line change
@@ -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 <[email protected]>
* @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;
});
}
};
});
27 changes: 0 additions & 27 deletions mod/survey/survey.js

This file was deleted.

17 changes: 4 additions & 13 deletions mod/survey/view.php
Original file line number Diff line number Diff line change
Expand Up @@ -175,20 +175,11 @@
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").'" />';
Expand Down

0 comments on commit 3f03758

Please sign in to comment.