Skip to content

Commit

Permalink
MDL-82302 quiz: keep inplace editable edit when drag drop.
Browse files Browse the repository at this point in the history
  • Loading branch information
hieuvu committed Oct 16, 2024
1 parent fc29add commit 1398c65
Show file tree
Hide file tree
Showing 9 changed files with 133 additions and 13 deletions.
12 changes: 9 additions & 3 deletions mod/quiz/classes/output/edit_renderer.php
Original file line number Diff line number Diff line change
Expand Up @@ -765,7 +765,8 @@ public function question(structure $structure, int $slot, \moodle_url $pageurl)
'slotid' => $slotid,
'canbeedited' => $structure->can_be_edited(),
'checkbox' => $this->get_checkbox_render($structure, $slot),
'questionnumber' => $this->question_number($questionnumber, $structure->get_slot_by_number($slot)->defaultnumber),
'questionnumber' => $this->question_number($questionnumber, $structure->get_slot_by_number($slot)->defaultnumber,
$structure->get_slot_by_id($slotid)->displaynumber),
'questionname' => $this->get_question_name_for_slot($structure, $slot, $pageurl),
'questionicons' => $this->get_action_icon($structure, $slot, $pageurl),
'questiondependencyicon' => ($structure->can_be_edited() ? $this->question_dependency_icon($structure, $slot) : ''),
Expand Down Expand Up @@ -872,14 +873,19 @@ public function question_move_icon(structure $structure, $slot) {
*
* @param string $editablenumber The, which may be an in-place editable.
* @param string $uncustomisednumber The un-customised number number, or 'i'.
* @param string|null $customisednumber The customised slot number.
* @return string HTML to output.
*/
public function question_number(string $editablenumber, string $uncustomisednumber) {
public function question_number(string $editablenumber, string $uncustomisednumber, ?string $customisednumber = null) {
if ($customisednumber === $uncustomisednumber) {
$customisednumber = '';
}
if ($editablenumber !== get_string('infoshort', 'quiz')) {
$editablenumber = html_writer::span(get_string('question'), 'accesshide') . ' ' . $editablenumber;
$uncustomisednumber = html_writer::span(get_string('question'), 'accesshide') . ' ' . $uncustomisednumber;
}
return html_writer::tag('span', $editablenumber, ['class' => 'slotnumber unshuffled']) .
return html_writer::tag('span', $editablenumber, ['class' => 'slotnumber unshuffled',
'data-customnumber' => $customisednumber]) .
html_writer::tag('span', $uncustomisednumber, ['class' => 'slotnumber shuffled']);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,12 @@ Y.extend(RESOURCETOOLBOX, TOOLBOX, {
M.mod_quiz.quizbase.register_module(this);
Y.delegate('click', this.handle_data_action, BODY, SELECTOR.ACTIVITYACTION, this);
Y.delegate('click', this.handle_data_action, BODY, SELECTOR.DEPENDENCY_LINK, this);
// Listen to the updated inplace editable event when user updates the question number.
document.body.addEventListener('core/inplace_editable:updated',function(e) {
if (e.target.parentNode.classList.contains('slotnumber')) {
e.target.parentNode.setAttribute('data-customnumber', e.detail.ajaxreturn.displayvalue);
}
});
this.initialise_select_multiple();
},

Expand Down

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
Expand Up @@ -295,6 +295,12 @@ Y.extend(RESOURCETOOLBOX, TOOLBOX, {
M.mod_quiz.quizbase.register_module(this);
Y.delegate('click', this.handle_data_action, BODY, SELECTOR.ACTIVITYACTION, this);
Y.delegate('click', this.handle_data_action, BODY, SELECTOR.DEPENDENCY_LINK, this);
// Listen to the updated inplace editable event when user updates the question number.
document.body.addEventListener('core/inplace_editable:updated',function(e) {
if (e.target.parentNode.classList.contains('slotnumber')) {
e.target.parentNode.setAttribute('data-customnumber', e.detail.ajaxreturn.displayvalue);
}
});
this.initialise_select_multiple();
},

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,43 @@ Y.Moodle.mod_quiz.util.slot = {
*
* @method setNumber
* @param slot {Node} The slot to update the number for.
* @param number {Number} The number will be set for this slot.
* @return void
*/
setNumber: function(slot, number) {
var numbernode = slot.one(this.SELECTORS.NUMBER);
numbernode.setHTML('<span class="accesshide">' + this.CONSTANTS.QUESTION + '</span> ' + number);
var yui = this;
require(['core/inplace_editable', 'core/templates', 'core/str', 'core/notification'],
function(InplaceEditable, Templates, str, Notification) {
var numberNode = slot.one(yui.SELECTORS.NUMBER)._node;
var inplaceElement = InplaceEditable.getInplaceEditable(numberNode);
// We don't need to change custom number.
if (inplaceElement && !numberNode.dataset.customnumber) {
str.get_strings([
{key: 'edit_slotdisplaynumber_hint', component: 'mod_quiz'},
{key: 'edit_slotdisplaynumber_label', component: 'mod_quiz', param: number},
]).then(function(strings) {
var context = {
displayvalue: number,
value: number,
itemid: inplaceElement.getItemId(),
component: 'mod_quiz',
itemtype: 'slotdisplaynumber',
edithint: strings[0],
editlabel: strings[1],
editicon: {
'key': 't/editstring',
'component': 'core',
'title': strings[1],
},
linkeverything: true,
};
return Templates.render('core/inplace_editable', context).then(function(html, js) {
Templates.replaceNodeContents(numberNode, html, js);
});
}).catch(Notification.exception);
}
}
);
},

/**
Expand Down

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

Original file line number Diff line number Diff line change
Expand Up @@ -112,11 +112,43 @@ Y.Moodle.mod_quiz.util.slot = {
*
* @method setNumber
* @param slot {Node} The slot to update the number for.
* @param number {Number} The number will be set for this slot.
* @return void
*/
setNumber: function(slot, number) {
var numbernode = slot.one(this.SELECTORS.NUMBER);
numbernode.setHTML('<span class="accesshide">' + this.CONSTANTS.QUESTION + '</span> ' + number);
var yui = this;
require(['core/inplace_editable', 'core/templates', 'core/str', 'core/notification'],
function(InplaceEditable, Templates, str, Notification) {
var numberNode = slot.one(yui.SELECTORS.NUMBER)._node;
var inplaceElement = InplaceEditable.getInplaceEditable(numberNode);
// We don't need to change custom number.
if (inplaceElement && !numberNode.dataset.customnumber) {
str.get_strings([
{key: 'edit_slotdisplaynumber_hint', component: 'mod_quiz'},
{key: 'edit_slotdisplaynumber_label', component: 'mod_quiz', param: number},
]).then(function(strings) {
var context = {
displayvalue: number,
value: number,
itemid: inplaceElement.getItemId(),
component: 'mod_quiz',
itemtype: 'slotdisplaynumber',
edithint: strings[0],
editlabel: strings[1],
editicon: {
'key': 't/editstring',
'component': 'core',
'title': strings[1],
},
linkeverything: true,
};
return Templates.render('core/inplace_editable', context).then(function(html, js) {
Templates.replaceNodeContents(numberNode, html, js);
});
}).catch(Notification.exception);
}
}
);
},

/**
Expand Down
6 changes: 6 additions & 0 deletions mod/quiz/yui/src/toolboxes/js/resource.js
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,12 @@ Y.extend(RESOURCETOOLBOX, TOOLBOX, {
M.mod_quiz.quizbase.register_module(this);
Y.delegate('click', this.handle_data_action, BODY, SELECTOR.ACTIVITYACTION, this);
Y.delegate('click', this.handle_data_action, BODY, SELECTOR.DEPENDENCY_LINK, this);
// Listen to the updated inplace editable event when user updates the question number.
document.body.addEventListener('core/inplace_editable:updated',function(e) {
if (e.target.parentNode.classList.contains('slotnumber')) {
e.target.parentNode.setAttribute('data-customnumber', e.detail.ajaxreturn.displayvalue);
}
});
this.initialise_select_multiple();
},

Expand Down
Loading

0 comments on commit 1398c65

Please sign in to comment.