From ef6f42a825371d43062b808e460ddbc682399357 Mon Sep 17 00:00:00 2001 From: Huong Nguyen Date: Sun, 25 Oct 2020 20:13:39 +0700 Subject: [PATCH 1/1] MDL-69930 qtype_ddimageortext: Duplication items in drag-onto-image question --- .../ddimageortext/amd/build/question.min.js | Bin 14869 -> 15079 bytes .../amd/build/question.min.js.map | Bin 72392 -> 73400 bytes .../type/ddimageortext/amd/src/question.js | 17 +++++++++++++++-- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/question/type/ddimageortext/amd/build/question.min.js b/question/type/ddimageortext/amd/build/question.min.js index d315b9dc8d79db222035d45af05a6c8a5fc776f1..e5c040f9161b876fd1446f82930a2912aec05a5f 100644 GIT binary patch delta 243 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 diff --git a/question/type/ddimageortext/amd/src/question.js b/question/type/ddimageortext/amd/src/question.js index 8d031bf12c6..f3318d3c2ef 100644 --- a/question/type/ddimageortext/amd/src/question.js +++ b/question/type/ddimageortext/amd/src/question.js @@ -375,7 +375,7 @@ define(['jquery', 'core/dragdrop', 'core/key_codes'], function($, dragDrop, keys }); this.getRoot().find('.draghome.placed.group' + this.getGroup(drag)).not('.beingdragged').each(function(i, dropNode) { var drop = $(dropNode); - if (thisQ.isPointInDrop(pageX, pageY, drop)) { + if (thisQ.isPointInDrop(pageX, pageY, drop) && !thisQ.isDragSameAsDrop(drag, drop)) { drop.addClass('valid-drag-over-drop'); } else { drop.removeClass('valid-drag-over-drop'); @@ -410,7 +410,7 @@ define(['jquery', 'core/dragdrop', 'core/key_codes'], function($, dragDrop, keys root.find('.draghome.placed.group' + this.getGroup(drag)).not('.beingdragged').each(function(i, placedNode) { var placedDrag = $(placedNode); - if (!thisQ.isPointInDrop(pageX, pageY, placedDrag)) { + if (!thisQ.isPointInDrop(pageX, pageY, placedDrag) || thisQ.isDragSameAsDrop(drag, placedDrag)) { // Not this placed drag. return true; } @@ -917,6 +917,17 @@ define(['jquery', 'core/dragdrop', 'core/key_codes'], function($, dragDrop, keys return zIndex; }; + /** + * Check that the drag is drop to it's clone. + * + * @param {jQuery} drag The drag. + * @param {jQuery} drop The drop. + * @returns {boolean} + */ + DragDropOntoImageQuestion.prototype.isDragSameAsDrop = function(drag, drop) { + return this.getChoice(drag) === this.getChoice(drop) && this.getGroup(drag) === this.getGroup(drop); + }; + /** * Singleton object that handles all the DragDropOntoImageQuestions * on the page, and deals with event dispatching. @@ -996,6 +1007,8 @@ define(['jquery', 'core/dragdrop', 'core/key_codes'], function($, dragDrop, keys * @param {jQuery} element Element to bind the event */ addEventHandlersToDrag: function(element) { + // Unbind all the mousedown and touchstart events to prevent double binding. + element.unbind('mousedown touchstart'); element.on('mousedown touchstart', questionManager.handleDragStart); }, -- 2.43.0