{"version":3,"file":"prefix-556.695f2e6b7fe566e2.bundle.js","mappings":"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","sources":["webpack://WebComponents/./runestone/dragndrop/js/DragDropTouch.js","webpack://WebComponents/./runestone/dragndrop/js/dragndrop-i18n.en.js","webpack://WebComponents/./runestone/dragndrop/js/dragndrop-i18n.pt-br.js","webpack://WebComponents/./runestone/dragndrop/js/dragndrop.js","webpack://WebComponents/./runestone/dragndrop/js/timeddnd.js"],"sourcesContent":["var DragDropTouch;\r\n(function (DragDropTouch_1) {\r\n 'use strict';\r\n /**\r\n * Object used to hold the data that is being dragged during drag and drop operations.\r\n *\r\n * It may hold one or more data items of different types. For more information about\r\n * drag and drop operations and data transfer objects, see\r\n * <a href=\"https://developer.mozilla.org/en-US/docs/Web/API/DataTransfer\">HTML Drag and Drop API</a>.\r\n *\r\n * This object is created automatically by the @see:DragDropTouch singleton and is\r\n * accessible through the @see:dataTransfer property of all drag events.\r\n */\r\n var DataTransfer = (function () {\r\n function DataTransfer() {\r\n this._dropEffect = 'move';\r\n this._effectAllowed = 'all';\r\n this._data = {};\r\n }\r\n Object.defineProperty(DataTransfer.prototype, \"dropEffect\", {\r\n /**\r\n * Gets or sets the type of drag-and-drop operation currently selected.\r\n * The value must be 'none', 'copy', 'link', or 'move'.\r\n */\r\n get: function () {\r\n return this._dropEffect;\r\n },\r\n set: function (value) {\r\n this._dropEffect = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataTransfer.prototype, \"effectAllowed\", {\r\n /**\r\n * Gets or sets the types of operations that are possible.\r\n * Must be one of 'none', 'copy', 'copyLink', 'copyMove', 'link',\r\n * 'linkMove', 'move', 'all' or 'uninitialized'.\r\n */\r\n get: function () {\r\n return this._effectAllowed;\r\n },\r\n set: function (value) {\r\n this._effectAllowed = value;\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n Object.defineProperty(DataTransfer.prototype, \"types\", {\r\n /**\r\n * Gets an array of strings giving the formats that were set in the @see:dragstart event.\r\n */\r\n get: function () {\r\n return Object.keys(this._data);\r\n },\r\n enumerable: true,\r\n configurable: true\r\n });\r\n /**\r\n * Removes the data associated with a given type.\r\n *\r\n * The type argument is optional. If the type is empty or not specified, the data\r\n * associated with all types is removed. If data for the specified type does not exist,\r\n * or the data transfer contains no data, this method will have no effect.\r\n *\r\n * @param type Type of data to remove.\r\n */\r\n DataTransfer.prototype.clearData = function (type) {\r\n if (type != null) {\r\n delete this._data[type.toLowerCase()];\r\n }\r\n else {\r\n this._data = {};\r\n }\r\n };\r\n /**\r\n * Retrieves the data for a given type, or an empty string if data for that type does\r\n * not exist or the data transfer contains no data.\r\n *\r\n * @param type Type of data to retrieve.\r\n */\r\n DataTransfer.prototype.getData = function (type) {\r\n return this._data[type.toLowerCase()] || '';\r\n };\r\n /**\r\n * Set the data for a given type.\r\n *\r\n * For a list of recommended drag types, please see\r\n * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Recommended_Drag_Types.\r\n *\r\n * @param type Type of data to add.\r\n * @param value Data to add.\r\n */\r\n DataTransfer.prototype.setData = function (type, value) {\r\n this._data[type.toLowerCase()] = value;\r\n };\r\n /**\r\n * Set the image to be used for dragging if a custom one is desired.\r\n *\r\n * @param img An image element to use as the drag feedback image.\r\n * @param offsetX The horizontal offset within the image.\r\n * @param offsetY The vertical offset within the image.\r\n */\r\n DataTransfer.prototype.setDragImage = function (img, offsetX, offsetY) {\r\n var ddt = DragDropTouch._instance;\r\n ddt._imgCustom = img;\r\n ddt._imgOffset = { x: offsetX, y: offsetY };\r\n };\r\n return DataTransfer;\r\n }());\r\n DragDropTouch_1.DataTransfer = DataTransfer;\r\n /**\r\n * Defines a class that adds support for touch-based HTML5 drag/drop operations.\r\n *\r\n * The @see:DragDropTouch class listens to touch events and raises the\r\n * appropriate HTML5 drag/drop events as if the events had been caused\r\n * by mouse actions.\r\n *\r\n * The purpose of this class is to enable using existing, standard HTML5\r\n * drag/drop code on mobile devices running IOS or Android.\r\n *\r\n * To use, include the DragDropTouch.js file on the page. The class will\r\n * automatically start monitoring touch events and will raise the HTML5\r\n * drag drop events (dragstart, dragenter, dragleave, drop, dragend) which\r\n * should be handled by the application.\r\n *\r\n * For details and examples on HTML drag and drop, see\r\n * https://developer.mozilla.org/en-US/docs/Web/Guide/HTML/Drag_operations.\r\n */\r\n var DragDropTouch = (function () {\r\n /**\r\n * Initializes the single instance of the @see:DragDropTouch class.\r\n */\r\n function DragDropTouch() {\r\n this._lastClick = 0;\r\n // enforce singleton pattern\r\n if (DragDropTouch._instance) {\r\n throw 'DragDropTouch instance already created.';\r\n }\r\n // detect passive event support\r\n // https://github.com/Modernizr/Modernizr/issues/1894\r\n var supportsPassive = false;\r\n document.addEventListener('test', function () { }, {\r\n get passive() {\r\n supportsPassive = true;\r\n return true;\r\n }\r\n });\r\n // listen to touch events\r\n if (navigator.maxTouchPoints) {\r\n var d = document, \r\n ts = this._touchstart.bind(this), \r\n tm = this._touchmove.bind(this), \r\n te = this._touchend.bind(this), \r\n opt = supportsPassive ? { passive: false, capture: false } : false;\r\n d.addEventListener('touchstart', ts, opt);\r\n d.addEventListener('touchmove', tm, opt);\r\n d.addEventListener('touchend', te);\r\n d.addEventListener('touchcancel', te);\r\n }\r\n }\r\n /**\r\n * Gets a reference to the @see:DragDropTouch singleton.\r\n */\r\n DragDropTouch.getInstance = function () {\r\n return DragDropTouch._instance;\r\n };\r\n // ** event handlers\r\n DragDropTouch.prototype._touchstart = function (e) {\r\n var _this = this;\r\n if (this._shouldHandle(e)) {\r\n // raise double-click and prevent zooming\r\n if (Date.now() - this._lastClick < DragDropTouch._DBLCLICK) {\r\n if (this._dispatchEvent(e, 'dblclick', e.target)) {\r\n e.preventDefault();\r\n this._reset();\r\n return;\r\n }\r\n }\r\n // clear all variables\r\n this._reset();\r\n // get nearest draggable element\r\n var src = this._closestDraggable(e.target);\r\n if (src) {\r\n // give caller a chance to handle the hover/move events\r\n if (!this._dispatchEvent(e, 'mousemove', e.target) &&\r\n !this._dispatchEvent(e, 'mousedown', e.target)) {\r\n // get ready to start dragging\r\n this._dragSource = src;\r\n this._ptDown = this._getPoint(e);\r\n this._lastTouch = e;\r\n e.preventDefault();\r\n // show context menu if the user hasn't started dragging after a while\r\n setTimeout(function () {\r\n if (_this._dragSource == src && _this._img == null) {\r\n if (_this._dispatchEvent(e, 'contextmenu', src)) {\r\n _this._reset();\r\n }\r\n }\r\n }, DragDropTouch._CTXMENU);\r\n if (DragDropTouch._ISPRESSHOLDMODE) {\r\n this._pressHoldInterval = setTimeout(function () {\r\n _this._isDragEnabled = true;\r\n _this._touchmove(e);\r\n }, DragDropTouch._PRESSHOLDAWAIT);\r\n }\r\n }\r\n }\r\n }\r\n };\r\n DragDropTouch.prototype._touchmove = function (e) {\r\n if (this._shouldCancelPressHoldMove(e)) {\r\n this._reset();\r\n return;\r\n }\r\n if (this._shouldHandleMove(e) || this._shouldHandlePressHoldMove(e)) {\r\n // see if target wants to handle move\r\n var target = this._getTarget(e);\r\n if (this._dispatchEvent(e, 'mousemove', target)) {\r\n this._lastTouch = e;\r\n e.preventDefault();\r\n return;\r\n }\r\n // start dragging\r\n if (this._dragSource && !this._img && this._shouldStartDragging(e)) {\r\n this._dispatchEvent(e, 'dragstart', this._dragSource);\r\n this._createImage(e);\r\n this._dispatchEvent(e, 'dragenter', target);\r\n }\r\n // continue dragging\r\n if (this._img) {\r\n this._lastTouch = e;\r\n e.preventDefault(); // prevent scrolling\r\n this._dispatchEvent(e, 'drag', this._dragSource);\r\n if (target != this._lastTarget) {\r\n this._dispatchEvent(this._lastTouch, 'dragleave', this._lastTarget);\r\n this._dispatchEvent(e, 'dragenter', target);\r\n this._lastTarget = target;\r\n }\r\n this._moveImage(e);\r\n this._isDropZone = this._dispatchEvent(e, 'dragover', target);\r\n }\r\n }\r\n };\r\n DragDropTouch.prototype._touchend = function (e) {\r\n if (this._shouldHandle(e)) {\r\n // see if target wants to handle up\r\n if (this._dispatchEvent(this._lastTouch, 'mouseup', e.target)) {\r\n e.preventDefault();\r\n return;\r\n }\r\n // user clicked the element but didn't drag, so clear the source and simulate a click\r\n if (!this._img) {\r\n this._dragSource = null;\r\n this._dispatchEvent(this._lastTouch, 'click', e.target);\r\n this._lastClick = Date.now();\r\n }\r\n // finish dragging\r\n this._destroyImage();\r\n if (this._dragSource) {\r\n if (e.type.indexOf('cancel') < 0 && this._isDropZone) {\r\n this._dispatchEvent(this._lastTouch, 'drop', this._lastTarget);\r\n }\r\n this._dispatchEvent(this._lastTouch, 'dragend', this._dragSource);\r\n this._reset();\r\n }\r\n }\r\n };\r\n // ** utilities\r\n // ignore events that have been handled or that involve more than one touch\r\n DragDropTouch.prototype._shouldHandle = function (e) {\r\n return e &&\r\n !e.defaultPrevented &&\r\n e.touches && e.touches.length < 2;\r\n };\r\n\r\n // use regular condition outside of press & hold mode\r\n DragDropTouch.prototype._shouldHandleMove = function (e) {\r\n return !DragDropTouch._ISPRESSHOLDMODE && this._shouldHandle(e);\r\n };\r\n\r\n // allow to handle moves that involve many touches for press & hold\r\n DragDropTouch.prototype._shouldHandlePressHoldMove = function (e) {\r\n return DragDropTouch._ISPRESSHOLDMODE &&\r\n this._isDragEnabled && e && e.touches && e.touches.length;\r\n };\r\n\r\n // reset data if user drags without pressing & holding\r\n DragDropTouch.prototype._shouldCancelPressHoldMove = function (e) {\r\n return DragDropTouch._ISPRESSHOLDMODE && !this._isDragEnabled &&\r\n this._getDelta(e) > DragDropTouch._PRESSHOLDMARGIN;\r\n };\r\n\r\n // start dragging when specified delta is detected\r\n DragDropTouch.prototype._shouldStartDragging = function (e) {\r\n var delta = this._getDelta(e);\r\n return delta > DragDropTouch._THRESHOLD ||\r\n (DragDropTouch._ISPRESSHOLDMODE && delta >= DragDropTouch._PRESSHOLDTHRESHOLD);\r\n }\r\n\r\n // clear all members\r\n DragDropTouch.prototype._reset = function () {\r\n this._destroyImage();\r\n this._dragSource = null;\r\n this._lastTouch = null;\r\n this._lastTarget = null;\r\n this._ptDown = null;\r\n this._isDragEnabled = false;\r\n this._isDropZone = false;\r\n this._dataTransfer = new DataTransfer();\r\n clearInterval(this._pressHoldInterval);\r\n };\r\n // get point for a touch event\r\n DragDropTouch.prototype._getPoint = function (e, page) {\r\n if (e && e.touches) {\r\n e = e.touches[0];\r\n }\r\n return { x: page ? e.pageX : e.clientX, y: page ? e.pageY : e.clientY };\r\n };\r\n // get distance between the current touch event and the first one\r\n DragDropTouch.prototype._getDelta = function (e) {\r\n if (DragDropTouch._ISPRESSHOLDMODE && !this._ptDown) { return 0; }\r\n var p = this._getPoint(e);\r\n return Math.abs(p.x - this._ptDown.x) + Math.abs(p.y - this._ptDown.y);\r\n };\r\n // get the element at a given touch event\r\n DragDropTouch.prototype._getTarget = function (e) {\r\n var pt = this._getPoint(e), el = document.elementFromPoint(pt.x, pt.y);\r\n while (el && getComputedStyle(el).pointerEvents == 'none') {\r\n el = el.parentElement;\r\n }\r\n return el;\r\n };\r\n // create drag image from source element\r\n DragDropTouch.prototype._createImage = function (e) {\r\n // just in case...\r\n if (this._img) {\r\n this._destroyImage();\r\n }\r\n // create drag image from custom element or drag source\r\n var src = this._imgCustom || this._dragSource;\r\n this._img = src.cloneNode(true);\r\n this._copyStyle(src, this._img);\r\n this._img.style.top = this._img.style.left = '-9999px';\r\n // if creating from drag source, apply offset and opacity\r\n if (!this._imgCustom) {\r\n var rc = src.getBoundingClientRect(), pt = this._getPoint(e);\r\n this._imgOffset = { x: pt.x - rc.left, y: pt.y - rc.top };\r\n this._img.style.opacity = DragDropTouch._OPACITY.toString();\r\n }\r\n // add image to document\r\n this._moveImage(e);\r\n document.body.appendChild(this._img);\r\n };\r\n // dispose of drag image element\r\n DragDropTouch.prototype._destroyImage = function () {\r\n if (this._img && this._img.parentElement) {\r\n this._img.parentElement.removeChild(this._img);\r\n }\r\n this._img = null;\r\n this._imgCustom = null;\r\n };\r\n // move the drag image element\r\n DragDropTouch.prototype._moveImage = function (e) {\r\n var _this = this;\r\n requestAnimationFrame(function () {\r\n if (_this._img) {\r\n var pt = _this._getPoint(e, true), s = _this._img.style;\r\n s.position = 'absolute';\r\n s.pointerEvents = 'none';\r\n s.zIndex = '999999';\r\n s.left = Math.round(pt.x - _this._imgOffset.x) + 'px';\r\n s.top = Math.round(pt.y - _this._imgOffset.y) + 'px';\r\n }\r\n });\r\n };\r\n // copy properties from an object to another\r\n DragDropTouch.prototype._copyProps = function (dst, src, props) {\r\n for (var i = 0; i < props.length; i++) {\r\n var p = props[i];\r\n dst[p] = src[p];\r\n }\r\n };\r\n DragDropTouch.prototype._copyStyle = function (src, dst) {\r\n // remove potentially troublesome attributes\r\n DragDropTouch._rmvAtts.forEach(function (att) {\r\n dst.removeAttribute(att);\r\n });\r\n // copy canvas content\r\n if (src instanceof HTMLCanvasElement) {\r\n var cSrc = src, cDst = dst;\r\n cDst.width = cSrc.width;\r\n cDst.height = cSrc.height;\r\n cDst.getContext('2d').drawImage(cSrc, 0, 0);\r\n }\r\n // copy style (without transitions)\r\n var cs = getComputedStyle(src);\r\n for (var i = 0; i < cs.length; i++) {\r\n var key = cs[i];\r\n if (key.indexOf('transition') < 0) {\r\n dst.style[key] = cs[key];\r\n }\r\n }\r\n dst.style.pointerEvents = 'none';\r\n // and repeat for all children\r\n for (var i = 0; i < src.children.length; i++) {\r\n this._copyStyle(src.children[i], dst.children[i]);\r\n }\r\n };\r\n DragDropTouch.prototype._dispatchEvent = function (e, type, target) {\r\n if (e && target) {\r\n var evt = document.createEvent('Event'), t = e.touches ? e.touches[0] : e;\r\n evt.initEvent(type, true, true);\r\n evt.button = 0;\r\n evt.which = evt.buttons = 1;\r\n this._copyProps(evt, e, DragDropTouch._kbdProps);\r\n this._copyProps(evt, t, DragDropTouch._ptProps);\r\n evt.dataTransfer = this._dataTransfer;\r\n target.dispatchEvent(evt);\r\n return evt.defaultPrevented;\r\n }\r\n return false;\r\n };\r\n // gets an element's closest draggable ancestor\r\n DragDropTouch.prototype._closestDraggable = function (e) {\r\n for (; e; e = e.parentElement) {\r\n if (e.hasAttribute('draggable') && e.draggable) {\r\n return e;\r\n }\r\n }\r\n return null;\r\n };\r\n return DragDropTouch;\r\n }());\r\n /*private*/ DragDropTouch._instance = new DragDropTouch(); // singleton\r\n // constants\r\n DragDropTouch._THRESHOLD = 5; // pixels to move before drag starts\r\n DragDropTouch._OPACITY = 0.5; // drag image opacity\r\n DragDropTouch._DBLCLICK = 500; // max ms between clicks in a double click\r\n DragDropTouch._CTXMENU = 900; // ms to hold before raising 'contextmenu' event\r\n DragDropTouch._ISPRESSHOLDMODE = false; // decides of press & hold mode presence\r\n DragDropTouch._PRESSHOLDAWAIT = 400; // ms to wait before press & hold is detected\r\n DragDropTouch._PRESSHOLDMARGIN = 25; // pixels that finger might shiver while pressing\r\n DragDropTouch._PRESSHOLDTHRESHOLD = 0; // pixels to move before drag starts\r\n // copy styles/attributes from drag source to drag image element\r\n DragDropTouch._rmvAtts = 'id,class,style,draggable'.split(',');\r\n // synthesize and dispatch an event\r\n // returns true if the event has been handled (e.preventDefault == true)\r\n DragDropTouch._kbdProps = 'altKey,ctrlKey,metaKey,shiftKey'.split(',');\r\n DragDropTouch._ptProps = 'pageX,pageY,clientX,clientY,screenX,screenY,offsetX,offsetY'.split(',');\r\n DragDropTouch_1.DragDropTouch = DragDropTouch;\r\n})(DragDropTouch || (DragDropTouch = {}));\r\n","$.i18n().load({\n en: {\n msg_dragndrop_correct_answer: \"You are correct!\",\n msg_dragndrop_incorrect_answer:\n \"Incorrect. You got $1 correct and $2 incorrect out of $3. You left $4 blank.\",\n msg_dragndrop_check_me: \"Check me\",\n msg_dragndrop_reset: \"Reset\",\n },\n});\n","$.i18n().load({\n \"pt-br\": {\n msg_dragndrop_correct_answer: \"Correto!\",\n msg_dragndrop_incorrect_answer:\n \"Incorreto. VocĂȘ teve $1 correto(s) e $2 incorreto(s) de $3. VocĂȘ deixou $4 em branco.\",\n msg_dragndrop_check_me: \"Verificar\",\n msg_dragndrop_reset: \"Resetar\",\n },\n});\n","/*==========================================\n======= Master dragndrop.js ========\n============================================\n=== This file contains the JS for ===\n=== the Runestone Drag n drop component. ===\n============================================\n=== Created by ===\n=== Isaiah Mayerchak ===\n=== 7/6/15 ===\n=== Brad MIller ===\n=== 2/7/19 ===\n==========================================*/\n\"use strict\";\n\nimport RunestoneBase from \"../../common/js/runestonebase.js\";\nimport \"../css/dragndrop.less\";\nimport \"./dragndrop-i18n.en.js\";\nimport \"./dragndrop-i18n.pt-br.js\";\nimport \"./DragDropTouch.js\";\n\nexport default class DragNDrop extends RunestoneBase {\n constructor(opts) {\n super(opts);\n var orig = opts.orig; // entire <ul> element that will be replaced by new HTML\n this.origElem = orig;\n this.divid = orig.id;\n this.useRunestoneServices = opts.useRunestoneServices;\n this.random = false;\n if ($(this.origElem).is(\"[data-random]\")) {\n this.random = true;\n }\n this.feedback = \"\";\n this.dragPairArray = [];\n this.question = \"\";\n this.populate(); // Populates this.dragPairArray, this.feedback and this.question\n this.createNewElements();\n this.caption = \"Drag-N-Drop\";\n this.addCaption(\"runestone\");\n if (typeof Prism !== \"undefined\") {\n Prism.highlightAllUnder(this.containerDiv);\n }\n }\n /*======================\n === Update variables ===\n ======================*/\n populate() {\n for (var i = 0; i < this.origElem.childNodes.length; i++) {\n if (\n $(this.origElem.childNodes[i]).data(\"subcomponent\") ===\n \"dropzone\"\n ) {\n var tmp = $(this.origElem).find(\n `#${$(this.origElem.childNodes[i]).attr(\"for\")}`\n )[0];\n var replaceSpan = document.createElement(\"span\");\n replaceSpan.innerHTML = tmp.innerHTML;\n replaceSpan.id = this.divid + tmp.id;\n $(replaceSpan).attr(\"draggable\", \"true\");\n $(replaceSpan).addClass(\"draggable-drag\");\n var otherReplaceSpan = document.createElement(\"span\");\n otherReplaceSpan.innerHTML =\n this.origElem.childNodes[i].innerHTML;\n $(otherReplaceSpan).addClass(\"draggable-drop\");\n this.setEventListeners(replaceSpan, otherReplaceSpan);\n var tmpArr = [];\n tmpArr.push(replaceSpan);\n tmpArr.push(otherReplaceSpan);\n this.dragPairArray.push(tmpArr);\n } else if (\n $(this.origElem.childNodes[i]).data(\"subcomponent\") ===\n \"question\"\n ) {\n this.question = this.origElem.childNodes[i].innerHTML;\n } else if (\n $(this.origElem.childNodes[i]).data(\"subcomponent\") ===\n \"feedback\"\n ) {\n this.feedback = this.origElem.childNodes[i].innerHTML;\n }\n }\n }\n /*========================================\n == Create new HTML elements and replace ==\n == original element with them ==\n ========================================*/\n createNewElements() {\n this.containerDiv = document.createElement(\"div\");\n this.containerDiv.id = this.divid;\n $(this.containerDiv).addClass(\"draggable-container\");\n $(this.containerDiv).html(this.question);\n this.containerDiv.appendChild(document.createElement(\"br\"));\n this.dragDropWrapDiv = document.createElement(\"div\"); // Holds the draggables/dropzones, prevents feedback from bleeding in\n $(this.dragDropWrapDiv).css(\"display\", \"block\");\n this.containerDiv.appendChild(this.dragDropWrapDiv);\n this.draggableDiv = document.createElement(\"div\");\n $(this.draggableDiv).addClass(\"rsdraggable dragzone\");\n this.addDragDivListeners();\n this.dropZoneDiv = document.createElement(\"div\");\n $(this.dropZoneDiv).addClass(\"rsdraggable\");\n this.dragDropWrapDiv.appendChild(this.draggableDiv);\n this.dragDropWrapDiv.appendChild(this.dropZoneDiv);\n this.createButtons();\n this.checkServer(\"dragNdrop\", true);\n if (eBookConfig.practice_mode) {\n this.finishSettingUp();\n }\n self = this;\n self.queueMathJax(self.containerDiv);\n }\n finishSettingUp() {\n this.appendReplacementSpans();\n this.renderFeedbackDiv();\n $(this.origElem).replaceWith(this.containerDiv);\n if (!this.hasStoredDropzones) {\n this.minheight = $(this.draggableDiv).height();\n }\n this.draggableDiv.style.minHeight = this.minheight.toString() + \"px\";\n if ($(this.dropZoneDiv).height() > this.minheight) {\n this.dragDropWrapDiv.style.minHeight =\n $(this.dropZoneDiv).height().toString() + \"px\";\n } else {\n this.dragDropWrapDiv.style.minHeight =\n this.minheight.toString() + \"px\";\n }\n }\n addDragDivListeners() {\n let self = this;\n this.draggableDiv.addEventListener(\n \"dragover\",\n function (ev) {\n ev.preventDefault();\n if ($(this.draggableDiv).hasClass(\"possibleDrop\")) {\n return;\n }\n $(this.draggableDiv).addClass(\"possibleDrop\");\n }.bind(this)\n );\n this.draggableDiv.addEventListener(\n \"drop\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if ($(this.draggableDiv).hasClass(\"possibleDrop\")) {\n $(this.draggableDiv).removeClass(\"possibleDrop\");\n }\n var data = ev.dataTransfer.getData(\"draggableID\");\n var draggedSpan = document.getElementById(data);\n if (\n !$(this.draggableDiv).has(draggedSpan).length &&\n !this.strangerDanger(draggedSpan)\n ) {\n // Make sure element isn't already there--prevents erros w/appending child\n this.draggableDiv.appendChild(draggedSpan);\n }\n }.bind(this)\n );\n this.draggableDiv.addEventListener(\n \"dragleave\",\n function (e) {\n if (!$(this.draggableDiv).hasClass(\"possibleDrop\")) {\n return;\n }\n $(this.draggableDiv).removeClass(\"possibleDrop\");\n }.bind(this)\n );\n }\n createButtons() {\n this.buttonDiv = document.createElement(\"div\");\n this.submitButton = document.createElement(\"button\"); // Check me button\n this.submitButton.textContent = $.i18n(\"msg_dragndrop_check_me\");\n $(this.submitButton).attr({\n class: \"btn btn-success drag-button\",\n name: \"do answer\",\n type: \"button\",\n });\n this.submitButton.onclick = function () {\n this.checkCurrentAnswer();\n this.renderFeedback();\n this.logCurrentAnswer();\n }.bind(this);\n this.resetButton = document.createElement(\"button\"); // Check me button\n this.resetButton.textContent = $.i18n(\"msg_dragndrop_reset\");\n $(this.resetButton).attr({\n class: \"btn btn-default drag-button drag-reset\",\n name: \"do answer\",\n });\n this.resetButton.onclick = function () {\n this.resetDraggables();\n }.bind(this);\n this.buttonDiv.appendChild(this.submitButton);\n this.buttonDiv.appendChild(this.resetButton);\n this.containerDiv.appendChild(this.buttonDiv);\n }\n appendReplacementSpans() {\n this.createIndexArray();\n this.randomizeIndexArray();\n for (let i = 0; i < this.dragPairArray.length; i++) {\n if (this.hasStoredDropzones) {\n if (\n $.inArray(this.indexArray[i][0], this.pregnantIndexArray) <\n 0\n ) {\n this.draggableDiv.appendChild(\n this.dragPairArray[this.indexArray[i]][0]\n );\n }\n } else {\n this.draggableDiv.appendChild(\n this.dragPairArray[this.indexArray[i]][0]\n );\n }\n }\n if (this.random) {\n this.randomizeIndexArray(); // shuffle index again\n } else {\n this.createIndexArray(); // reset default index\n }\n for (let i = 0; i < this.dragPairArray.length; i++) {\n if (this.hasStoredDropzones) {\n if (this.pregnantIndexArray[this.indexArray[i]] !== \"-1\") {\n this.dragPairArray[this.indexArray[i]][1].appendChild(\n this.dragPairArray[\n this.pregnantIndexArray[this.indexArray[i]]\n ][0]\n );\n }\n }\n this.dropZoneDiv.appendChild(\n this.dragPairArray[this.indexArray[i]][1]\n );\n }\n }\n setEventListeners(dgSpan, dpSpan) {\n // Adds HTML5 \"drag and drop\" UI functionality\n let self = this;\n dgSpan.addEventListener(\"dragstart\", function (ev) {\n ev.dataTransfer.setData(\"draggableID\", ev.target.id);\n });\n dgSpan.addEventListener(\"dragover\", function (ev) {\n ev.preventDefault();\n });\n dgSpan.addEventListener(\n \"drop\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n var data = ev.dataTransfer.getData(\"draggableID\");\n var draggedSpan = document.getElementById(data);\n if (\n this.hasNoDragChild(ev.target) &&\n draggedSpan != ev.target &&\n !this.strangerDanger(draggedSpan)\n ) {\n // Make sure element isn't already there--prevents erros w/appending child\n this.draggableDiv.appendChild(draggedSpan);\n }\n }.bind(this)\n );\n dpSpan.addEventListener(\n \"dragover\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if ($(ev.target).hasClass(\"possibleDrop\")) {\n return;\n }\n if (\n $(ev.target).hasClass(\"draggable-drop\") &&\n this.hasNoDragChild(ev.target)\n ) {\n $(ev.target).addClass(\"possibleDrop\");\n }\n }.bind(this)\n );\n dpSpan.addEventListener(\"dragleave\", function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if (!$(ev.target).hasClass(\"possibleDrop\")) {\n return;\n }\n $(ev.target).removeClass(\"possibleDrop\");\n });\n dpSpan.addEventListener(\n \"drop\",\n function (ev) {\n self.isAnswered = true;\n ev.preventDefault();\n if ($(ev.target).hasClass(\"possibleDrop\")) {\n $(ev.target).removeClass(\"possibleDrop\");\n }\n var data = ev.dataTransfer.getData(\"draggableID\");\n var draggedSpan = document.getElementById(data);\n if (\n $(ev.target).hasClass(\"draggable-drop\") &&\n this.hasNoDragChild(ev.target) &&\n !this.strangerDanger(draggedSpan)\n ) {\n // Make sure element isn't already there--prevents erros w/appending child\n ev.target.appendChild(draggedSpan);\n }\n }.bind(this)\n );\n }\n renderFeedbackDiv() {\n if (!this.feedBackDiv) {\n this.feedBackDiv = document.createElement(\"div\");\n this.feedBackDiv.id = this.divid + \"_feedback\";\n this.containerDiv.appendChild(document.createElement(\"br\"));\n this.containerDiv.appendChild(this.feedBackDiv);\n }\n }\n /*=======================\n == Auxiliary functions ==\n =======================*/\n strangerDanger(testSpan) {\n // Returns true if the test span doesn't belong to this instance of DragNDrop\n var strangerDanger = true;\n for (var i = 0; i < this.dragPairArray.length; i++) {\n if (testSpan === this.dragPairArray[i][0]) {\n strangerDanger = false;\n }\n }\n return strangerDanger;\n }\n hasNoDragChild(parent) {\n // Ensures that each dropZoneDiv can have only one draggable child\n var counter = 0;\n for (var i = 0; i < parent.childNodes.length; i++) {\n if ($(parent.childNodes[i]).attr(\"draggable\") === \"true\") {\n counter++;\n }\n }\n if (counter >= 1) {\n return false;\n } else {\n return true;\n }\n }\n createIndexArray() {\n this.indexArray = [];\n for (var i = 0; i < this.dragPairArray.length; i++) {\n this.indexArray.push(i);\n }\n }\n randomizeIndexArray() {\n // Shuffles around indices so the matchable elements aren't in a predictable order\n var currentIndex = this.indexArray.length,\n temporaryValue,\n randomIndex;\n // While there remain elements to shuffle...\n while (currentIndex !== 0) {\n // Pick a remaining element...\n randomIndex = Math.floor(Math.random() * currentIndex);\n currentIndex -= 1;\n // And swap it with the current element.\n temporaryValue = this.indexArray[currentIndex];\n this.indexArray[currentIndex] = this.indexArray[randomIndex];\n this.indexArray[randomIndex] = temporaryValue;\n }\n }\n /*==============================\n == Reset button functionality ==\n ==============================*/\n resetDraggables() {\n for (var i = 0; i < this.dragPairArray.length; i++) {\n for (\n var j = 0;\n j < this.dragPairArray[i][1].childNodes.length;\n j++\n ) {\n if (\n $(this.dragPairArray[i][1].childNodes[j]).attr(\n \"draggable\"\n ) === \"true\"\n ) {\n this.draggableDiv.appendChild(\n this.dragPairArray[i][1].childNodes[j]\n );\n }\n }\n }\n this.feedBackDiv.style.display = \"none\";\n }\n /*===========================\n == Evaluation and feedback ==\n ===========================*/\n\n checkCurrentAnswer() {\n this.correct = true;\n this.unansweredNum = 0;\n this.incorrectNum = 0;\n this.dragNum = this.dragPairArray.length;\n for (var i = 0; i < this.dragPairArray.length; i++) {\n if (\n !$(this.dragPairArray[i][1]).has(this.dragPairArray[i][0])\n .length\n ) {\n this.correct = false;\n this.incorrectNum++;\n }\n if (this.hasNoDragChild(this.dragPairArray[i][1])) {\n this.unansweredNum++;\n this.incorrectNum -= 1;\n }\n }\n this.correctNum = this.dragNum - this.incorrectNum - this.unansweredNum;\n this.percent = this.correctNum / this.dragPairArray.length;\n this.setLocalStorage({ correct: this.correct ? \"T\" : \"F\" });\n }\n\n async logCurrentAnswer(sid) {\n let answer = this.pregnantIndexArray.join(\";\");\n let data = {\n event: \"dragNdrop\",\n act: answer,\n answer: answer,\n min_height: Math.round(this.minheight),\n div_id: this.divid,\n correct: this.correct,\n correctNum: this.correctNum,\n dragNum: this.dragNum,\n };\n if (typeof sid !== \"undefined\") {\n data.sid = sid;\n }\n await this.logBookEvent(data);\n }\n renderFeedback() {\n for (var i = 0; i < this.dragPairArray.length; i++) {\n if (\n !$(this.dragPairArray[i][1]).has(this.dragPairArray[i][0])\n .length\n ) {\n $(this.dragPairArray[i][1]).addClass(\"drop-incorrect\");\n } else {\n $(this.dragPairArray[i][1]).removeClass(\"drop-incorrect\");\n }\n }\n\n if (!this.feedBackDiv) {\n this.renderFeedbackDiv();\n }\n this.feedBackDiv.style.display = \"block\";\n if (this.correct) {\n var msgCorrect = $.i18n(\"msg_dragndrop_correct_answer\");\n $(this.feedBackDiv).html(msgCorrect);\n $(this.feedBackDiv).attr(\n \"class\",\n \"alert alert-info draggable-feedback\"\n );\n } else {\n var msgIncorrect = $.i18n(\n $.i18n(\"msg_dragndrop_incorrect_answer\"),\n this.correctNum,\n this.incorrectNum,\n this.dragNum,\n this.unansweredNum\n );\n $(this.feedBackDiv).html(msgIncorrect + \" \" + this.feedback);\n $(this.feedBackDiv).attr(\n \"class\",\n \"alert alert-danger draggable-feedback\"\n );\n }\n }\n /*===================================\n === Checking/restoring from storage ===\n ===================================*/\n restoreAnswers(data) {\n // Restore answers from storage retrieval done in RunestoneBase\n this.hasStoredDropzones = true;\n this.minheight = data.min_height;\n this.pregnantIndexArray = data.answer.split(\";\");\n this.finishSettingUp();\n }\n checkLocalStorage() {\n if (this.graderactive) {\n return;\n }\n var storedObj;\n this.hasStoredDropzones = false;\n var len = localStorage.length;\n if (len > 0) {\n var ex = localStorage.getItem(this.localStorageKey());\n if (ex !== null) {\n this.hasStoredDropzones = true;\n try {\n storedObj = JSON.parse(ex);\n this.minheight = storedObj.min_height;\n } catch (err) {\n // error while parsing; likely due to bad value stored in storage\n console.log(err.message);\n localStorage.removeItem(this.localStorageKey());\n this.hasStoredDropzones = false;\n this.finishSettingUp();\n return;\n }\n this.pregnantIndexArray = storedObj.answer.split(\";\");\n if (this.useRunestoneServices) {\n // store answer in database\n var answer = this.pregnantIndexArray.join(\";\");\n this.logBookEvent({\n event: \"dragNdrop\",\n act: answer,\n answer: answer,\n min_height: Math.round(this.minheight),\n div_id: this.divid,\n correct: storedObj.correct,\n });\n }\n }\n }\n this.finishSettingUp();\n }\n\n setLocalStorage(data) {\n if (data.answer === undefined) {\n // If we didn't load from the server, we must generate the data\n this.pregnantIndexArray = [];\n for (var i = 0; i < this.dragPairArray.length; i++) {\n if (!this.hasNoDragChild(this.dragPairArray[i][1])) {\n for (var j = 0; j < this.dragPairArray.length; j++) {\n if (\n $(this.dragPairArray[i][1]).has(\n this.dragPairArray[j][0]\n ).length\n ) {\n this.pregnantIndexArray.push(j);\n }\n }\n } else {\n this.pregnantIndexArray.push(-1);\n }\n }\n }\n var timeStamp = new Date();\n var correct = data.correct;\n var storageObj = {\n answer: this.pregnantIndexArray.join(\";\"),\n min_height: this.minheight,\n timestamp: timeStamp,\n correct: correct,\n };\n localStorage.setItem(\n this.localStorageKey(),\n JSON.stringify(storageObj)\n );\n }\n\n disableInteraction() {\n $(this.resetButton).hide();\n for (var i = 0; i < this.dragPairArray.length; i++) {\n // No more dragging\n $(this.dragPairArray[i][0]).attr(\"draggable\", \"false\");\n $(this.dragPairArray[i][0]).css(\"cursor\", \"initial\");\n }\n }\n}\n\n/*=================================\n== Find the custom HTML tags and ==\n== execute our code on them ==\n=================================*/\n$(document).on(\"runestone:login-complete\", function () {\n $(\"[data-component=dragndrop]\").each(function (index) {\n var opts = {\n orig: this,\n useRunestoneServices: eBookConfig.useRunestoneServices,\n };\n if ($(this).closest(\"[data-component=timedAssessment]\").length == 0) {\n // If this element exists within a timed component, don't render it here\n try {\n window.componentMap[this.id] = new DragNDrop(opts);\n } catch (err) {\n console.log(`Error rendering DragNDrop Problem ${this.id}`);\n }\n }\n });\n});\n","\"use strict\";\n\nimport DragNDrop from \"./dragndrop.js\";\n\nexport default class TimedDragNDrop extends DragNDrop {\n constructor(opts) {\n super(opts);\n this.finishSettingUp();\n this.renderTimedIcon(this.containerDiv);\n this.hideButtons();\n }\n hideButtons() {\n $(this.submitButton).hide();\n }\n renderTimedIcon(component) {\n // renders the clock icon on timed components. The component parameter\n // is the element that the icon should be appended to.\n var timeIconDiv = document.createElement(\"div\");\n var timeIcon = document.createElement(\"img\");\n $(timeIcon).attr({\n src: \"../_static/clock.png\",\n style: \"width:15px;height:15px\",\n });\n timeIconDiv.className = \"timeTip\";\n timeIconDiv.title = \"\";\n timeIconDiv.appendChild(timeIcon);\n $(component).prepend(timeIconDiv);\n }\n checkCorrectTimed() {\n // Returns if the question was correct. Used for timed assessment grading.\n if (this.unansweredNum === this.dragPairArray.length) {\n this.correct = null;\n }\n switch (this.correct) {\n case true:\n return \"T\";\n case false:\n return \"F\";\n default:\n return null;\n }\n }\n hideFeedback() {\n $(this.feedBackDiv).hide();\n }\n}\n\nif (typeof window.component_factory === \"undefined\") {\n window.component_factory = {};\n}\nwindow.component_factory[\"dragndrop\"] = function (opts) {\n if (opts.timed) {\n return new TimedDragNDrop(opts);\n }\n return new DragNDrop(opts);\n};\n"],"names":["DragDropTouch","DragDropTouch_1","DataTransfer","this","_dropEffect","_effectAllowed","_data","Object","defineProperty","prototype","get","set","value","enumerable","configurable","keys","clearData","type","toLowerCase","getData","setData","setDragImage","img","offsetX","offsetY","ddt","_instance","_imgCustom","_imgOffset","x","y","_lastClick","supportsPassive","document","addEventListener","passive","navigator","maxTouchPoints","d","ts","_touchstart","bind","tm","_touchmove","te","_touchend","opt","capture","getInstance","e","_this","_shouldHandle","Date","now","_DBLCLICK","_dispatchEvent","target","preventDefault","_reset","src","_closestDraggable","_dragSource","_ptDown","_getPoint","_lastTouch","setTimeout","_img","_CTXMENU","_ISPRESSHOLDMODE","_pressHoldInterval","_isDragEnabled","_PRESSHOLDAWAIT","_shouldCancelPressHoldMove","_shouldHandleMove","_shouldHandlePressHoldMove","_getTarget","_shouldStartDragging","_createImage","_lastTarget","_moveImage","_isDropZone","_destroyImage","indexOf","defaultPrevented","touches","length","_getDelta","_PRESSHOLDMARGIN","delta","_THRESHOLD","_PRESSHOLDTHRESHOLD","_dataTransfer","clearInterval","page","pageX","clientX","pageY","clientY","p","Math","abs","pt","el","elementFromPoint","getComputedStyle","pointerEvents","parentElement","cloneNode","_copyStyle","style","top","left","rc","getBoundingClientRect","opacity","_OPACITY","toString","body","appendChild","removeChild","requestAnimationFrame","s","position","zIndex","round","_copyProps","dst","props","i","_rmvAtts","forEach","att","removeAttribute","HTMLCanvasElement","cSrc","cDst","width","height","getContext","drawImage","cs","key","children","evt","createEvent","t","initEvent","button","which","buttons","_kbdProps","_ptProps","dataTransfer","dispatchEvent","hasAttribute","draggable","split","$","i18n","load","en","msg_dragndrop_correct_answer","msg_dragndrop_incorrect_answer","msg_dragndrop_check_me","msg_dragndrop_reset","DragNDrop","constructor","opts","super","orig","origElem","divid","id","useRunestoneServices","random","is","feedback","dragPairArray","question","populate","createNewElements","caption","addCaption","Prism","highlightAllUnder","containerDiv","childNodes","data","tmp","find","attr","replaceSpan","createElement","innerHTML","addClass","otherReplaceSpan","setEventListeners","tmpArr","push","html","dragDropWrapDiv","css","draggableDiv","addDragDivListeners","dropZoneDiv","createButtons","checkServer","eBookConfig","practice_mode","finishSettingUp","self","queueMathJax","appendReplacementSpans","renderFeedbackDiv","replaceWith","hasStoredDropzones","minheight","minHeight","ev","hasClass","isAnswered","removeClass","draggedSpan","getElementById","has","strangerDanger","buttonDiv","submitButton","textContent","class","name","onclick","checkCurrentAnswer","renderFeedback","logCurrentAnswer","resetButton","resetDraggables","createIndexArray","randomizeIndexArray","inArray","indexArray","pregnantIndexArray","dgSpan","dpSpan","hasNoDragChild","feedBackDiv","testSpan","parent","counter","temporaryValue","randomIndex","currentIndex","floor","j","display","correct","unansweredNum","incorrectNum","dragNum","correctNum","percent","setLocalStorage","sid","answer","join","event","act","min_height","div_id","logBookEvent","msgCorrect","msgIncorrect","restoreAnswers","checkLocalStorage","graderactive","storedObj","localStorage","ex","getItem","localStorageKey","JSON","parse","err","console","log","message","removeItem","undefined","timeStamp","storageObj","timestamp","setItem","stringify","disableInteraction","hide","on","each","index","closest","window","componentMap","TimedDragNDrop","renderTimedIcon","hideButtons","component","timeIconDiv","timeIcon","className","title","prepend","checkCorrectTimed","hideFeedback","component_factory","timed"],"sourceRoot":""}