{"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":""}