mirror of
https://github.com/moodle/moodle.git
synced 2025-04-19 07:25:30 +02:00
MDL-36404 gradingform_rubric: Accessibility fixes rubric grading
This commit is contained in:
parent
e8d5100212
commit
e9088e28ac
@ -50,8 +50,8 @@ class gradingform_rubric_editrubric extends moodleform {
|
||||
$form->setType('returnurl', PARAM_LOCALURL);
|
||||
|
||||
// name
|
||||
$form->addElement('text', 'name', get_string('name', 'gradingform_rubric'), array('size'=>52));
|
||||
$form->addRule('name', get_string('required'), 'required');
|
||||
$form->addElement('text', 'name', get_string('name', 'gradingform_rubric'), array('size' => 52, 'aria-required' => 'true'));
|
||||
$form->addRule('name', get_string('required'), 'required', null, 'client');
|
||||
$form->setType('name', PARAM_TEXT);
|
||||
|
||||
// description
|
||||
|
@ -5,6 +5,10 @@ M.gradingform_rubric = {};
|
||||
*/
|
||||
M.gradingform_rubric.init = function(Y, options) {
|
||||
Y.on('click', M.gradingform_rubric.levelclick, '#rubric-'+options.name+' .level', null, Y, options.name);
|
||||
// Capture also space and enter keypress.
|
||||
Y.on('key', M.gradingform_rubric.levelclick, '#rubric-' + options.name + ' .level', 'space', Y, options.name);
|
||||
Y.on('key', M.gradingform_rubric.levelclick, '#rubric-' + options.name + ' .level', 'enter', Y, options.name);
|
||||
|
||||
Y.all('#rubric-'+options.name+' .radio').setStyle('display', 'none')
|
||||
Y.all('#rubric-'+options.name+' .level').each(function (node) {
|
||||
if (node.one('input[type=radio]').get('checked')) {
|
||||
@ -19,12 +23,19 @@ M.gradingform_rubric.levelclick = function(e, Y, name) {
|
||||
if (!el) return
|
||||
e.preventDefault();
|
||||
el.siblings().removeClass('checked');
|
||||
|
||||
// Set aria-checked attribute for siblings to false.
|
||||
el.siblings().setAttribute('aria-checked', 'false');
|
||||
chb = el.one('input[type=radio]')
|
||||
if (!chb.get('checked')) {
|
||||
chb.set('checked', true)
|
||||
el.addClass('checked')
|
||||
// Set aria-checked attribute to true if checked.
|
||||
el.setAttribute('aria-checked', 'true');
|
||||
} else {
|
||||
el.removeClass('checked');
|
||||
// Set aria-checked attribute to false if unchecked.
|
||||
el.setAttribute('aria-checked', 'false');
|
||||
el.get('parentNode').all('input[type=radio]').set('checked', false)
|
||||
}
|
||||
}
|
||||
|
@ -143,9 +143,11 @@ M.gradingform_rubriceditor.buttonclick = function(e, confirmed) {
|
||||
elements_str = '#rubric-'+name+' .criterion'
|
||||
}
|
||||
// prepare the id of the next inserted level or criterion
|
||||
var newlevid = 0;
|
||||
var newid = 0;
|
||||
if (action == 'addcriterion' || action == 'addlevel' || action == 'duplicate' ) {
|
||||
var newid = M.gradingform_rubriceditor.calculatenewid('#rubric-'+name+' .criterion')
|
||||
var newlevid = M.gradingform_rubriceditor.calculatenewid('#rubric-'+name+' .level')
|
||||
newid = M.gradingform_rubriceditor.calculatenewid('#rubric-'+name+' .criterion');
|
||||
newlevid = M.gradingform_rubriceditor.calculatenewid('#rubric-'+name+' .level');
|
||||
}
|
||||
var dialog_options = {
|
||||
'scope' : this,
|
||||
@ -164,7 +166,10 @@ M.gradingform_rubriceditor.buttonclick = function(e, confirmed) {
|
||||
for (levidx;levidx<3;levidx++) levelsscores[levidx] = parseFloat(levelsscores[levidx-1])+1
|
||||
var levelsstr = '';
|
||||
for (levidx=0;levidx<levelsscores.length;levidx++) {
|
||||
levelsstr += M.gradingform_rubriceditor.templates[name]['level'].replace(/\{LEVEL-id\}/g, 'NEWID'+(newlevid+levidx)).replace(/\{LEVEL-score\}/g, levelsscores[levidx])
|
||||
levelsstr += M.gradingform_rubriceditor.templates[name].level.
|
||||
replace(/\{LEVEL-id\}/g, 'NEWID'+(newlevid+levidx)).
|
||||
replace(/\{LEVEL-score\}/g, levelsscores[levidx]).
|
||||
replace(/\{LEVEL-index\}/g, levidx + 1);
|
||||
}
|
||||
var newcriterion = M.gradingform_rubriceditor.templates[name]['criterion'].replace(/\{LEVELS\}/, levelsstr)
|
||||
parentel.append(newcriterion.replace(/\{CRITERION-id\}/g, 'NEWID'+newid).replace(/\{.+?\}/g, ''))
|
||||
@ -172,14 +177,23 @@ M.gradingform_rubriceditor.buttonclick = function(e, confirmed) {
|
||||
M.gradingform_rubriceditor.addhandlers();
|
||||
M.gradingform_rubriceditor.disablealleditors()
|
||||
M.gradingform_rubriceditor.assignclasses(elements_str)
|
||||
M.gradingform_rubriceditor.editmode(Y.one('#rubric-'+name+' #'+name+'-criteria-NEWID'+newid+'-description'),true)
|
||||
M.gradingform_rubriceditor.editmode(
|
||||
Y.one('#rubric-' + name + ' #' + name + '-criteria-NEWID' + newid + '-description-cell'), true
|
||||
);
|
||||
} else if (chunks.length == 5 && action == 'addlevel') {
|
||||
// ADD NEW LEVEL
|
||||
var newscore = 0;
|
||||
parent = Y.one('#'+name+'-criteria-'+chunks[2]+'-levels')
|
||||
parent.all('.level').each(function (node) { newscore = Math.max(newscore, parseFloat(node.one('.score input[type=text]').get('value'))+1) })
|
||||
var levelIndex = 1;
|
||||
parent.all('.level').each(function (node) {
|
||||
newscore = Math.max(newscore, parseFloat(node.one('.score input[type=text]').get('value')) + 1);
|
||||
levelIndex++;
|
||||
});
|
||||
var newlevel = M.gradingform_rubriceditor.templates[name]['level'].
|
||||
replace(/\{CRITERION-id\}/g, chunks[2]).replace(/\{LEVEL-id\}/g, 'NEWID'+newlevid).replace(/\{LEVEL-score\}/g, newscore).replace(/\{.+?\}/g, '')
|
||||
replace(/\{CRITERION-id\}/g, chunks[2]).replace(/\{LEVEL-id\}/g, 'NEWID'+newlevid).
|
||||
replace(/\{LEVEL-score\}/g, newscore).
|
||||
replace(/\{LEVEL-index\}/g, levelIndex).
|
||||
replace(/\{.+?\}/g, '');
|
||||
parent.append(newlevel)
|
||||
M.gradingform_rubriceditor.addhandlers();
|
||||
M.gradingform_rubriceditor.disablealleditors()
|
||||
@ -238,7 +252,7 @@ M.gradingform_rubriceditor.buttonclick = function(e, confirmed) {
|
||||
M.gradingform_rubriceditor.addhandlers();
|
||||
M.gradingform_rubriceditor.disablealleditors();
|
||||
M.gradingform_rubriceditor.assignclasses(elements_str);
|
||||
M.gradingform_rubriceditor.editmode(Y.one('#rubric-'+name+' #'+name+'-criteria-NEWID'+newid+'-description'),true);
|
||||
M.gradingform_rubriceditor.editmode(Y.one('#rubric-'+name+' #'+name+'-criteria-NEWID'+newid+'-description-cell'),true);
|
||||
} else if (chunks.length == 6 && action == 'delete') {
|
||||
// DELETE LEVEL
|
||||
if (confirmed) {
|
||||
|
@ -29,12 +29,14 @@ $string['alwaysshowdefinition'] = 'Allow users to preview rubric used in the mod
|
||||
$string['backtoediting'] = 'Back to editing';
|
||||
$string['confirmdeletecriterion'] = 'Are you sure you want to delete this criterion?';
|
||||
$string['confirmdeletelevel'] = 'Are you sure you want to delete this level?';
|
||||
$string['criterion'] = 'Criterion {$a}';
|
||||
$string['criterionaddlevel'] = 'Add level';
|
||||
$string['criteriondelete'] = 'Delete criterion';
|
||||
$string['criterionduplicate'] = 'Duplicate criterion';
|
||||
$string['criterionempty'] = 'Click to edit criterion';
|
||||
$string['criterionmovedown'] = 'Move down';
|
||||
$string['criterionmoveup'] = 'Move up';
|
||||
$string['criterionremark'] = 'Remark for criterion {$a->description}: {$a->remark}';
|
||||
$string['definerubric'] = 'Define rubric';
|
||||
$string['description'] = 'Description';
|
||||
$string['enableremarks'] = 'Allow grader to add text remarks for each criterion';
|
||||
@ -45,8 +47,11 @@ $string['err_nodescription'] = 'Criterion description can not be empty';
|
||||
$string['err_scoreformat'] = 'Number of points for each level must be a valid non-negative number';
|
||||
$string['err_totalscore'] = 'Maximum number of points possible when graded by the rubric must be more than zero';
|
||||
$string['gradingof'] = '{$a} grading';
|
||||
$string['leveldelete'] = 'Delete level';
|
||||
$string['level'] = 'Level {$a->definition}, {$a->score} points.';
|
||||
$string['leveldelete'] = 'Delete level {$a}';
|
||||
$string['leveldefinition'] = 'Level {$a} definition';
|
||||
$string['levelempty'] = 'Click to edit level';
|
||||
$string['levelsgroup'] = 'Levels group';
|
||||
$string['name'] = 'Name';
|
||||
$string['needregrademessage'] = 'The rubric definition was changed after this student had been graded. The student can not see this rubric until you check the rubric and update the grade.';
|
||||
$string['pluginname'] = 'Rubric';
|
||||
@ -68,6 +73,7 @@ $string['rubricstatus'] = 'Current rubric status';
|
||||
$string['save'] = 'Save';
|
||||
$string['saverubric'] = 'Save rubric and make it ready';
|
||||
$string['saverubricdraft'] = 'Save as draft';
|
||||
$string['scoreinputforlevel'] = 'Score input for level {$a}';
|
||||
$string['scorepostfix'] = '{$a}points';
|
||||
$string['showdescriptionstudent'] = 'Display rubric description to those being graded';
|
||||
$string['showdescriptionteacher'] = 'Display rubric description during evaluation';
|
||||
|
@ -927,7 +927,8 @@ class gradingform_rubric_instance extends gradingform_instance {
|
||||
}
|
||||
$currentinstance = $this->get_current_instance();
|
||||
if ($currentinstance && $currentinstance->get_status() == gradingform_instance::INSTANCE_STATUS_NEEDUPDATE) {
|
||||
$html .= html_writer::tag('div', get_string('needregrademessage', 'gradingform_rubric'), array('class' => 'gradingform_rubric-regrade'));
|
||||
$html .= html_writer::div(get_string('needregrademessage', 'gradingform_rubric'), 'gradingform_rubric-regrade',
|
||||
array('role' => 'alert'));
|
||||
}
|
||||
$haschanges = false;
|
||||
if ($currentinstance) {
|
||||
|
@ -74,12 +74,22 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
foreach (array('moveup', 'delete', 'movedown', 'duplicate') as $key) {
|
||||
$value = get_string('criterion'.$key, 'gradingform_rubric');
|
||||
$button = html_writer::empty_tag('input', array('type' => 'submit', 'name' => '{NAME}[criteria][{CRITERION-id}]['.$key.']',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-'.$key, 'value' => $value, 'title' => $value, 'tabindex' => -1));
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-'.$key, 'value' => $value));
|
||||
$criteriontemplate .= html_writer::tag('div', $button, array('class' => $key));
|
||||
}
|
||||
$criteriontemplate .= html_writer::empty_tag('input', array('type' => 'hidden',
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][sortorder]',
|
||||
'value' => $criterion['sortorder']));
|
||||
$criteriontemplate .= html_writer::end_tag('td'); // .controls
|
||||
$criteriontemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][sortorder]', 'value' => $criterion['sortorder']));
|
||||
$description = html_writer::tag('textarea', s($criterion['description']), array('name' => '{NAME}[criteria][{CRITERION-id}][description]', 'cols' => '10', 'rows' => '5'));
|
||||
|
||||
// Criterion description text area.
|
||||
$descriptiontextareaparams = array(
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][description]',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-description',
|
||||
'aria-label' => get_string('criterion', 'gradingform_rubric', ''),
|
||||
'cols' => '10', 'rows' => '5'
|
||||
);
|
||||
$description = html_writer::tag('textarea', s($criterion['description']), $descriptiontextareaparams);
|
||||
} else {
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FROZEN) {
|
||||
$criteriontemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][sortorder]', 'value' => $criterion['sortorder']));
|
||||
@ -91,8 +101,35 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
if (isset($criterion['error_description'])) {
|
||||
$descriptionclass .= ' error';
|
||||
}
|
||||
$criteriontemplate .= html_writer::tag('td', $description, array('class' => $descriptionclass, 'id' => '{NAME}-criteria-{CRITERION-id}-description'));
|
||||
$levelsstrtable = html_writer::tag('table', html_writer::tag('tr', $levelsstr, array('id' => '{NAME}-criteria-{CRITERION-id}-levels')));
|
||||
|
||||
// Description cell params.
|
||||
$descriptiontdparams = array(
|
||||
'class' => $descriptionclass,
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-description-cell'
|
||||
);
|
||||
if ($mode != gradingform_rubric_controller::DISPLAY_EDIT_FULL &&
|
||||
$mode != gradingform_rubric_controller::DISPLAY_EDIT_FROZEN) {
|
||||
// Set description's cell as tab-focusable.
|
||||
$descriptiontdparams['tabindex'] = '0';
|
||||
// Set label for the criterion cell.
|
||||
$descriptiontdparams['aria-label'] = get_string('criterion', 'gradingform_rubric', s($criterion['description']));
|
||||
}
|
||||
|
||||
// Description cell.
|
||||
$criteriontemplate .= html_writer::tag('td', $description, $descriptiontdparams);
|
||||
|
||||
// Levels table.
|
||||
$levelsrowparams = array('id' => '{NAME}-criteria-{CRITERION-id}-levels');
|
||||
if ($mode != gradingform_rubric_controller::DISPLAY_EDIT_FULL) {
|
||||
$levelsrowparams['role'] = 'radiogroup';
|
||||
}
|
||||
$levelsrow = html_writer::tag('tr', $levelsstr, $levelsrowparams);
|
||||
|
||||
$levelstableparams = array(
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-table',
|
||||
'aria-label' => get_string('levelsgroup', 'gradingform_rubric')
|
||||
);
|
||||
$levelsstrtable = html_writer::tag('table', $levelsrow, $levelstableparams);
|
||||
$levelsclass = 'levels';
|
||||
if (isset($criterion['error_levels'])) {
|
||||
$levelsclass .= ' error';
|
||||
@ -101,7 +138,7 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FULL) {
|
||||
$value = get_string('criterionaddlevel', 'gradingform_rubric');
|
||||
$button = html_writer::empty_tag('input', array('type' => 'submit', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][addlevel]',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-addlevel', 'value' => $value, 'title' => $value));
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-addlevel', 'value' => $value));
|
||||
$criteriontemplate .= html_writer::tag('td', $button, array('class' => 'addlevel'));
|
||||
}
|
||||
$displayremark = ($options['enableremarks'] && ($mode != gradingform_rubric_controller::DISPLAY_VIEW || $options['showremarksstudent']));
|
||||
@ -110,13 +147,34 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
if (isset($value['remark'])) {
|
||||
$currentremark = $value['remark'];
|
||||
}
|
||||
|
||||
// Label for criterion remark.
|
||||
$remarkinfo = new stdClass();
|
||||
$remarkinfo->description = s($criterion['description']);
|
||||
$remarkinfo->remark = $currentremark;
|
||||
$remarklabeltext = get_string('criterionremark', 'gradingform_rubric', $remarkinfo);
|
||||
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EVAL) {
|
||||
$input = html_writer::tag('textarea', s($currentremark), array('name' => '{NAME}[criteria][{CRITERION-id}][remark]', 'cols' => '10', 'rows' => '5'));
|
||||
// HTML parameters for remarks text area.
|
||||
$remarkparams = array(
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][remark]',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-remark',
|
||||
'cols' => '10', 'rows' => '5',
|
||||
'aria-label' => $remarklabeltext
|
||||
);
|
||||
$input = html_writer::tag('textarea', s($currentremark), $remarkparams);
|
||||
$criteriontemplate .= html_writer::tag('td', $input, array('class' => 'remark'));
|
||||
} else if ($mode == gradingform_rubric_controller::DISPLAY_EVAL_FROZEN) {
|
||||
$criteriontemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][remark]', 'value' => $currentremark));
|
||||
}else if ($mode == gradingform_rubric_controller::DISPLAY_REVIEW || $mode == gradingform_rubric_controller::DISPLAY_VIEW) {
|
||||
$criteriontemplate .= html_writer::tag('td', s($currentremark), array('class' => 'remark'));
|
||||
// HTML parameters for remarks cell.
|
||||
$remarkparams = array(
|
||||
'class' => 'remark',
|
||||
'tabindex' => '0',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-remark',
|
||||
'aria-label' => $remarklabeltext
|
||||
);
|
||||
$criteriontemplate .= html_writer::tag('td', s($currentremark), $remarkparams);
|
||||
}
|
||||
}
|
||||
$criteriontemplate .= html_writer::end_tag('tr'); // .criterion
|
||||
@ -153,7 +211,7 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
if (!isset($level['id'])) {
|
||||
$level = array('id' => '{LEVEL-id}', 'definition' => '{LEVEL-definition}', 'score' => '{LEVEL-score}', 'class' => '{LEVEL-class}', 'checked' => false);
|
||||
} else {
|
||||
foreach (array('score', 'definition', 'class', 'checked') as $key) {
|
||||
foreach (array('score', 'definition', 'class', 'checked', 'index') as $key) {
|
||||
// set missing array elements to empty strings to avoid warnings
|
||||
if (!array_key_exists($key, $level)) {
|
||||
$level[$key] = '';
|
||||
@ -161,17 +219,37 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
}
|
||||
}
|
||||
|
||||
// Get level index.
|
||||
$levelindex = isset($level['index']) ? $level['index'] : '{LEVEL-index}';
|
||||
|
||||
// Template for one level within one criterion
|
||||
$tdattributes = array('id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}', 'class' => 'level'. $level['class']);
|
||||
$tdattributes = array(
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}',
|
||||
'class' => 'level' . $level['class']
|
||||
);
|
||||
if (isset($level['tdwidth'])) {
|
||||
$tdattributes['width'] = round($level['tdwidth']).'%';
|
||||
}
|
||||
$leveltemplate = html_writer::start_tag('td', $tdattributes);
|
||||
$leveltemplate .= html_writer::start_tag('div', array('class' => 'level-wrapper'));
|
||||
|
||||
$leveltemplate = html_writer::start_tag('div', array('class' => 'level-wrapper'));
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FULL) {
|
||||
$definition = html_writer::tag('textarea', s($level['definition']), array('name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][definition]', 'cols' => '10', 'rows' => '4'));
|
||||
$score = html_writer::label(get_string('criterionempty', 'gradingform_rubric'), '{NAME}criteria{CRITERION-id}levels{LEVEL-id}', false, array('class' => 'accesshide'));
|
||||
$score .= html_writer::empty_tag('input', array('type' => 'text','id' => '{NAME}criteria{CRITERION-id}levels{LEVEL-id}', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][score]', 'size' => '3', 'value' => $level['score']));
|
||||
$definitionparams = array(
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-definition',
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][definition]',
|
||||
'aria-label' => get_string('leveldefinition', 'gradingform_rubric', $levelindex),
|
||||
'cols' => '10', 'rows' => '4'
|
||||
);
|
||||
$definition = html_writer::tag('textarea', s($level['definition']), $definitionparams);
|
||||
|
||||
$scoreparams = array(
|
||||
'type' => 'text',
|
||||
'id' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][score]',
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][score]',
|
||||
'aria-label' => get_string('scoreinputforlevel', 'gradingform_rubric', $levelindex),
|
||||
'size' => '3',
|
||||
'value' => $level['score']
|
||||
);
|
||||
$score = html_writer::empty_tag('input', $scoreparams);
|
||||
} else {
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FROZEN) {
|
||||
$leveltemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][definition]', 'value' => $level['definition']));
|
||||
@ -181,19 +259,58 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
$score = $level['score'];
|
||||
}
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EVAL) {
|
||||
$input = html_writer::empty_tag('input', array('type' => 'radio', 'name' => '{NAME}[criteria][{CRITERION-id}][levelid]', 'value' => $level['id']) +
|
||||
($level['checked'] ? array('checked' => 'checked') : array()));
|
||||
$leveltemplate .= html_writer::tag('div', $input, array('class' => 'radio'));
|
||||
$levelradioparams = array(
|
||||
'type' => 'radio',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-definition',
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][levelid]',
|
||||
'value' => $level['id']
|
||||
);
|
||||
if ($level['checked']) {
|
||||
$levelradioparams['checked'] = 'checked';
|
||||
}
|
||||
$input = html_writer::empty_tag('input', $levelradioparams);
|
||||
$leveltemplate .= html_writer::div($input, 'radio');
|
||||
}
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EVAL_FROZEN && $level['checked']) {
|
||||
$leveltemplate .= html_writer::empty_tag('input', array('type' => 'hidden', 'name' => '{NAME}[criteria][{CRITERION-id}][levelid]', 'value' => $level['id']));
|
||||
$leveltemplate .= html_writer::empty_tag('input',
|
||||
array(
|
||||
'type' => 'hidden',
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][levelid]',
|
||||
'value' => $level['id']
|
||||
)
|
||||
);
|
||||
}
|
||||
$score = html_writer::tag('span', $score, array('id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-score', 'class' => 'scorevalue'));
|
||||
$definitionclass = 'definition';
|
||||
if (isset($level['error_definition'])) {
|
||||
$definitionclass .= ' error';
|
||||
}
|
||||
$leveltemplate .= html_writer::tag('div', $definition, array('class' => $definitionclass, 'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-definition'));
|
||||
|
||||
if ($mode != gradingform_rubric_controller::DISPLAY_EDIT_FULL &&
|
||||
$mode != gradingform_rubric_controller::DISPLAY_EDIT_FROZEN) {
|
||||
|
||||
$tdattributes['tabindex'] = '0';
|
||||
$levelinfo = new stdClass();
|
||||
$levelinfo->definition = s($level['definition']);
|
||||
$levelinfo->score = $level['score'];
|
||||
$tdattributes['aria-label'] = get_string('level', 'gradingform_rubric', $levelinfo);
|
||||
|
||||
if ($mode != gradingform_rubric_controller::DISPLAY_PREVIEW &&
|
||||
$mode != gradingform_rubric_controller::DISPLAY_PREVIEW_GRADED) {
|
||||
// Add role of radio button to level cell if not in edit and preview mode.
|
||||
$tdattributes['role'] = 'radio';
|
||||
if ($level['checked']) {
|
||||
$tdattributes['aria-checked'] = 'true';
|
||||
} else {
|
||||
$tdattributes['aria-checked'] = 'false';
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$leveltemplateparams = array(
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-definition-container'
|
||||
);
|
||||
$leveltemplate .= html_writer::div($definition, $definitionclass, $leveltemplateparams);
|
||||
$displayscore = true;
|
||||
if (!$options['showscoreteacher'] && in_array($mode, array(gradingform_rubric_controller::DISPLAY_EVAL, gradingform_rubric_controller::DISPLAY_EVAL_FROZEN, gradingform_rubric_controller::DISPLAY_REVIEW))) {
|
||||
$displayscore = false;
|
||||
@ -209,12 +326,19 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
$leveltemplate .= html_writer::tag('div', get_string('scorepostfix', 'gradingform_rubric', $score), array('class' => $scoreclass));
|
||||
}
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FULL) {
|
||||
$value = get_string('leveldelete', 'gradingform_rubric');
|
||||
$button = html_writer::empty_tag('input', array('type' => 'submit', 'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][delete]', 'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-delete', 'value' => $value, 'title' => $value, 'tabindex' => -1));
|
||||
$value = get_string('leveldelete', 'gradingform_rubric', $levelindex);
|
||||
$buttonparams = array(
|
||||
'type' => 'submit',
|
||||
'name' => '{NAME}[criteria][{CRITERION-id}][levels][{LEVEL-id}][delete]',
|
||||
'id' => '{NAME}-criteria-{CRITERION-id}-levels-{LEVEL-id}-delete',
|
||||
'value' => $value
|
||||
);
|
||||
$button = html_writer::empty_tag('input', $buttonparams);
|
||||
$leveltemplate .= html_writer::tag('div', $button, array('class' => 'delete'));
|
||||
}
|
||||
$leveltemplate .= html_writer::end_tag('div'); // .level-wrapper
|
||||
$leveltemplate .= html_writer::end_tag('td'); // .level
|
||||
|
||||
$leveltemplate = html_writer::tag('td', $leveltemplate, $tdattributes); // The .level cell.
|
||||
|
||||
$leveltemplate = str_replace('{NAME}', $elementname, $leveltemplate);
|
||||
$leveltemplate = str_replace('{CRITERION-id}', $criterionid, $leveltemplate);
|
||||
@ -262,10 +386,23 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
}
|
||||
|
||||
$rubrictemplate = html_writer::start_tag('div', array('id' => 'rubric-{NAME}', 'class' => 'clearfix gradingform_rubric'.$classsuffix));
|
||||
$rubrictemplate .= html_writer::tag('table', $criteriastr, array('class' => 'criteria', 'id' => '{NAME}-criteria'));
|
||||
|
||||
// Rubric table.
|
||||
$rubrictableparams = array(
|
||||
'class' => 'criteria',
|
||||
'id' => '{NAME}-criteria',
|
||||
'aria-label' => get_string('rubric', 'gradingform_rubric'));
|
||||
$rubrictable = html_writer::tag('table', $criteriastr, $rubrictableparams);
|
||||
$rubrictemplate .= $rubrictable;
|
||||
if ($mode == gradingform_rubric_controller::DISPLAY_EDIT_FULL) {
|
||||
$value = get_string('addcriterion', 'gradingform_rubric');
|
||||
$input = html_writer::empty_tag('input', array('type' => 'submit', 'name' => '{NAME}[criteria][addcriterion]', 'id' => '{NAME}-criteria-addcriterion', 'value' => $value, 'title' => $value));
|
||||
$criteriainputparams = array(
|
||||
'type' => 'submit',
|
||||
'name' => '{NAME}[criteria][addcriterion]',
|
||||
'id' => '{NAME}-criteria-addcriterion',
|
||||
'value' => $value
|
||||
);
|
||||
$input = html_writer::empty_tag('input', $criteriainputparams);
|
||||
$rubrictemplate .= html_writer::tag('div', $input, array('class' => 'addcriterion'));
|
||||
}
|
||||
$rubrictemplate .= $this->rubric_edit_options($mode, $options);
|
||||
@ -364,6 +501,7 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
} else {
|
||||
$criterionvalue = null;
|
||||
}
|
||||
$index = 1;
|
||||
foreach ($criterion['levels'] as $levelid => $level) {
|
||||
$level['id'] = $levelid;
|
||||
$level['class'] = $this->get_css_class_suffix($levelcnt++, sizeof($criterion['levels']) -1);
|
||||
@ -376,7 +514,9 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
$level['class'] .= ' currentchecked';
|
||||
}
|
||||
$level['tdwidth'] = 100/count($criterion['levels']);
|
||||
$level['index'] = $index;
|
||||
$levelsstr .= $this->level_template($mode, $options, $elementname, $id, $level);
|
||||
$index++;
|
||||
}
|
||||
$criteriastr .= $this->criterion_template($mode, $options, $elementname, $criterion, $levelsstr, $criterionvalue);
|
||||
}
|
||||
@ -462,7 +602,7 @@ class gradingform_rubric_renderer extends plugin_renderer_base {
|
||||
* @return string
|
||||
*/
|
||||
public function display_regrade_confirmation($elementname, $changelevel, $value) {
|
||||
$html = html_writer::start_tag('div', array('class' => 'gradingform_rubric-regrade'));
|
||||
$html = html_writer::start_tag('div', array('class' => 'gradingform_rubric-regrade', 'role' => 'alert'));
|
||||
if ($changelevel<=2) {
|
||||
$html .= html_writer::label(get_string('regrademessage1', 'gradingform_rubric'), 'menu' . $elementname . 'regrade');
|
||||
$selectoptions = array(
|
||||
|
@ -119,7 +119,7 @@ class MoodleQuickForm_rubriceditor extends HTML_QuickForm_input {
|
||||
'requires' => array('base', 'dom', 'event', 'event-touch', 'escape'),
|
||||
'strings' => array(array('confirmdeletecriterion', 'gradingform_rubric'), array('confirmdeletelevel', 'gradingform_rubric'),
|
||||
array('criterionempty', 'gradingform_rubric'), array('levelempty', 'gradingform_rubric')
|
||||
));
|
||||
));
|
||||
$PAGE->requires->js_init_call('M.gradingform_rubriceditor.init', array(
|
||||
array('name' => $this->getName(),
|
||||
'criteriontemplate' => $renderer->criterion_template($mode, $data['options'], $this->getName()),
|
||||
@ -141,7 +141,7 @@ class MoodleQuickForm_rubriceditor extends HTML_QuickForm_input {
|
||||
$html .= $renderer->display_regrade_confirmation($this->getName(), $this->regradeconfirmation, $data['regrade']);
|
||||
}
|
||||
if ($this->validationerrors) {
|
||||
$html .= $renderer->notification($this->validationerrors, 'error');
|
||||
$html .= html_writer::div($renderer->notification($this->validationerrors, 'error'), '', array('role' => 'alert'));
|
||||
}
|
||||
$html .= $renderer->display_rubric($data['criteria'], $data['options'], $mode, $this->getName());
|
||||
return $html;
|
||||
|
@ -81,7 +81,7 @@ class behat_gradingform_rubric extends behat_base {
|
||||
$addcriterionbutton = $this->find_button(get_string('addcriterion', 'gradingform_rubric'));
|
||||
|
||||
// Cleaning the current ones.
|
||||
$deletebuttons = $this->find_all('css', "input[title='" . get_string('criteriondelete', 'gradingform_rubric') . "']");
|
||||
$deletebuttons = $this->find_all('css', "input[value='" . get_string('criteriondelete', 'gradingform_rubric') . "']");
|
||||
if ($deletebuttons) {
|
||||
|
||||
// We should reverse the deletebuttons because otherwise once we delete
|
||||
@ -100,6 +100,12 @@ class behat_gradingform_rubric extends behat_base {
|
||||
|
||||
if ($criteria) {
|
||||
foreach ($criteria as $criterionit => $criterion) {
|
||||
// Unset empty levels in criterion.
|
||||
foreach ($criterion as $i => $value) {
|
||||
if (empty($value)) {
|
||||
unset($criterion[$i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Checking the number of cells.
|
||||
if (count($criterion) % 2 === 0) {
|
||||
|
@ -35,9 +35,9 @@ Feature: Rubrics can be created and edited
|
||||
| TMP Criterion 4 | TMP Level 41 | 41 | TMP Level 42 | 42 |
|
||||
# Checking that only the last ones are saved.
|
||||
And I define the following rubric:
|
||||
| Criterion 1 | Level 11 | 1 | Level 12 | 20 | Level 13 | 40 | Level 14 | 50 |
|
||||
| Criterion 2 | Level 21 | 10 | Level 22 | 20 | Level 23 | 30 |
|
||||
| Criterion 3 | Level 31 | 5 | Level 32 | 20 |
|
||||
| Criterion 1 | Level 11 | 1 | Level 12 | 20 | Level 13 | 40 | Level 14 | 50 |
|
||||
| Criterion 2 | Level 21 | 10 | Level 22 | 20 | Level 23 | 30 | | |
|
||||
| Criterion 3 | Level 31 | 5 | Level 32 | 20 | | | | |
|
||||
And I press "Save as draft"
|
||||
And I go to "Test assignment 1 name" advanced grading definition page
|
||||
And I click on "Move down" "button" in the "Criterion 1" "table_row"
|
||||
|
@ -28,7 +28,7 @@ Feature: Reuse my rubrics in other activities
|
||||
And I define the following rubric:
|
||||
| Criterion 1 | Level 11 | 11 | Level 12 | 12 | Level 3 | 13 |
|
||||
| Criterion 2 | Level 21 | 21 | Level 22 | 22 | Level 3 | 23 |
|
||||
| Criterion 3 | Level 31 | 31 | Level 32 | 32 |
|
||||
| Criterion 3 | Level 31 | 31 | Level 32 | 32 | | |
|
||||
And I press "Save rubric and make it ready"
|
||||
And I follow "Course 1"
|
||||
When I add a "Assignment" to section "1" and I fill the form with:
|
||||
@ -40,7 +40,6 @@ Feature: Reuse my rubrics in other activities
|
||||
And I should see "Criterion 1"
|
||||
And I should see "Criterion 2"
|
||||
And I should see "Criterion 3"
|
||||
And I follow "C1"
|
||||
And I go to "Test assignment 1 name" advanced grading definition page
|
||||
And I should see "Criterion 1"
|
||||
And I should see "Criterion 2"
|
||||
|
Loading…
x
Reference in New Issue
Block a user