Proyectos de Subversion Moodle

Rev

Autoría | Ultima modificación | Ver Log |

{"version":3,"file":"tool_proxy_card_controller.min.js","sources":["../src/tool_proxy_card_controller.js"],"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 * Controls all of the behaviour and interaction with a tool type card. These are\n * listed on the LTI tool type management page.\n *\n * See template: mod_lti/tool_proxy_card\n *\n * @module     mod_lti/tool_proxy_card_controller\n * @copyright  2016 John Okely <john@moodle.com>\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since      3.1\n */\ndefine(['jquery', 'core/ajax', 'core/notification', 'core/templates', 'mod_lti/tool_proxy', 'mod_lti/events', 'mod_lti/keys',\n        'core/str'],\n        function($, ajax, notification, templates, toolProxy, ltiEvents, KEYS, str) {\n\n    var SELECTORS = {\n        DELETE_BUTTON: '.delete',\n        CAPABILITIES_CONTAINER: '.capabilities-container',\n        ACTIVATE_BUTTON: '.tool-card-footer a.activate',\n    };\n\n    // Timeout in seconds.\n    var ANNOUNCEMENT_TIMEOUT = 2000;\n\n    /**\n     * Return the delete button element.\n     *\n     * @method getDeleteButton\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     * @return {JQuery} jQuery object\n     */\n    var getDeleteButton = function(element) {\n        return element.find(SELECTORS.DELETE_BUTTON);\n    };\n\n    /**\n     * Return the activate button for the type.\n     *\n     * @method getActivateButton\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     * @return {JQuery}  jQuery object\n     */\n    var getActivateButton = function(element) {\n        return element.find(SELECTORS.ACTIVATE_BUTTON);\n    };\n\n    /**\n     * Get the type id.\n     *\n     * @method getTypeId\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     * @return {String} Type ID\n     */\n    var getTypeId = function(element) {\n        return element.attr('data-proxy-id');\n    };\n\n    /**\n     * Stop any announcement currently visible on the card.\n     *\n     * @method clearAllAnnouncements\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     */\n    var clearAllAnnouncements = function(element) {\n        element.removeClass('announcement loading success fail capabilities');\n    };\n\n    /**\n     * Show the loading announcement.\n     *\n     * @method startLoading\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     */\n    var startLoading = function(element) {\n        clearAllAnnouncements(element);\n        element.addClass('announcement loading');\n    };\n\n    /**\n     * Hide the loading announcement.\n     *\n     * @method stopLoading\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     */\n    var stopLoading = function(element) {\n        element.removeClass('announcement loading');\n    };\n\n    /**\n     * Show the success announcement. The announcement is only\n     * visible for 2 seconds.\n     *\n     * @method announceSuccess\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     * @return {Promise} jQuery Deferred object\n     */\n    var announceSuccess = function(element) {\n        var promise = $.Deferred();\n\n        clearAllAnnouncements(element);\n        element.addClass('announcement success');\n        setTimeout(function() {\n            element.removeClass('announcement success');\n            promise.resolve();\n        }, ANNOUNCEMENT_TIMEOUT);\n\n        return promise;\n    };\n\n    /**\n     * Show the failure announcement. The announcement is only\n     * visible for 2 seconds.\n     *\n     * @method announceFailure\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     * @return {Promise} jQuery Deferred object\n     */\n    var announceFailure = function(element) {\n        var promise = $.Deferred();\n\n        clearAllAnnouncements(element);\n        element.addClass('announcement fail');\n        setTimeout(function() {\n                element.removeClass('announcement fail');\n                promise.resolve();\n            }, ANNOUNCEMENT_TIMEOUT);\n\n        return promise;\n    };\n\n    /**\n     * Delete the tool type from the Moodle server. Triggers a success\n     * or failure announcement depending on the result.\n     *\n     * @method deleteType\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     * @return {Promise} jQuery Deferred object\n     */\n    var deleteType = function(element) {\n        var promise = $.Deferred();\n        var typeId = getTypeId(element);\n        startLoading(element);\n\n        if (typeId === \"\") {\n            return $.Deferred().resolve();\n        }\n\n        str.get_strings([\n                {\n                    key: 'delete',\n                    component: 'mod_lti'\n                },\n                {\n                    key: 'delete_confirmation',\n                    component: 'mod_lti'\n                },\n                {\n                    key: 'delete',\n                    component: 'mod_lti'\n                },\n                {\n                    key: 'cancel',\n                    component: 'core'\n                },\n            ])\n            .done(function(strs) {\n                    notification.confirm(strs[0], strs[1], strs[2], strs[3], function() {\n                            toolProxy.delete(typeId)\n                                .done(function() {\n                                        stopLoading(element);\n                                        announceSuccess(element)\n                                            .done(function() {\n                                                    element.remove();\n                                                    promise.resolve();\n                                                })\n                                            .fail(notification.exception);\n                                    })\n                                .fail(function(error) {\n                                        announceFailure(element);\n                                        promise.reject(error);\n                                    });\n                    }, function() {\n                            stopLoading(element);\n                            promise.resolve();\n                        });\n                })\n            .fail(function(error) {\n                    stopLoading(element);\n                    notification.exception(error);\n                    promise.reject(error);\n                });\n\n        return promise;\n    };\n\n    /**\n     * The user wishes to activate this tool so show them the capabilities that\n     * they need to agree to or if there are none then set the tool type's state\n     * to active.\n     *\n     * @method activateToolType\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     */\n    var activateToolType = function(element) {\n        var data = {proxyid: getTypeId(element)};\n        $(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION, data);\n    };\n\n    /**\n     * Sets up the listeners for user interaction on this tool type card.\n     *\n     * @method registerEventListeners\n     * @private\n     * @param {JQuery} element jQuery object representing the tool card.\n     */\n    var registerEventListeners = function(element) {\n        var deleteButton = getDeleteButton(element);\n        deleteButton.click(function(e) {\n                e.preventDefault();\n                deleteType(element);\n            });\n        deleteButton.keypress(function(e) {\n                if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n                    if (e.keyCode == KEYS.ENTER || e.keyCode == KEYS.SPACE) {\n                        e.preventDefault();\n                        deleteButton.click();\n                    }\n                }\n            });\n\n        var activateButton = getActivateButton(element);\n        activateButton.click(function(e) {\n                e.preventDefault();\n                activateToolType(element);\n            });\n        activateButton.keypress(function(e) {\n                if (!e.metaKey && !e.shiftKey && !e.altKey && !e.ctrlKey) {\n                    if (e.keyCode == KEYS.ENTER || e.keyCode == KEYS.SPACE) {\n                        e.preventDefault();\n                        activateButton.click();\n                    }\n                }\n            });\n    };\n\n    return /** @alias module:mod_lti/tool_card_controller */ {\n\n        /**\n         * Initialise this module.\n         *\n         * @param {JQuery} element jQuery object representing the tool card.\n         */\n        init: function(element) {\n            registerEventListeners(element);\n        }\n    };\n});\n"],"names":["define","$","ajax","notification","templates","toolProxy","ltiEvents","KEYS","str","SELECTORS","getTypeId","element","attr","clearAllAnnouncements","removeClass","stopLoading","deleteType","promise","Deferred","typeId","addClass","startLoading","resolve","get_strings","key","component","done","strs","confirm","delete","setTimeout","announceSuccess","remove","fail","exception","error","announceFailure","reject","registerEventListeners","deleteButton","find","getDeleteButton","click","e","preventDefault","keypress","metaKey","shiftKey","altKey","ctrlKey","keyCode","ENTER","SPACE","activateButton","getActivateButton","data","proxyid","document","trigger","START_EXTERNAL_REGISTRATION","activateToolType","init"],"mappings":";;;;;;;;;;;AA0BAA,4CAAO,CAAC,SAAU,YAAa,oBAAqB,iBAAkB,qBAAsB,iBAAkB,eACtG,aACA,SAASC,EAAGC,KAAMC,aAAcC,UAAWC,UAAWC,UAAWC,KAAMC,SAEvEC,wBACe,UADfA,0BAGiB,+BAsCjBC,UAAY,SAASC,gBACdA,QAAQC,KAAK,kBAUpBC,sBAAwB,SAASF,SACjCA,QAAQG,YAAY,mDAsBpBC,YAAc,SAASJ,SACvBA,QAAQG,YAAY,yBAwDpBE,WAAa,SAASL,aAClBM,QAAUhB,EAAEiB,WACZC,OAAST,UAAUC,gBAvER,SAASA,SACxBE,sBAAsBF,SACtBA,QAAQS,SAAS,wBAsEjBC,CAAaV,SAEE,KAAXQ,OACOlB,EAAEiB,WAAWI,WAGxBd,IAAIe,YAAY,CACR,CACIC,IAAK,SACLC,UAAW,WAEf,CACID,IAAK,sBACLC,UAAW,WAEf,CACID,IAAK,SACLC,UAAW,WAEf,CACID,IAAK,SACLC,UAAW,UAGlBC,MAAK,SAASC,MACPxB,aAAayB,QAAQD,KAAK,GAAIA,KAAK,GAAIA,KAAK,GAAIA,KAAK,IAAI,WACjDtB,UAAUwB,OAAOV,QACZO,MAAK,WACEX,YAAYJ,SA3E1B,SAASA,aACvBM,QAAUhB,EAAEiB,kBAEhBL,sBAAsBF,SACtBA,QAAQS,SAAS,wBACjBU,YAAW,WACPnB,QAAQG,YAAY,wBACpBG,QAAQK,YAxFW,KA2FhBL,QAkEyBc,CAAgBpB,SACXe,MAAK,WACEf,QAAQqB,SACRf,QAAQK,aAEfW,KAAK9B,aAAa+B,cAE9BD,MAAK,SAASE,QA7DrB,SAASxB,aACvBM,QAAUhB,EAAEiB,WAEhBL,sBAAsBF,SACtBA,QAAQS,SAAS,qBACjBU,YAAW,WACHnB,QAAQG,YAAY,qBACpBG,QAAQK,YA9GO,KAqKSc,CAAgBzB,SAChBM,QAAQoB,OAAOF,aAEhC,WACKpB,YAAYJ,SACZM,QAAQK,gBAGvBW,MAAK,SAASE,OACPpB,YAAYJ,SACZR,aAAa+B,UAAUC,OACvBlB,QAAQoB,OAAOF,UAGpBlB,UAwBPqB,uBAAyB,SAAS3B,aAC9B4B,aAlMc,SAAS5B,gBACpBA,QAAQ6B,KAAK/B,yBAiMDgC,CAAgB9B,SACnC4B,aAAaG,OAAM,SAASC,GACpBA,EAAEC,iBACF5B,WAAWL,YAEnB4B,aAAaM,UAAS,SAASF,GAClBA,EAAEG,SAAYH,EAAEI,UAAaJ,EAAEK,QAAWL,EAAEM,SACzCN,EAAEO,SAAW3C,KAAK4C,OAASR,EAAEO,SAAW3C,KAAK6C,QAC7CT,EAAEC,iBACFL,aAAaG,gBAKzBW,eApMgB,SAAS1C,gBACtBA,QAAQ6B,KAAK/B,2BAmMC6C,CAAkB3C,SACvC0C,eAAeX,OAAM,SAASC,GACtBA,EAAEC,iBA7BS,SAASjC,aACxB4C,KAAO,CAACC,QAAS9C,UAAUC,UAC/BV,EAAEwD,UAAUC,QAAQpD,UAAUqD,4BAA6BJ,MA4BnDK,CAAiBjD,YAEzB0C,eAAeR,UAAS,SAASF,GACpBA,EAAEG,SAAYH,EAAEI,UAAaJ,EAAEK,QAAWL,EAAEM,SACzCN,EAAEO,SAAW3C,KAAK4C,OAASR,EAAEO,SAAW3C,KAAK6C,QAC7CT,EAAEC,iBACFS,eAAeX,mBAMsB,CAOrDmB,KAAM,SAASlD,SACX2B,uBAAuB3B"}