3 M.mod_assign.init_tree = function(Y, expand_all, htmlid) {
4 var treeElement = Y.one('#'+htmlid);
6 Y.use('yui2-treeview', 'node-event-simulate', function(Y) {
7 var tree = new Y.YUI2.widget.TreeView(htmlid);
9 tree.subscribe("clickEvent", function(node, event) {
10 // We want normal clicking which redirects to url.
14 tree.subscribe("enterKeyPressed", function(node) {
15 // We want keyboard activation to trigger a click on the first link.
16 Y.one(node.getContentEl()).one('a').simulate('click');
28 M.mod_assign.init_grading_table = function(Y) {
29 Y.use('node', function(Y) {
30 const checkboxes = Y.all('td.c0 input');
32 checkboxes.each(function(node) {
33 node.on('change', function(e) {
34 rowelement = e.currentTarget.get('parentNode').get('parentNode');
35 if (e.currentTarget.get('checked')) {
36 rowelement.removeClass('unselectedrow');
37 rowelement.addClass('selectedrow');
39 rowelement.removeClass('selectedrow');
40 rowelement.addClass('unselectedrow');
44 rowelement = node.get('parentNode').get('parentNode');
45 if (node.get('checked')) {
46 rowelement.removeClass('unselectedrow');
47 rowelement.addClass('selectedrow');
49 rowelement.removeClass('selectedrow');
50 rowelement.addClass('unselectedrow');
54 const selectall = Y.one('th.c0 input');
56 selectall.on('change', function(e) {
57 Y.all('td.c0 input[type="checkbox"]').each(function(node) {
58 rowelement = node.get('parentNode').get('parentNode');
59 if (e.currentTarget.get('checked')) {
60 node.set('checked', true);
61 rowelement.removeClass('unselectedrow');
62 rowelement.addClass('selectedrow');
64 node.set('checked', false);
65 rowelement.removeClass('selectedrow');
66 rowelement.addClass('unselectedrow');
72 const batchform = Y.one('form.gradingbatchoperationsform');
74 batchform.on('submit', function(e) {
75 M.util.js_pending('mod_assign/module.js:batch:submit');
76 let selectedusers = [];
77 checkboxes.each(function(node) {
78 if (node.get('checked')) {
79 selectedusers.push(node.get('value'));
83 const operation = Y.one('#id_operation');
84 const usersinput = Y.one('input.selectedusers');
85 usersinput.set('value', selectedusers.join(','));
86 if (selectedusers.length === 0) {
87 alert(M.util.get_string('nousersselected', 'assign'));
90 let action = operation.get('value');
91 const prefix = 'plugingradingbatchoperation_';
92 let confirmmessage = false;
93 if (action.indexOf(prefix) === 0) {
94 const pluginaction = action.slice(prefix.length);
95 const plugin = pluginaction.split('_')[0];
96 action = pluginaction.slice(plugin.length + 1);
97 confirmmessage = M.util.get_string('batchoperationconfirm' + action, 'assignfeedback_' + plugin);
98 } else if (action === 'message') {
100 require(['core_message/message_send_bulk'], function(BulkSender) {
101 BulkSender.showModal(selectedusers, function() {
102 document.getElementById('page-header').scrollIntoView();
106 confirmmessage = M.util.get_string('batchoperationconfirm' + operation.get('value'), 'assign');
108 // Complete here the action (js_complete event) when we send a bulk message, or we have a confirmation message.
109 // When the confirmation dialogue is completed, the event is fired.
110 if (action === 'message' || confirmmessage !== false && !confirm(confirmmessage)) {
111 M.util.js_complete('mod_assign/module.js:batch:submit');
114 // Note: Do not js_complete. The page being reloaded will empty it.
119 var quickgrade = Y.all('.gradingtable .quickgrade');
120 quickgrade.each(function(quick) {
121 quick.on('change', function(e) {
122 this.get('parentNode').addClass('quickgrademodified');
128 M.mod_assign.init_grading_options = function(Y) {
129 Y.use('node', function(Y) {
130 var paginationelement = Y.one('#id_perpage');
131 paginationelement.on('change', function(e) {
132 Y.one('form.gradingoptionsform').submit();
134 var filterelement = Y.one('#id_filter');
136 filterelement.on('change', function(e) {
137 Y.one('form.gradingoptionsform').submit();
140 var markerfilterelement = Y.one('#id_markerfilter');
141 if (markerfilterelement) {
142 markerfilterelement.on('change', function(e) {
143 Y.one('form.gradingoptionsform').submit();
146 var workflowfilterelement = Y.one('#id_workflowfilter');
147 if (workflowfilterelement) {
148 workflowfilterelement.on('change', function(e) {
149 Y.one('form.gradingoptionsform').submit();
152 var quickgradingelement = Y.one('#id_quickgrading');
153 if (quickgradingelement) {
154 quickgradingelement.on('change', function(e) {
155 Y.one('form.gradingoptionsform').submit();
158 var showonlyactiveenrolelement = Y.one('#id_showonlyactiveenrol');
159 if (showonlyactiveenrolelement) {
160 showonlyactiveenrolelement.on('change', function(e) {
161 Y.one('form.gradingoptionsform').submit();
164 var downloadasfolderselement = Y.one('#id_downloadasfolders');
165 if (downloadasfolderselement) {
166 downloadasfolderselement.on('change', function(e) {
167 Y.one('form.gradingoptionsform').submit();
173 M.mod_assign.init_plugin_summary = function(Y, subtype, type, submissionid) {
174 var suffix = subtype + '_' + type + '_' + submissionid;
175 var classname = 'contract_' + suffix;
176 var contract = Y.one('.' + classname);
178 contract.on('click', function(e) {
180 var link = e.currentTarget || e.target;
181 var linkclasses = link.getAttribute('class').split(' ');
183 for (var i = 0; i < linkclasses.length; i++) {
184 classname = linkclasses[i];
185 if (classname.indexOf('contract_') == 0) {
186 thissuffix = classname.substr(9);
189 var fullclassname = 'full_' + thissuffix;
190 var full = Y.one('.' + fullclassname);
194 var summaryclassname = 'summary_' + thissuffix;
195 var summary = Y.one('.' + summaryclassname);
198 summary.one('a.expand_' + thissuffix).focus();
202 classname = 'expand_' + suffix;
203 var expand = Y.one('.' + classname);
205 var full = Y.one('.full_' + suffix);
208 full.toggleClass('hidefull');
211 expand.on('click', function(e) {
213 var link = e.currentTarget || e.target;
214 var linkclasses = link.getAttribute('class').split(' ');
216 for (var i = 0; i < linkclasses.length; i++) {
217 classname = linkclasses[i];
218 if (classname.indexOf('expand_') == 0) {
219 thissuffix = classname.substr(7);
222 var summaryclassname = 'summary_' + thissuffix;
223 var summary = Y.one('.' + summaryclassname);
227 var fullclassname = 'full_' + thissuffix;
228 full = Y.one('.' + fullclassname);
231 full.one('a.contract_' + thissuffix).focus();