Merge branch 'MDL-70112_310' of https://github.com/timhunt/moodle into MOODLE_310_STABLE
[moodle.git] / question / type / ddimageortext / amd / build / form.min.js.map
1 {"version":3,"sources":["../src/form.js"],"names":["define","$","dragDrop","dragDropToImageForm","maxBgImageSize","maxDragImageSize","fp","init","filePickers","append","updateVisibilityOfFilePickers","setOptionsForDragItemSelectors","setupEventHandlers","waitForFilePickerToInitialise","file","href","setTimeout","M","util","js_pending","on","loadPreviewImage","one","afterPreviewImageLoaded","attr","createDropZones","js_complete","dropZoneHolder","empty","bgimageurl","numDrops","form","getFormValue","dropNo","dragNo","group","label","imgUrl","waitForAllDropImagesToBeLoaded","notYetLoadedImages","not","i","imgNode","imageIsLoaded","length","updateDropZones","imgElement","complete","naturalHeight","dropBackgroundPosition","offset","drop","left","parseInt","top","is","html","css","numGroups","first","find","resizeAllDragsAndDropsInGroup","drops","maxWidth","maxHeight","each","Math","max","ceil","offsetWidth","offsetHeight","round","floor","e","input","target","closest","hasClass","dragStart","window","numDrags","picker","show","hide","dragItemOptions","toNameWithIndex","name","selector","selectedvalue","val","remove","value","hasOwnProperty","optionnode","isItemUsed","filter","selectNode","info","prepare","start","x","y","dragMove","dragEnd","backgroundImage","backgroundPosition","data","dropPosition","min","width","height","setFormValue","indexes","indexString","getEl","elements","el","type","checked","draftItemIdsToName","nameToParentNode","index","filepicker","parentNode","fileAnchor","get","innerHTML","draftitemid"],"mappings":"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","sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle.  If not, see <http://www.gnu.org/licenses/>.\n\n/*\n * JavaScript to allow dragging options to slots (using mouse down or touch) or tab through slots using keyboard.\n *\n * @module     qtype_ddimageortext/form\n * @package    qtype_ddimageortext\n * @copyright  2018 The Open University\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine(['jquery', 'core/dragdrop'], function($, dragDrop) {\n\n    \"use strict\";\n\n    /**\n     * Singleton object to handle progressive enhancement of the\n     * drag-drop onto image question editing form.\n     * @type {Object}\n     */\n    var dragDropToImageForm = {\n        /**\n         * @var {Object} with properties width and height.\n         */\n        maxBgImageSize: null,\n\n        /**\n         * @var {Object} with properties width and height.\n         */\n        maxDragImageSize: null,\n\n        /**\n         * @var {object} for interacting with the file pickers.\n         */\n        fp: null, // Object containing functions associated with the file picker.\n\n        /**\n         * Initialise the form javascript features.\n         */\n        init: function() {\n            dragDropToImageForm.fp = dragDropToImageForm.filePickers();\n\n            $('#id_previewareaheader').append(\n                '<div class=\"ddarea que ddimageortext\">' +\n                '  <div class=\"droparea\">' +\n                '    <img class=\"dropbackground\" />' +\n                '    <div class=\"dropzones\"></div>' +\n                '  </div>' +\n                '  <div class=\"dragitems\"></div>' +\n                '</div>');\n\n            dragDropToImageForm.updateVisibilityOfFilePickers();\n            dragDropToImageForm.setOptionsForDragItemSelectors();\n            dragDropToImageForm.setupEventHandlers();\n            dragDropToImageForm.waitForFilePickerToInitialise();\n        },\n\n        /**\n         * Waits for the file-pickers to be sufficiently ready before initialising the preview.\n         */\n        waitForFilePickerToInitialise: function() {\n            if (dragDropToImageForm.fp.file('bgimage').href === null) {\n                // It would be better to use an onload or onchange event rather than this timeout.\n                // Unfortunately attempts to do this early are overwritten by filepicker during its loading.\n                setTimeout(dragDropToImageForm.waitForFilePickerToInitialise, 1000);\n                return;\n            }\n            M.util.js_pending('dragDropToImageForm');\n\n            // From now on, when a new file gets loaded into the filepicker, update the preview.\n            // This is not in the setupEventHandlers section as it needs to be delayed until\n            // after filepicker's javascript has finished.\n            $('form.mform[data-qtype=\"ddimageortext\"]').on('change', '.filepickerhidden', function() {\n                M.util.js_pending('dragDropToImageForm');\n                dragDropToImageForm.loadPreviewImage();\n            });\n\n            dragDropToImageForm.loadPreviewImage();\n        },\n\n        /**\n         * Loads the preview background image.\n         */\n        loadPreviewImage: function() {\n            $('fieldset#id_previewareaheader .dropbackground')\n                .one('load', dragDropToImageForm.afterPreviewImageLoaded)\n                .attr('src', dragDropToImageForm.fp.file('bgimage').href);\n        },\n\n        /**\n         * After the background image is loaded, continue setting up the preview.\n         */\n        afterPreviewImageLoaded: function() {\n            dragDropToImageForm.createDropZones();\n            M.util.js_complete('dragDropToImageForm');\n        },\n\n        /**\n         * Create, or recreate all the drop zones.\n         */\n        createDropZones: function() {\n            var dropZoneHolder = $('.dropzones');\n            dropZoneHolder.empty();\n\n            var bgimageurl = dragDropToImageForm.fp.file('bgimage').href;\n            if (bgimageurl === null) {\n                return; // There is not currently a valid preview to update.\n            }\n\n            var numDrops = dragDropToImageForm.form.getFormValue('nodropzone', []);\n            for (var dropNo = 0; dropNo < numDrops; dropNo++) {\n                var dragNo = dragDropToImageForm.form.getFormValue('drops', [dropNo, 'choice']);\n                if (dragNo === '0') {\n                    continue;\n                }\n                dragNo = dragNo - 1;\n                var group = dragDropToImageForm.form.getFormValue('drags', [dragNo, 'draggroup']),\n                    label = dragDropToImageForm.form.getFormValue('draglabel', [dragNo]);\n                if ('image' === dragDropToImageForm.form.getFormValue('drags', [dragNo, 'dragitemtype'])) {\n                    var imgUrl = dragDropToImageForm.fp.file('dragitem[' + dragNo + ']').href;\n                    if (imgUrl === null) {\n                        continue;\n                    }\n                    // Althoug these are previews of drops, we also add the class name 'drag',\n                    dropZoneHolder.append('<img class=\"droppreview group' + group + ' drop' + dropNo +\n                            '\" src=\"' + imgUrl + '\" alt=\"' + label + '\" data-drop-no=\"' + dropNo + '\">');\n\n                } else if (label !== '') {\n                    dropZoneHolder.append('<div class=\"droppreview group' + group + ' drop' + dropNo +\n                        '\"  data-drop-no=\"' + dropNo + '\">' + label + '</div>');\n                }\n            }\n\n            dragDropToImageForm.waitForAllDropImagesToBeLoaded();\n        },\n\n        /**\n         * This polls until all the drop-zone images have loaded, and then calls updateDropZones().\n         */\n        waitForAllDropImagesToBeLoaded: function() {\n            var notYetLoadedImages = $('.dropzones img').not(function(i, imgNode) {\n                return dragDropToImageForm.imageIsLoaded(imgNode);\n            });\n\n            if (notYetLoadedImages.length > 0) {\n                setTimeout(function() {\n                    dragDropToImageForm.waitForAllDropImagesToBeLoaded();\n                }, 100);\n                return;\n            }\n\n            dragDropToImageForm.updateDropZones();\n        },\n\n        /**\n         * Check if an image has loaded without errors.\n         *\n         * @param {HTMLImageElement} imgElement an image.\n         * @returns {boolean} true if this image has loaded without errors.\n         */\n        imageIsLoaded: function(imgElement) {\n            return imgElement.complete && imgElement.naturalHeight !== 0;\n        },\n\n        /**\n         * Set the size and position of all the drop zones.\n         */\n        updateDropZones: function() {\n            var bgimageurl = dragDropToImageForm.fp.file('bgimage').href;\n            if (bgimageurl === null) {\n                return; // There is not currently a valid preview to update.\n            }\n\n            var dropBackgroundPosition = $('fieldset#id_previewareaheader .dropbackground').offset(),\n                numDrops = dragDropToImageForm.form.getFormValue('nodropzone', []);\n\n            // Move each drop to the right position and update the text.\n            for (var dropNo = 0; dropNo < numDrops; dropNo++) {\n                var drop = $('.dropzones .drop' + dropNo);\n                if (drop.length === 0) {\n                    continue;\n                }\n                var dragNo = dragDropToImageForm.form.getFormValue('drops', [dropNo, 'choice']) - 1;\n\n                drop.offset({\n                    left: dropBackgroundPosition.left +\n                            parseInt(dragDropToImageForm.form.getFormValue('drops', [dropNo, 'xleft'])),\n                    top: dropBackgroundPosition.top +\n                            parseInt(dragDropToImageForm.form.getFormValue('drops', [dropNo, 'ytop']))\n                });\n\n                var label = dragDropToImageForm.form.getFormValue('draglabel', [dragNo]);\n                if (drop.is('img')) {\n                    drop.attr('alt', label);\n                } else {\n                    drop.html(label);\n                }\n            }\n\n            // Resize them to the same size.\n            $('.dropzones .droppreview').css('padding', '0');\n            var numGroups = $('select.draggroup').first().find('option').length;\n            for (var group = 1; group <= numGroups; group++) {\n                dragDropToImageForm.resizeAllDragsAndDropsInGroup(group);\n            }\n        },\n\n        /**\n         * In a given group, set all the drags and drops to be the same size.\n         *\n         * @param {int} group the group number.\n         */\n        resizeAllDragsAndDropsInGroup: function(group) {\n            var drops = $('.dropzones .droppreview.group' + group),\n                maxWidth = 0,\n                maxHeight = 0;\n\n            // Find the maximum size of any drag in this groups.\n            drops.each(function(i, drop) {\n                maxWidth = Math.max(maxWidth, Math.ceil(drop.offsetWidth));\n                maxHeight = Math.max(maxHeight, Math.ceil(drop.offsetHeight));\n            });\n\n            // The size we will want to set is a bit bigger than this.\n            maxWidth += 10;\n            maxHeight += 10;\n\n            // Set each drag home to that size.\n            drops.each(function(i, drop) {\n                var left = Math.round((maxWidth - drop.offsetWidth) / 2),\n                    top = Math.floor((maxHeight - drop.offsetHeight) / 2);\n                // Set top and left padding so the item is centred.\n                $(drop).css({\n                    'padding-left': left + 'px',\n                    'padding-right': (maxWidth - drop.offsetWidth - left) + 'px',\n                    'padding-top': top + 'px',\n                    'padding-bottom': (maxHeight - drop.offsetHeight - top) + 'px'\n                });\n            });\n        },\n\n        /**\n         * Events linked to form actions.\n         */\n        setupEventHandlers: function() {\n            // Changes to settings in the draggable items section.\n            $('fieldset#id_draggableitemheader')\n                .on('change input', 'input, select', function(e) {\n                    var input = $(e.target).closest('select, input');\n                    if (input.hasClass('dragitemtype')) {\n                        dragDropToImageForm.updateVisibilityOfFilePickers();\n                    }\n\n                    dragDropToImageForm.setOptionsForDragItemSelectors();\n\n                    if (input.is('.dragitemtype, .draggroup')) {\n                        dragDropToImageForm.createDropZones();\n                    } else if (input.is('.draglabel')) {\n                        dragDropToImageForm.updateDropZones();\n                    }\n                });\n\n            // Changes to Drop zones section: left, top and drag item.\n            $('fieldset#id_dropzoneheader').on('change input', 'input, select', function(e) {\n                var input = $(e.target).closest('select, input');\n                if (input.is('select')) {\n                    dragDropToImageForm.createDropZones();\n                } else {\n                    dragDropToImageForm.updateDropZones();\n                }\n            });\n\n            // Moving drop zones in the preview.\n            $('fieldset#id_previewareaheader').on('mousedown touchstart', '.droppreview', function(e) {\n                dragDropToImageForm.dragStart(e);\n            });\n\n            $(window).on('resize', function() {\n                dragDropToImageForm.updateDropZones();\n            });\n        },\n\n        /**\n         * Update all the drag item filepickers, so they are only shown for\n         */\n        updateVisibilityOfFilePickers: function() {\n            var numDrags = dragDropToImageForm.form.getFormValue('noitems', []);\n            for (var dragNo = 0; dragNo < numDrags; dragNo++) {\n                var picker = $('input#id_dragitem_' + dragNo).closest('.fitem_ffilepicker');\n                if ('image' === dragDropToImageForm.form.getFormValue('drags', [dragNo, 'dragitemtype'])) {\n                    picker.show();\n                } else {\n                    picker.hide();\n                }\n            }\n        },\n\n\n        setOptionsForDragItemSelectors: function() {\n            var dragItemOptions = {'0': ''},\n                numDrags = dragDropToImageForm.form.getFormValue('noitems', []),\n                numDrops = dragDropToImageForm.form.getFormValue('nodropzone', []);\n\n            // Work out the list of options.\n            for (var dragNo = 0; dragNo < numDrags; dragNo++) {\n                var label = dragDropToImageForm.form.getFormValue('draglabel', [dragNo]);\n                var file = dragDropToImageForm.fp.file(dragDropToImageForm.form.toNameWithIndex('dragitem', [dragNo]));\n                if ('image' === dragDropToImageForm.form.getFormValue('drags', [dragNo, 'dragitemtype']) && file.name !== null) {\n                    dragItemOptions[dragNo + 1] = (dragNo + 1) + '. ' + label + ' (' + file.name + ')';\n                } else if (label !== '') {\n                    dragItemOptions[dragNo + 1] = (dragNo + 1) + '. ' + label;\n                }\n            }\n\n            // Initialise each select.\n            for (var dropNo = 0; dropNo < numDrops; dropNo++) {\n                var selector = $('#id_drops_' + dropNo + '_choice');\n\n                var selectedvalue = selector.val();\n                selector.find('option').remove();\n                for (var value in dragItemOptions) {\n                    if (!dragItemOptions.hasOwnProperty(value)) {\n                        continue;\n                    }\n                    selector.append('<option value=\"' + value + '\">' + dragItemOptions[value] + '</option>');\n                    var optionnode = selector.find('option[value=\"' + value + '\"]');\n                    if (parseInt(value) === parseInt(selectedvalue)) {\n                        optionnode.attr('selected', true);\n                    } else if (dragDropToImageForm.isItemUsed(parseInt(value))) {\n                        optionnode.attr('disabled', true);\n                    }\n                }\n            }\n        },\n\n        /**\n         * Checks if the specified drag option is already used somewhere.\n         *\n         * @param {Number} value of the drag item to check\n         * @return {Boolean} true if item is allocated to dropzone\n         */\n        isItemUsed: function(value) {\n            if (value === 0) {\n                return false; // None option can always be selected.\n            }\n\n            if (dragDropToImageForm.form.getFormValue('drags', [value - 1, 'infinite'])) {\n                return false; // Infinite, so can't be used up.\n            }\n\n            return $('fieldset#id_dropzoneheader select').filter(function(i, selectNode) {\n                return parseInt($(selectNode).val()) === value;\n            }).length !== 0;\n        },\n\n        /**\n         * Handles when a dropzone in dragged in the preview.\n         * @param {Object} e Event object\n         */\n        dragStart: function(e) {\n            var drop = $(e.target).closest('.droppreview');\n\n            var info = dragDrop.prepare(e);\n            if (!info.start) {\n                return;\n            }\n\n            dragDrop.start(e, drop, function(x, y, drop) {\n                dragDropToImageForm.dragMove(drop);\n            }, function() {\n                dragDropToImageForm.dragEnd();\n            });\n        },\n\n        /**\n         * Handles update while a drop is being dragged.\n         *\n         * @param {jQuery} drop the drop preview being moved.\n         */\n        dragMove: function(drop) {\n            var backgroundImage = $('fieldset#id_previewareaheader .dropbackground'),\n                backgroundPosition = backgroundImage.offset(),\n                dropNo = drop.data('dropNo'),\n                dropPosition = drop.offset(),\n                left = Math.round(dropPosition.left - backgroundPosition.left),\n                top = Math.round(dropPosition.top - backgroundPosition.top);\n\n            // Constrain coordinates to be inside the background.\n            // The -10 here matches the +10 in resizeAllDragsAndDropsInGroup().\n            left = Math.max(0, Math.min(left, backgroundImage.width() - drop.width() - 10));\n            top = Math.max(0, Math.min(top, backgroundImage.height() - drop.height() - 10));\n\n            // Update the form.\n            dragDropToImageForm.form.setFormValue('drops', [dropNo, 'xleft'], left);\n            dragDropToImageForm.form.setFormValue('drops', [dropNo, 'ytop'], top);\n        },\n\n        /**\n         * Handles when the drag ends.\n         */\n        dragEnd: function() {\n            // Redraw, in case the position was constrained.\n            dragDropToImageForm.updateDropZones();\n        },\n\n        /**\n         * Low level operations on form.\n         */\n        form: {\n            toNameWithIndex: function(name, indexes) {\n                var indexString = name;\n                for (var i = 0; i < indexes.length; i++) {\n                    indexString = indexString + '[' + indexes[i] + ']';\n                }\n                return indexString;\n            },\n\n            getEl: function(name, indexes) {\n                var form = $('form.mform[data-qtype=\"ddimageortext\"]')[0];\n                return form.elements[this.toNameWithIndex(name, indexes)];\n            },\n\n            /**\n             * Helper to get the value of a form elements with name like \"drops[0][xleft]\".\n             *\n             * @param {String} name the base name, e.g. 'drops'.\n             * @param {String[]} indexes the indexes, e.g. ['0', 'xleft'].\n             * @return {String} the value of that field.\n             */\n            getFormValue: function(name, indexes) {\n                var el = this.getEl(name, indexes);\n                if (!el.type) {\n                    el = el[el.length - 1];\n                }\n                if (el.type === 'checkbox') {\n                    return el.checked;\n                } else {\n                    return el.value;\n                }\n            },\n\n            /**\n             * Helper to get the value of a form elements with name like \"drops[0][xleft]\".\n             *\n             * @param {String} name the base name, e.g. 'drops'.\n             * @param {String[]} indexes the indexes, e.g. ['0', 'xleft'].\n             * @param {String|Number} value the value to set.\n             */\n            setFormValue: function(name, indexes, value) {\n                var el = this.getEl(name, indexes);\n                if (el.type === 'checkbox') {\n                    el.checked = value;\n                } else {\n                    el.value = value;\n                }\n            }\n        },\n\n        /**\n         * Utility to get the file name and url from the filepicker.\n         * @returns {Object} object containing functions {file, name}\n         */\n        filePickers: function() {\n            var draftItemIdsToName;\n            var nameToParentNode;\n\n            if (draftItemIdsToName === undefined) {\n                draftItemIdsToName = {};\n                nameToParentNode = {};\n                var fp = $('form.mform[data-qtype=\"ddimageortext\"] input.filepickerhidden');\n                fp.each(function(index, filepicker) {\n                    draftItemIdsToName[filepicker.value] = filepicker.name;\n                    nameToParentNode[filepicker.name] = filepicker.parentNode;\n                });\n            }\n\n            return {\n                file: function(name) {\n                    var parentNode = $(nameToParentNode[name]);\n                    var fileAnchor = parentNode.find('div.filepicker-filelist a');\n                    if (fileAnchor.length) {\n                        return {href: fileAnchor.get(0).href, name: fileAnchor.get(0).innerHTML};\n                    } else {\n                        return {href: null, name: null};\n                    }\n                },\n\n                name: function(draftitemid) {\n                    return draftItemIdsToName[draftitemid];\n                }\n            };\n        }\n    };\n\n    /**\n     * @alias module:qtype_ddimageortext/form\n     */\n    return {\n        /**\n         * Initialise the form JavaScript features.\n         */\n        init: dragDropToImageForm.init\n    };\n});\n"],"file":"form.min.js"}