diff --git a/common/static/js/capa/drag_and_drop/base_image.js b/common/static/js/capa/drag_and_drop/base_image.js index 85f6006918..0c9c15fd2e 100644 --- a/common/static/js/capa/drag_and_drop/base_image.js +++ b/common/static/js/capa/drag_and_drop/base_image.js @@ -26,7 +26,7 @@ define(['logme'], function (logme) { state.baseImageEl.attr( 'src', - state.config.imageDir + '/' + state.config.base_image + state.config.base_image ); state.baseImageEl.load(function () { baseImageElContainer.css('width', this.width); @@ -39,13 +39,11 @@ define(['logme'], function (logme) { }); state.baseImageEl.error(function () { logme( - 'ERROR: Image "' + state.config.imageDir + '/' + - state.config.base_image + '" was not found!' + 'ERROR: Image "' + state.config.base_image + '" was not found!' ); baseImageElContainer.html( '' + - 'ERROR: Image "' + state.config.imageDir + '/' + - state.config.base_image + '" was not found!' + + 'ERROR: Image "' + state.config.base_image + '" was not found!' + '' ); baseImageElContainer.appendTo(state.containerEl); diff --git a/common/static/js/capa/drag_and_drop/config_parser.js b/common/static/js/capa/drag_and_drop/config_parser.js index 664324e0b9..2b58bc42f8 100644 --- a/common/static/js/capa/drag_and_drop/config_parser.js +++ b/common/static/js/capa/drag_and_drop/config_parser.js @@ -7,13 +7,12 @@ define(['logme'], function (logme) { return configParser; - function configParser(config, imageDir, state) { + function configParser(config, state) { var returnStatus; returnStatus = true; state.config = { - 'imageDir': '/static/' + imageDir + '/images', 'draggables': [], 'targets': [], 'base_image': '' diff --git a/common/static/js/capa/drag_and_drop/draggables.js b/common/static/js/capa/drag_and_drop/draggables.js index 78fc47bf75..36ff7238d9 100644 --- a/common/static/js/capa/drag_and_drop/draggables.js +++ b/common/static/js/capa/drag_and_drop/draggables.js @@ -89,7 +89,7 @@ define(['logme', 'update_input'], function (logme, updateInput) { draggableObj.iconEl = $(''); draggableObj.iconEl.attr( 'src', - state.config.imageDir + '/' + obj.icon + obj.icon ); draggableObj.iconEl.load(function () { draggableObj.iconWidth = this.width; @@ -358,11 +358,10 @@ define(['logme', 'update_input'], function (logme, updateInput) { // the input with the user's answer (X-Y position of the draggable, // or the ID of the target where it landed. function checkLandingElement() { - var offsetIE, targetFound; + var positionIE, targetFound; mousePressed = false; - - offsetIE = draggableObj.iconEl.position(); + positionIE = draggableObj.iconEl.position(); if (state.individualTargets === true) { targetFound = false; @@ -378,20 +377,15 @@ define(['logme', 'update_input'], function (logme, updateInput) { state.numDraggablesInSlider += 1; } } else { - logme( - 'baseImageEl.width = ' + state.baseImageEl.width() + '; ' + - 'baseImageEl.height = ' + state.baseImageEl.height() - ); - if ( - (offsetIE.left < 0) || + (positionIE.left < 0) || ( - offsetIE.left + draggableObj.iconWidth > + positionIE.left + draggableObj.iconWidth > state.baseImageEl.width() ) || - (offsetIE.top < 0) || + (positionIE.top < 0) || ( - offsetIE.top + draggableObj.iconHeight > + positionIE.top + draggableObj.iconHeight > state.baseImageEl.height() ) ) { @@ -405,9 +399,9 @@ define(['logme', 'update_input'], function (logme, updateInput) { correctZIndexes(); draggableObj.x = - offsetIE.left + draggableObj.iconWidth * 0.5; + positionIE.left + draggableObj.iconWidth * 0.5; draggableObj.y = - offsetIE.top + draggableObj.iconHeight * 0.5; + positionIE.top + draggableObj.iconHeight * 0.5; } } @@ -432,41 +426,26 @@ define(['logme', 'update_input'], function (logme, updateInput) { } } + // // Determine if a draggable, after it was relased, ends up on a // target. We do this by iterating over all of the targets, and // for each one we check whether the draggable's center is // within the target's dimensions. + // + // positionIE is the object as returned by + // + // draggableObj.iconEl.position() + // function checkIfOnTarget() { var c1, target; for (c1 = 0; c1 < state.targets.length; c1 += 1) { target = state.targets[c1]; - if ( - offsetIE.top + draggableObj.iconHeight * 0.5 < - target.offset.top - ) { - continue; - } - if ( - offsetIE.top + draggableObj.iconHeight * 0.5 > - target.offset.top + target.h - ) { - continue; - } - if ( - offsetIE.left + draggableObj.iconWidth * 0.5 < - target.offset.left - ) { - continue; - } - if ( - offsetIE.left + draggableObj.iconWidth * 0.5 > - target.offset.left + target.w - ) { - continue; - } - + // If only one draggable per target is allowed, and + // the current target already has a draggable on it + // (with an ID different from the one we are checking + // against), then go to next target. if ( (state.config.one_per_target === true) && (target.draggable.length === 1) && @@ -475,6 +454,35 @@ define(['logme', 'update_input'], function (logme, updateInput) { continue; } + // Check if the draggable's center coordinate is within + // the target's dimensions. If not, go to next target. + if ( + positionIE.top + draggableObj.iconHeight * 0.5 < + target.offset.top + ) { + continue; + } + if ( + positionIE.top + draggableObj.iconHeight * 0.5 > + target.offset.top + target.h + ) { + continue; + } + if ( + positionIE.left + draggableObj.iconWidth * 0.5 < + target.offset.left + ) { + continue; + } + if ( + positionIE.left + draggableObj.iconWidth * 0.5 > + target.offset.left + target.w + ) { + continue; + } + + // If we got here, then our draggable is on top of a + // target. targetFound = true; // If the draggable was moved from one target to @@ -488,7 +496,11 @@ define(['logme', 'update_input'], function (logme, updateInput) { removeObjIdFromTarget(); onTarget = target; target.draggable.push(draggableObj.id); - } else if (onTarget === null) { + } + // If the draggable was moved from the slider to a + // target, remember the target, and add ID to the + // target's draggables list. + else if (onTarget === null) { onTarget = target; target.draggable.push(draggableObj.id); } diff --git a/common/static/js/capa/drag_and_drop/main.js b/common/static/js/capa/drag_and_drop/main.js index ec186066c1..24cc8cbdcb 100644 --- a/common/static/js/capa/drag_and_drop/main.js +++ b/common/static/js/capa/drag_and_drop/main.js @@ -17,7 +17,7 @@ define( // $(value) - get the element of the entire problem function processProblem(index, value) { - var problemId, imageDir, config, state; + var problemId, config, state; if ($(value).attr('data-problem-processed') === 'true') { // This problem was already processed by us before, so we will @@ -43,16 +43,9 @@ define( return; } - imageDir = $(value).attr('data-course-folder'); - if (typeof imageDir !== 'string') { - logme('ERROR: Could not find the name of the image directory.'); - - return; - } - state = State(problemId); - if (configParser(config, imageDir, state) !== true) { + if (configParser(config, state) !== true) { logme('ERROR: Could not make sense of the JSON configuration options.'); return;