Your IP : 216.73.216.95


Current Path : /var/www/ljmtc/cbt/lib/amd/build/
Upload File :
Current File : /var/www/ljmtc/cbt/lib/amd/build/inplace_editable.min.js.map

{"version":3,"sources":["../src/inplace_editable.js"],"names":["define","$","ajax","templates","notification","str","cfg","url","autocomplete","Pending","on","e","type","keyCode","editingEnabledPromise","stopImmediatePropagation","preventDefault","target","mainelement","closest","addSpinner","element","addClass","spinner","find","length","show","attr","imageUrl","append","removeSpinner","removeClass","hide","updateValue","value","pendingId","join","pendingPromise","call","methodname","args","itemid","component","itemtype","then","data","render","html","js","oldvalue","newelement","replaceNode","focus","trigger","ajaxreturn","resolve","fail","ex","Event","exception","newvalue","M","util","js_complete","isDefaultPrevented","turnEditingOff","el","off","removeAttr","uniqueId","prefix","idlength","uniqid","i","Math","floor","random","turnEditingOnText","get_string","done","s","instr","inputelement","lbl","select","behatsiterunning","val","turnEditingOnToggle","turnEditingOnSelect","options","key","turnEditingOnAutocomplete","attributes","saveelement","cancelelement","multiple","JSON","parse","renderPix","enhance","tags","placeholder","caseSensitive","showSuggestions","noSelectionString","stringify","empty","turnEditingOffEverywhere","each","turnEditingOn","parseJSON"],"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 * AJAX helper for the inline editing a value.\n *\n * This script is automatically included from template core/inplace_editable\n * It registers a click-listener on [data-inplaceeditablelink] link (the \"inplace edit\" icon),\n * then replaces the displayed value with an input field. On \"Enter\" it sends a request\n * to web service core_update_inplace_editable, which invokes the specified callback.\n * Any exception thrown by the web service (or callback) is displayed as an error popup.\n *\n * @module     core/inplace_editable\n * @package    core\n * @copyright  2016 Marina Glancy\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since      3.1\n */\ndefine(['jquery',\n        'core/ajax',\n        'core/templates',\n        'core/notification',\n        'core/str',\n        'core/config',\n        'core/url',\n        'core/form-autocomplete',\n        'core/pending',\n    ],\n    function($, ajax, templates, notification, str, cfg, url, autocomplete, Pending) {\n\n    $('body').on('click keypress', '[data-inplaceeditable] [data-inplaceeditablelink]', function(e) {\n        if (e.type === 'keypress' && e.keyCode !== 13) {\n            return;\n        }\n        var editingEnabledPromise = new Pending('autocomplete-start-editing');\n        e.stopImmediatePropagation();\n        e.preventDefault();\n        var target = $(this),\n            mainelement = target.closest('[data-inplaceeditable]');\n\n        var addSpinner = function(element) {\n            element.addClass('updating');\n            var spinner = element.find('img.spinner');\n            if (spinner.length) {\n                spinner.show();\n            } else {\n                spinner = $('<img/>')\n                        .attr('src', url.imageUrl('i/loading_small'))\n                        .addClass('spinner').addClass('smallicon')\n                    ;\n                element.append(spinner);\n            }\n        };\n\n        var removeSpinner = function(element) {\n            element.removeClass('updating');\n            element.find('img.spinner').hide();\n        };\n\n        var updateValue = function(mainelement, value) {\n            var pendingId = [\n                    mainelement.attr('data-itemid'),\n                    mainelement.attr('data-component'),\n                    mainelement.attr('data-itemtype'),\n                ].join('-');\n            var pendingPromise = new Pending(pendingId);\n\n            addSpinner(mainelement);\n            ajax.call([{\n                methodname: 'core_update_inplace_editable',\n                args: {\n                    itemid: mainelement.attr('data-itemid'),\n                    component: mainelement.attr('data-component'),\n                    itemtype: mainelement.attr('data-itemtype'),\n                    value: value,\n                },\n            }])[0]\n            .then(function(data) {\n                return templates.render('core/inplace_editable', data)\n                .then(function(html, js) {\n                    var oldvalue = mainelement.attr('data-value');\n                    var newelement = $(html);\n                    templates.replaceNode(mainelement, newelement, js);\n                    newelement.find('[data-inplaceeditablelink]').focus();\n                    newelement.trigger({\n                        type: 'updated',\n                        ajaxreturn: data,\n                        oldvalue: oldvalue,\n                    });\n\n                    return;\n                });\n            })\n            .then(function() {\n                return pendingPromise.resolve();\n            })\n            .fail(function(ex) {\n                var e = $.Event('updatefailed', {\n                        exception: ex,\n                        newvalue: value\n                    });\n                removeSpinner(mainelement);\n                M.util.js_complete(pendingId);\n                mainelement.trigger(e);\n                if (!e.isDefaultPrevented()) {\n                    notification.exception(ex);\n                }\n            });\n        };\n\n        var turnEditingOff = function(el) {\n            el.find('input').off();\n            el.find('select').off();\n            el.html(el.attr('data-oldcontent'));\n            el.removeAttr('data-oldcontent');\n            el.removeClass('inplaceeditingon');\n            el.find('[data-inplaceeditablelink]').focus();\n        };\n\n        var turnEditingOffEverywhere = function() {\n            $('span.inplaceeditable.inplaceeditingon').each(function() {\n                turnEditingOff($(this));\n            });\n        };\n\n        var uniqueId = function(prefix, idlength) {\n            var uniqid = prefix,\n                i;\n            for (i = 0; i < idlength; i++) {\n                uniqid += String(Math.floor(Math.random() * 10));\n            }\n            // Make sure this ID is not already taken by an existing element.\n            if ($(\"#\" + uniqid).length === 0) {\n                return uniqid;\n            }\n            return uniqueId(prefix, idlength);\n        };\n\n        var turnEditingOnText = function(el) {\n            str.get_string('edittitleinstructions').done(function(s) {\n                var instr = $('<span class=\"editinstructions\">' + s + '</span>').\n                        attr('id', uniqueId('id_editinstructions_', 20)),\n                    inputelement = $('<input type=\"text\"/>').\n                        attr('id', uniqueId('id_inplacevalue_', 20)).\n                        attr('value', el.attr('data-value')).\n                        attr('aria-describedby', instr.attr('id')).\n                        addClass('ignoredirty').\n                        addClass('form-control'),\n                    lbl = $('<label class=\"accesshide\">' + mainelement.attr('data-editlabel') + '</label>').\n                        attr('for', inputelement.attr('id'));\n                el.html('').append(instr).append(lbl).append(inputelement);\n\n                inputelement.focus();\n                inputelement.select();\n                inputelement.on('keyup keypress focusout', function(e) {\n                    if (cfg.behatsiterunning && e.type === 'focusout') {\n                        // Behat triggers focusout too often.\n                        return;\n                    }\n                    if (e.type === 'keypress' && e.keyCode === 13) {\n                        // We need 'keypress' event for Enter because keyup/keydown would catch Enter that was\n                        // pressed in other fields.\n                        var val = inputelement.val();\n                        turnEditingOff(el);\n                        updateValue(el, val);\n                    }\n                    if ((e.type === 'keyup' && e.keyCode === 27) || e.type === 'focusout') {\n                        // We need 'keyup' event for Escape because keypress does not work with Escape.\n                        turnEditingOff(el);\n                    }\n                });\n            });\n        };\n\n        var turnEditingOnToggle = function(el, newvalue) {\n            turnEditingOff(el);\n            updateValue(el, newvalue);\n        };\n\n        var turnEditingOnSelect = function(el, options) {\n            var i,\n                inputelement = $('<select></select>').\n                    attr('id', uniqueId('id_inplacevalue_', 20)).\n                    addClass('custom-select'),\n                lbl = $('<label class=\"accesshide\">' + mainelement.attr('data-editlabel') + '</label>')\n                    .attr('for', inputelement.attr('id'));\n            for (i in options) {\n                inputelement\n                    .append($('<option>')\n                    .attr('value', options[i].key)\n                    .html(options[i].value));\n            }\n            inputelement.val(el.attr('data-value'));\n\n            el.html('')\n                .append(lbl)\n                .append(inputelement);\n\n            inputelement.focus();\n            inputelement.select();\n            inputelement.on('keyup change focusout', function(e) {\n                if (cfg.behatsiterunning && e.type === 'focusout') {\n                    // Behat triggers focusout too often.\n                    return;\n                }\n                if (e.type === 'change') {\n                    var val = inputelement.val();\n                    turnEditingOff(el);\n                    updateValue(el, val);\n                }\n                if ((e.type === 'keyup' && e.keyCode === 27) || e.type === 'focusout') {\n                    // We need 'keyup' event for Escape because keypress does not work with Escape.\n                    turnEditingOff(el);\n                }\n            });\n        };\n\n        var turnEditingOnAutocomplete = function(el, args) {\n            var i,\n                inputelement = $('<select></select>').\n                    attr('id', uniqueId('id_inplacevalue_', 20)).\n                    addClass('form-autocomplete-original-select').\n                    addClass('custom-select'),\n                lbl = $('<label class=\"accesshide\">' + mainelement.attr('data-editlabel') + '</label>')\n                    .attr('for', inputelement.attr('id')),\n                options = args.options,\n                attributes = args.attributes,\n                saveelement = $('<a href=\"#\"></a>'),\n                cancelelement = $('<a href=\"#\"></a>');\n\n            for (i in options) {\n                inputelement\n                    .append($('<option>')\n                    .attr('value', options[i].key)\n                    .html(options[i].value));\n            }\n            if (attributes.multiple) {\n                inputelement.attr('multiple', 'true');\n            }\n            inputelement.val(JSON.parse(el.attr('data-value')));\n\n            str.get_string('savechanges', 'core').then(function(s) {\n                return templates.renderPix('e/save', 'core', s);\n            }).then(function(html) {\n                saveelement.append(html);\n                return;\n            }).fail(notification.exception);\n\n            str.get_string('cancel', 'core').then(function(s) {\n                return templates.renderPix('e/cancel', 'core', s);\n            }).then(function(html) {\n                cancelelement.append(html);\n                return;\n            }).fail(notification.exception);\n\n            el.html('')\n                .append(lbl)\n                .append(inputelement)\n                .append(saveelement)\n                .append(cancelelement);\n\n            inputelement.focus();\n            inputelement.select();\n            autocomplete.enhance(inputelement,\n                                 attributes.tags,\n                                 attributes.ajax,\n                                 attributes.placeholder,\n                                 attributes.caseSensitive,\n                                 attributes.showSuggestions,\n                                 attributes.noSelectionString)\n                .then(function() {\n                // Focus on the enhanced combobox.\n                el.find('[role=combobox]').focus();\n                // Stop eslint nagging.\n                return;\n            }).fail(notification.exception);\n\n            inputelement.on('keyup', function(e) {\n                if ((e.type === 'keyup' && e.keyCode === 27) || e.type === 'focusout') {\n                    // We need 'keyup' event for Escape because keypress does not work with Escape.\n                    turnEditingOff(el);\n                }\n            });\n            saveelement.on('click', function(e) {\n                var val = JSON.stringify(inputelement.val());\n                // We need to empty the node to destroy all event handlers etc.\n                inputelement.empty();\n                turnEditingOff(el);\n                updateValue(el, val);\n                e.preventDefault();\n            });\n            cancelelement.on('click', function(e) {\n                // We need to empty the node to destroy all event handlers etc.\n                inputelement.empty();\n                turnEditingOff(el);\n                e.preventDefault();\n            });\n        };\n\n        var turnEditingOn = function(el) {\n            el.addClass('inplaceeditingon');\n            el.attr('data-oldcontent', el.html());\n\n            var type = el.attr('data-type');\n            var options = el.attr('data-options');\n\n            if (type === 'toggle') {\n                turnEditingOnToggle(el, options);\n            } else if (type === 'select') {\n                turnEditingOnSelect(el, $.parseJSON(options));\n            } else if (type === 'autocomplete') {\n                turnEditingOnAutocomplete(el, $.parseJSON(options));\n            } else {\n                turnEditingOnText(el);\n            }\n        };\n\n        // Turn editing on for the current element and register handler for Enter/Esc keys.\n        turnEditingOffEverywhere();\n        turnEditingOn(mainelement);\n        editingEnabledPromise.resolve();\n\n    });\n\n    return {};\n});\n"],"file":"inplace_editable.min.js"}