From 36f3aee38ed598e1988315244c35c11d4db4fe97 Mon Sep 17 00:00:00 2001 From: Andrew Madden Date: Fri, 19 Nov 2021 17:29:52 +1100 Subject: [PATCH 1/2] MDL-69092 mod_lti: Add js_pending to help behat tests --- mod/lti/amd/build/tool_configure_controller.min.js | 2 +- mod/lti/amd/build/tool_configure_controller.min.js.map | 2 +- mod/lti/amd/src/tool_configure_controller.js | 8 +++++++- mod/lti/tests/behat/viewtools.feature | 5 +++++ 4 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mod/lti/amd/build/tool_configure_controller.min.js b/mod/lti/amd/build/tool_configure_controller.min.js index bfef7ac4388..6ad1f7bfa0c 100644 --- a/mod/lti/amd/build/tool_configure_controller.min.js +++ b/mod/lti/amd/build/tool_configure_controller.min.js @@ -1,2 +1,2 @@ -define ("mod_lti/tool_configure_controller",["jquery","core/ajax","core/paged_content_factory","core/notification","core/templates","mod_lti/events","mod_lti/keys","mod_lti/tool_types_and_proxies","mod_lti/tool_type","mod_lti/tool_proxy","core/str","core/config"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m={EXTERNAL_REGISTRATION_CONTAINER:"#external-registration-container",EXTERNAL_REGISTRATION_PAGE_CONTAINER:"#external-registration-page-container",EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER:"#external-registration-template-container",CARTRIDGE_REGISTRATION_CONTAINER:"#cartridge-registration-container",CARTRIDGE_REGISTRATION_FORM:"#cartridge-registration-form",ADD_TOOL_FORM:"#add-tool-form",TOOL_CARD_CONTAINER:"#tool-card-container",TOOL_LIST_CONTAINER:"#tool-list-container",TOOL_CREATE_BUTTON:"#tool-create-button",TOOL_CREATE_LTILEGACY_BUTTON:"#tool-createltilegacy-button",REGISTRATION_CHOICE_CONTAINER:"#registration-choice-container",TOOL_URL:"#tool-url"},n=function(){return a(m.TOOL_LIST_CONTAINER)},o=function(){return a(m.TOOL_CARD_CONTAINER)},p=function(){return a(m.EXTERNAL_REGISTRATION_CONTAINER)},q=function(){return a(m.CARTRIDGE_REGISTRATION_CONTAINER)},r=function(){return a(m.REGISTRATION_CHOICE_CONTAINER)},s=function(b){if(b.data&&"org.imsglobal.lti.close"===b.data.subject){a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();v();A();D();A();H()}},t=function(b){a(m.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass("hidden");var c=a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);c.append(a(""));y();window.addEventListener("message",s,!1)},u=function(){return a(m.TOOL_URL).val()},v=function(){p().addClass("hidden")},w=function(){q().addClass("hidden")},x=function(){r().addClass("hidden")},y=function(){w();x();p().removeClass("hidden");B(p())},z=function(a){v();x();var b=q();b.find("input").val("");b.removeClass("hidden");b.find(m.CARTRIDGE_REGISTRATION_FORM).attr("data-cartridge-url",a);B(b)},A=function(){v();w();r().removeClass("hidden");B(r())},B=function(a){var b=a.children().detach();b.appendTo(a)},C=function(){n().addClass("hidden")},D=function(){n().removeClass("hidden")},E=function(a){var b=a.error?"error":"success";d.addNotification({message:a.message,type:b})},F=function(a){a.addClass("loading")},G=function(a){a.removeClass("loading")},H=function(){var a=o(),b=n();I().done(function(d){c.createWithTotalAndLimit(d.count,60,function(a){return a.map(function(a){return J(a.limit,a.offset).then(function(a){return K(a)})})},{showFirstLast:!0}).done(function(b,c){e.replaceNodeContents(a,b,c)}).always(G(b))});F(b)},I=function(){return h.count({orphanedonly:!0}).done(function(a){return a}).catch(function(a){d.exception(a);return{count:0}})},J=function(a,b){var c={orphanedonly:!0};if(null!==a&&!Number.isNaN(a)){c.limit=a}if(null!==b&&!Number.isNaN(b)){c.offset=b}return h.query(c).done(function(a){return a}).catch(function(c){d.exception(c);return{types:[],proxies:[],limit:a,offset:b}})},K=function(a){var b={tools:a.types,proxies:a.proxies};return e.render("mod_lti/tool_list",b).done(function(a,b){return{html:a,js:b}})},L=function(){var b=u().trim();if(b){a(m.TOOL_URL).val("");C();t(b)}},M=function(){var b=u().trim();if(""===b){return a.Deferred().resolve()}var c=a(m.TOOL_CREATE_LTILEGACY_BUTTON);F(c);var e=i.isCartridge(b);e.always(function(){G(c)});e.done(function(c){if(c.iscartridge){a(m.TOOL_URL).val("");a(document).trigger(f.START_CARTRIDGE_REGISTRATION,b)}else{a(document).trigger(f.START_EXTERNAL_REGISTRATION,{url:b})}});e.fail(function(){k.get_string("errorbadurl","mod_lti").done(function(b){a(document).trigger(f.REGISTRATION_FEEDBACK,{message:b,error:!0})}).fail(d.exception)});return e},N=function(){a(document).on(f.NEW_TOOL_TYPE,function(){H()});a(document).on(f.START_EXTERNAL_REGISTRATION,function(){y();a(m.TOOL_URL).val("");C()});a(document).on(f.STOP_EXTERNAL_REGISTRATION,function(){D();A()});a(document).on(f.START_CARTRIDGE_REGISTRATION,function(a,b){z(b)});a(document).on(f.STOP_CARTRIDGE_REGISTRATION,function(){q().find(m.CARTRIDGE_REGISTRATION_FORM).removeAttr("data-cartridge-url");A()});a(document).on(f.REGISTRATION_FEEDBACK,function(a,b){E(b)});var b=a(m.TOOL_CREATE_LTILEGACY_BUTTON);b.click(function(a){a.preventDefault();M()});var c=a(m.TOOL_CREATE_BUTTON);c.click(function(a){a.preventDefault();L()})};return{init:function init(){N();H()}}}); +define ("mod_lti/tool_configure_controller",["jquery","core/ajax","core/paged_content_factory","core/notification","core/templates","mod_lti/events","mod_lti/keys","mod_lti/tool_types_and_proxies","mod_lti/tool_type","mod_lti/tool_proxy","core/str","core/config"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m={EXTERNAL_REGISTRATION_CONTAINER:"#external-registration-container",EXTERNAL_REGISTRATION_PAGE_CONTAINER:"#external-registration-page-container",EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER:"#external-registration-template-container",CARTRIDGE_REGISTRATION_CONTAINER:"#cartridge-registration-container",CARTRIDGE_REGISTRATION_FORM:"#cartridge-registration-form",ADD_TOOL_FORM:"#add-tool-form",TOOL_CARD_CONTAINER:"#tool-card-container",TOOL_LIST_CONTAINER:"#tool-list-container",TOOL_CREATE_BUTTON:"#tool-create-button",TOOL_CREATE_LTILEGACY_BUTTON:"#tool-createltilegacy-button",REGISTRATION_CHOICE_CONTAINER:"#registration-choice-container",TOOL_URL:"#tool-url"},n=function(){return a(m.TOOL_LIST_CONTAINER)},o=function(){return a(m.TOOL_CARD_CONTAINER)},p=function(){return a(m.EXTERNAL_REGISTRATION_CONTAINER)},q=function(){return a(m.CARTRIDGE_REGISTRATION_CONTAINER)},r=function(){return a(m.REGISTRATION_CHOICE_CONTAINER)},s=function(b){if(b.data&&"org.imsglobal.lti.close"===b.data.subject){a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();v();A();D();A();H()}},t=function(b){a(m.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass("hidden");var c=a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);c.append(a(""));y();window.addEventListener("message",s,!1)},u=function(){return a(m.TOOL_URL).val()},v=function(){p().addClass("hidden")},w=function(){q().addClass("hidden")},x=function(){r().addClass("hidden")},y=function(){w();x();p().removeClass("hidden");B(p())},z=function(a){v();x();var b=q();b.find("input").val("");b.removeClass("hidden");b.find(m.CARTRIDGE_REGISTRATION_FORM).attr("data-cartridge-url",a);B(b)},A=function(){v();w();r().removeClass("hidden");B(r())},B=function(a){var b=a.children().detach();b.appendTo(a)},C=function(){n().addClass("hidden")},D=function(){n().removeClass("hidden")},E=function(a){var b=a.error?"error":"success";d.addNotification({message:a.message,type:b})},F=function(a){a.addClass("loading")},G=function(a){a.removeClass("loading")},H=function(){M.cfg.js_pending("reloadToolList");var a=o(),b=n();I().done(function(d){c.createWithTotalAndLimit(d.count,60,function(a){return a.map(function(a){return J(a.limit,a.offset).then(function(a){return K(a)})})},{showFirstLast:!0}).done(function(b,c){e.replaceNodeContents(a,b,c)}).always(function(){G(b);M.cfg.js_complete("reloadToolList")})});F(b)},I=function(){return h.count({orphanedonly:!0}).done(function(a){return a}).catch(function(a){d.exception(a);return{count:0}})},J=function(a,b){var c={orphanedonly:!0};if(null!==a&&!Number.isNaN(a)){c.limit=a}if(null!==b&&!Number.isNaN(b)){c.offset=b}return h.query(c).done(function(a){return a}).catch(function(c){d.exception(c);return{types:[],proxies:[],limit:a,offset:b}})},K=function(a){var b={tools:a.types,proxies:a.proxies};return e.render("mod_lti/tool_list",b).done(function(a,b){return{html:a,js:b}})},L=function(){var b=u().trim();if(b){a(m.TOOL_URL).val("");C();t(b)}},N=function(){var b=u().trim();if(""===b){return a.Deferred().resolve()}var c=a(m.TOOL_CREATE_LTILEGACY_BUTTON);F(c);var e=i.isCartridge(b);e.always(function(){G(c)});e.done(function(c){if(c.iscartridge){a(m.TOOL_URL).val("");a(document).trigger(f.START_CARTRIDGE_REGISTRATION,b)}else{a(document).trigger(f.START_EXTERNAL_REGISTRATION,{url:b})}});e.fail(function(){k.get_string("errorbadurl","mod_lti").done(function(b){a(document).trigger(f.REGISTRATION_FEEDBACK,{message:b,error:!0})}).fail(d.exception)});return e},O=function(){a(document).on(f.NEW_TOOL_TYPE,function(){H()});a(document).on(f.START_EXTERNAL_REGISTRATION,function(){y();a(m.TOOL_URL).val("");C()});a(document).on(f.STOP_EXTERNAL_REGISTRATION,function(){D();A()});a(document).on(f.START_CARTRIDGE_REGISTRATION,function(a,b){z(b)});a(document).on(f.STOP_CARTRIDGE_REGISTRATION,function(){q().find(m.CARTRIDGE_REGISTRATION_FORM).removeAttr("data-cartridge-url");A()});a(document).on(f.REGISTRATION_FEEDBACK,function(a,b){E(b)});var b=a(m.TOOL_CREATE_LTILEGACY_BUTTON);b.click(function(a){a.preventDefault();N()});var c=a(m.TOOL_CREATE_BUTTON);c.click(function(a){a.preventDefault();L()})};return{init:function init(){O();H()}}}); //# sourceMappingURL=tool_configure_controller.min.js.map diff --git a/mod/lti/amd/build/tool_configure_controller.min.js.map b/mod/lti/amd/build/tool_configure_controller.min.js.map index fc5cdb71fcf..9c47c4365d3 100644 --- a/mod/lti/amd/build/tool_configure_controller.min.js.map +++ b/mod/lti/amd/build/tool_configure_controller.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tool_configure_controller.js"],"names":["define","$","ajax","pagedContentFactory","notification","templates","ltiEvents","KEYS","toolTypesAndProxies","toolType","toolProxy","str","config","SELECTORS","EXTERNAL_REGISTRATION_CONTAINER","EXTERNAL_REGISTRATION_PAGE_CONTAINER","EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER","CARTRIDGE_REGISTRATION_CONTAINER","CARTRIDGE_REGISTRATION_FORM","ADD_TOOL_FORM","TOOL_CARD_CONTAINER","TOOL_LIST_CONTAINER","TOOL_CREATE_BUTTON","TOOL_CREATE_LTILEGACY_BUTTON","REGISTRATION_CHOICE_CONTAINER","TOOL_URL","getToolListContainer","getToolCardContainer","getExternalRegistrationContainer","getCartridgeRegistrationContainer","getRegistrationChoiceContainer","closeLTIAdvRegistration","e","data","subject","empty","hideExternalRegistration","showRegistrationChoices","showToolList","reloadToolList","initiateRegistration","url","removeClass","container","append","encodeURIComponent","sesskey","showExternalRegistration","window","addEventListener","getToolURL","val","addClass","hideCartridgeRegistration","hideRegistrationChoices","screenReaderAnnounce","showCartridgeRegistration","find","attr","element","children","detach","appendTo","hideToolList","showRegistrationFeedback","type","error","addNotification","message","startLoading","stopLoading","cardContainer","listContainer","fetchToolCount","done","createWithTotalAndLimit","count","pagesData","map","pageData","fetchToolData","limit","offset","then","renderToolData","html","js","replaceNodeContents","always","catch","exception","args","Number","isNaN","query","context","tools","types","proxies","render","addLTIAdvTool","trim","addLTILegacyTool","Deferred","resolve","toolButton","promise","isCartridge","result","iscartridge","document","trigger","START_CARTRIDGE_REGISTRATION","START_EXTERNAL_REGISTRATION","fail","get_string","s","REGISTRATION_FEEDBACK","registerEventListeners","on","NEW_TOOL_TYPE","STOP_EXTERNAL_REGISTRATION","event","STOP_CARTRIDGE_REGISTRATION","removeAttr","addLegacyButton","click","preventDefault","addLTIButton","init"],"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 .\n\n/**\n * Standard Ajax wrapper for Moodle. It calls the central Ajax script,\n * which can call any existing webservice using the current session.\n * In addition, it can batch multiple requests and return multiple responses.\n *\n * @module mod_lti/tool_configure_controller\n * @copyright 2015 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification', 'core/templates', 'mod_lti/events',\n 'mod_lti/keys', 'mod_lti/tool_types_and_proxies', 'mod_lti/tool_type', 'mod_lti/tool_proxy', 'core/str', 'core/config'],\n function($, ajax,\n pagedContentFactory, notification, templates, ltiEvents, KEYS,\n toolTypesAndProxies, toolType, toolProxy, str, config) {\n\n var SELECTORS = {\n EXTERNAL_REGISTRATION_CONTAINER: '#external-registration-container',\n EXTERNAL_REGISTRATION_PAGE_CONTAINER: '#external-registration-page-container',\n EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER: '#external-registration-template-container',\n CARTRIDGE_REGISTRATION_CONTAINER: '#cartridge-registration-container',\n CARTRIDGE_REGISTRATION_FORM: '#cartridge-registration-form',\n ADD_TOOL_FORM: '#add-tool-form',\n TOOL_CARD_CONTAINER: '#tool-card-container',\n TOOL_LIST_CONTAINER: '#tool-list-container',\n TOOL_CREATE_BUTTON: '#tool-create-button',\n TOOL_CREATE_LTILEGACY_BUTTON: '#tool-createltilegacy-button',\n REGISTRATION_CHOICE_CONTAINER: '#registration-choice-container',\n TOOL_URL: '#tool-url'\n };\n\n /**\n * Get the tool list container element.\n *\n * @method getToolListContainer\n * @private\n * @return {Object} jQuery object\n */\n var getToolListContainer = function() {\n return $(SELECTORS.TOOL_LIST_CONTAINER);\n };\n\n /**\n * Get the tool card container element.\n *\n * @method getToolCardContainer\n * @private\n * @return {Object} jQuery object\n */\n const getToolCardContainer = function() {\n return $(SELECTORS.TOOL_CARD_CONTAINER);\n };\n\n /**\n * Get the external registration container element.\n *\n * @method getExternalRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getExternalRegistrationContainer = function() {\n return $(SELECTORS.EXTERNAL_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the cartridge registration container element.\n *\n * @method getCartridgeRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getCartridgeRegistrationContainer = function() {\n return $(SELECTORS.CARTRIDGE_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the registration choice container element.\n *\n * @method getRegistrationChoiceContainer\n * @private\n * @return {Object} jQuery object\n */\n var getRegistrationChoiceContainer = function() {\n return $(SELECTORS.REGISTRATION_CHOICE_CONTAINER);\n };\n\n /**\n * Close the LTI Advantage Registration IFrame.\n *\n * @private\n * @param {Object} e post message event sent from the registration frame.\n */\n var closeLTIAdvRegistration = function(e) {\n if (e.data && 'org.imsglobal.lti.close' === e.data.subject) {\n $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();\n hideExternalRegistration();\n showRegistrationChoices();\n showToolList();\n showRegistrationChoices();\n reloadToolList();\n }\n };\n\n /**\n * Load the external registration template and render it in the DOM and display it.\n *\n * @method initiateRegistration\n * @private\n * @param {String} url where to send the registration request\n */\n var initiateRegistration = function(url) {\n // Show the external registration page in an iframe.\n $(SELECTORS.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass('hidden');\n var container = $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);\n container.append($(\"\"));\n showExternalRegistration();\n window.addEventListener(\"message\", closeLTIAdvRegistration, false);\n };\n\n /**\n * Get the tool type URL.\n *\n * @method getToolURL\n * @private\n * @return {String} the tool type url\n */\n var getToolURL = function() {\n return $(SELECTORS.TOOL_URL).val();\n };\n\n /**\n * Hide the external registration container.\n *\n * @method hideExternalRegistration\n * @private\n */\n var hideExternalRegistration = function() {\n getExternalRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the cartridge registration container.\n *\n * @method hideCartridgeRegistration\n * @private\n */\n var hideCartridgeRegistration = function() {\n getCartridgeRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the registration choice container.\n *\n * @method hideRegistrationChoices\n * @private\n */\n var hideRegistrationChoices = function() {\n getRegistrationChoiceContainer().addClass('hidden');\n };\n\n /**\n * Display the external registration panel and hides the other\n * panels.\n *\n * @method showExternalRegistration\n * @private\n */\n var showExternalRegistration = function() {\n hideCartridgeRegistration();\n hideRegistrationChoices();\n getExternalRegistrationContainer().removeClass('hidden');\n screenReaderAnnounce(getExternalRegistrationContainer());\n };\n\n /**\n * Display the cartridge registration panel and hides the other\n * panels.\n *\n * @method showCartridgeRegistration\n * @param {String} url\n * @private\n */\n var showCartridgeRegistration = function(url) {\n hideExternalRegistration();\n hideRegistrationChoices();\n // Don't save the key and secret from the last tool.\n var container = getCartridgeRegistrationContainer();\n container.find('input').val('');\n container.removeClass('hidden');\n container.find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).attr('data-cartridge-url', url);\n screenReaderAnnounce(container);\n };\n\n /**\n * Display the registration choices panel and hides the other\n * panels.\n *\n * @method showRegistrationChoices\n * @private\n */\n var showRegistrationChoices = function() {\n hideExternalRegistration();\n hideCartridgeRegistration();\n getRegistrationChoiceContainer().removeClass('hidden');\n screenReaderAnnounce(getRegistrationChoiceContainer());\n };\n\n /**\n * JAWS does not notice visibility changes with aria-live.\n * Remove and add the content back to force it to read it out.\n * This function can be removed once JAWS supports visibility.\n *\n * @method screenReaderAnnounce\n * @param {Object} element\n * @private\n */\n var screenReaderAnnounce = function(element) {\n var children = element.children().detach();\n children.appendTo(element);\n };\n\n /**\n * Hides the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var hideToolList = function() {\n getToolListContainer().addClass('hidden');\n };\n\n /**\n * Display the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var showToolList = function() {\n getToolListContainer().removeClass('hidden');\n };\n\n /**\n * Display the registration feedback alert and hide the other panels.\n *\n * @method showRegistrationFeedback\n * @param {Object} data\n * @private\n */\n var showRegistrationFeedback = function(data) {\n var type = data.error ? 'error' : 'success';\n notification.addNotification({\n message: data.message,\n type: type\n });\n };\n\n /**\n * Show the loading animation\n *\n * @method startLoading\n * @private\n * @param {Object} element jQuery object\n */\n var startLoading = function(element) {\n element.addClass(\"loading\");\n };\n\n /**\n * Hide the loading animation\n *\n * @method stopLoading\n * @private\n * @param {Object} element jQuery object\n */\n var stopLoading = function(element) {\n element.removeClass(\"loading\");\n };\n\n /**\n * Refresh the list of tool types and render the new ones.\n *\n * @method reloadToolList\n * @private\n */\n var reloadToolList = function() {\n const cardContainer = getToolCardContainer();\n const listContainer = getToolListContainer();\n const limit = 60;\n // Get initial data with zero limit and offset.\n fetchToolCount().done(function(data) {\n pagedContentFactory.createWithTotalAndLimit(\n data.count,\n limit,\n function(pagesData) {\n return pagesData.map(function(pageData) {\n return fetchToolData(pageData.limit, pageData.offset)\n .then(function(data) {\n return renderToolData(data);\n });\n });\n },\n {\n 'showFirstLast': true\n })\n .done(function(html, js) {\n // Add the paged content into the page.\n templates.replaceNodeContents(cardContainer, html, js);\n })\n .always(stopLoading(listContainer));\n });\n startLoading(listContainer);\n };\n\n /**\n * Fetch the count of tool type and proxy datasets.\n *\n * @return {*|void}\n */\n const fetchToolCount = function() {\n return toolTypesAndProxies.count({'orphanedonly': true})\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'count': 0\n };\n });\n };\n\n /**\n * Fetch the data for tool type and proxy cards.\n *\n * @param {number} limit Maximum number of datasets to get.\n * @param {number} offset Offset count for fetching the data.\n * @return {*|void}\n */\n const fetchToolData = function(limit, offset) {\n const args = {'orphanedonly': true};\n // Only add limit and offset to args if they are integers and not null, otherwise defaults will be used.\n if (limit !== null && !Number.isNaN(limit)) {\n args.limit = limit;\n }\n if (offset !== null && !Number.isNaN(offset)) {\n args.offset = offset;\n }\n return toolTypesAndProxies.query(args)\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'types': [],\n 'proxies': [],\n 'limit': limit,\n 'offset': offset\n };\n });\n };\n\n /**\n * Render Tool and Proxy cards from data.\n *\n * @param {Object} data Contains arrays of data objects to populate cards.\n * @return {*}\n */\n const renderToolData = function(data) {\n const context = {\n tools: data.types,\n proxies: data.proxies,\n };\n return templates.render('mod_lti/tool_list', context)\n .done(function(html, js) {\n return {html, js};\n }\n );\n };\n\n /**\n * Start the LTI Advantage registration.\n *\n * @method addLTIAdvTool\n * @private\n */\n var addLTIAdvTool = function() {\n var url = getToolURL().trim();\n\n if (url) {\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n initiateRegistration(url);\n }\n\n };\n\n /**\n * Trigger appropriate registration process process for the user input\n * URL. It can either be a cartridge or a registration url.\n *\n * @method addLTILegacyTool\n * @private\n * @return {Promise} jQuery Deferred object\n */\n var addLTILegacyTool = function() {\n var url = getToolURL().trim();\n\n if (url === \"\") {\n return $.Deferred().resolve();\n }\n var toolButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n startLoading(toolButton);\n\n var promise = toolType.isCartridge(url);\n\n promise.always(function() {\n stopLoading(toolButton);\n });\n\n promise.done(function(result) {\n if (result.iscartridge) {\n $(SELECTORS.TOOL_URL).val('');\n $(document).trigger(ltiEvents.START_CARTRIDGE_REGISTRATION, url);\n } else {\n $(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION, {url: url});\n }\n });\n\n promise.fail(function() {\n str.get_string('errorbadurl', 'mod_lti')\n .done(function(s) {\n $(document).trigger(ltiEvents.REGISTRATION_FEEDBACK, {\n message: s,\n error: true\n });\n })\n .fail(notification.exception);\n });\n\n return promise;\n };\n\n /**\n * Sets up the listeners for user interaction on the page.\n *\n * @method registerEventListeners\n * @private\n */\n var registerEventListeners = function() {\n\n // These are events fired by the registration processes. Either\n // the cartridge registration or the external registration url.\n $(document).on(ltiEvents.NEW_TOOL_TYPE, function() {\n reloadToolList();\n });\n\n $(document).on(ltiEvents.START_EXTERNAL_REGISTRATION, function() {\n showExternalRegistration();\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n });\n\n $(document).on(ltiEvents.STOP_EXTERNAL_REGISTRATION, function() {\n showToolList();\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.START_CARTRIDGE_REGISTRATION, function(event, url) {\n showCartridgeRegistration(url);\n });\n\n $(document).on(ltiEvents.STOP_CARTRIDGE_REGISTRATION, function() {\n getCartridgeRegistrationContainer().find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).removeAttr('data-cartridge-url');\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.REGISTRATION_FEEDBACK, function(event, data) {\n showRegistrationFeedback(data);\n });\n\n var addLegacyButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n addLegacyButton.click(function(e) {\n e.preventDefault();\n addLTILegacyTool();\n });\n\n var addLTIButton = $(SELECTORS.TOOL_CREATE_BUTTON);\n addLTIButton.click(function(e) {\n e.preventDefault();\n addLTIAdvTool();\n });\n\n };\n\n return /** @alias module:mod_lti/cartridge_registration_form */ {\n\n /**\n * Initialise this module.\n */\n init: function() {\n registerEventListeners();\n reloadToolList();\n }\n };\n});\n"],"file":"tool_configure_controller.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/tool_configure_controller.js"],"names":["define","$","ajax","pagedContentFactory","notification","templates","ltiEvents","KEYS","toolTypesAndProxies","toolType","toolProxy","str","config","SELECTORS","EXTERNAL_REGISTRATION_CONTAINER","EXTERNAL_REGISTRATION_PAGE_CONTAINER","EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER","CARTRIDGE_REGISTRATION_CONTAINER","CARTRIDGE_REGISTRATION_FORM","ADD_TOOL_FORM","TOOL_CARD_CONTAINER","TOOL_LIST_CONTAINER","TOOL_CREATE_BUTTON","TOOL_CREATE_LTILEGACY_BUTTON","REGISTRATION_CHOICE_CONTAINER","TOOL_URL","getToolListContainer","getToolCardContainer","getExternalRegistrationContainer","getCartridgeRegistrationContainer","getRegistrationChoiceContainer","closeLTIAdvRegistration","e","data","subject","empty","hideExternalRegistration","showRegistrationChoices","showToolList","reloadToolList","initiateRegistration","url","removeClass","container","append","encodeURIComponent","sesskey","showExternalRegistration","window","addEventListener","getToolURL","val","addClass","hideCartridgeRegistration","hideRegistrationChoices","screenReaderAnnounce","showCartridgeRegistration","find","attr","element","children","detach","appendTo","hideToolList","showRegistrationFeedback","type","error","addNotification","message","startLoading","stopLoading","M","cfg","js_pending","cardContainer","listContainer","fetchToolCount","done","createWithTotalAndLimit","count","pagesData","map","pageData","fetchToolData","limit","offset","then","renderToolData","html","js","replaceNodeContents","always","js_complete","catch","exception","args","Number","isNaN","query","context","tools","types","proxies","render","addLTIAdvTool","trim","addLTILegacyTool","Deferred","resolve","toolButton","promise","isCartridge","result","iscartridge","document","trigger","START_CARTRIDGE_REGISTRATION","START_EXTERNAL_REGISTRATION","fail","get_string","s","REGISTRATION_FEEDBACK","registerEventListeners","on","NEW_TOOL_TYPE","STOP_EXTERNAL_REGISTRATION","event","STOP_CARTRIDGE_REGISTRATION","removeAttr","addLegacyButton","click","preventDefault","addLTIButton","init"],"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 .\n\n/**\n * Standard Ajax wrapper for Moodle. It calls the central Ajax script,\n * which can call any existing webservice using the current session.\n * In addition, it can batch multiple requests and return multiple responses.\n *\n * @module mod_lti/tool_configure_controller\n * @copyright 2015 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification', 'core/templates', 'mod_lti/events',\n 'mod_lti/keys', 'mod_lti/tool_types_and_proxies', 'mod_lti/tool_type', 'mod_lti/tool_proxy', 'core/str', 'core/config'],\n function($, ajax,\n pagedContentFactory, notification, templates, ltiEvents, KEYS,\n toolTypesAndProxies, toolType, toolProxy, str, config) {\n\n var SELECTORS = {\n EXTERNAL_REGISTRATION_CONTAINER: '#external-registration-container',\n EXTERNAL_REGISTRATION_PAGE_CONTAINER: '#external-registration-page-container',\n EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER: '#external-registration-template-container',\n CARTRIDGE_REGISTRATION_CONTAINER: '#cartridge-registration-container',\n CARTRIDGE_REGISTRATION_FORM: '#cartridge-registration-form',\n ADD_TOOL_FORM: '#add-tool-form',\n TOOL_CARD_CONTAINER: '#tool-card-container',\n TOOL_LIST_CONTAINER: '#tool-list-container',\n TOOL_CREATE_BUTTON: '#tool-create-button',\n TOOL_CREATE_LTILEGACY_BUTTON: '#tool-createltilegacy-button',\n REGISTRATION_CHOICE_CONTAINER: '#registration-choice-container',\n TOOL_URL: '#tool-url'\n };\n\n /**\n * Get the tool list container element.\n *\n * @method getToolListContainer\n * @private\n * @return {Object} jQuery object\n */\n var getToolListContainer = function() {\n return $(SELECTORS.TOOL_LIST_CONTAINER);\n };\n\n /**\n * Get the tool card container element.\n *\n * @method getToolCardContainer\n * @private\n * @return {Object} jQuery object\n */\n const getToolCardContainer = function() {\n return $(SELECTORS.TOOL_CARD_CONTAINER);\n };\n\n /**\n * Get the external registration container element.\n *\n * @method getExternalRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getExternalRegistrationContainer = function() {\n return $(SELECTORS.EXTERNAL_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the cartridge registration container element.\n *\n * @method getCartridgeRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getCartridgeRegistrationContainer = function() {\n return $(SELECTORS.CARTRIDGE_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the registration choice container element.\n *\n * @method getRegistrationChoiceContainer\n * @private\n * @return {Object} jQuery object\n */\n var getRegistrationChoiceContainer = function() {\n return $(SELECTORS.REGISTRATION_CHOICE_CONTAINER);\n };\n\n /**\n * Close the LTI Advantage Registration IFrame.\n *\n * @private\n * @param {Object} e post message event sent from the registration frame.\n */\n var closeLTIAdvRegistration = function(e) {\n if (e.data && 'org.imsglobal.lti.close' === e.data.subject) {\n $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();\n hideExternalRegistration();\n showRegistrationChoices();\n showToolList();\n showRegistrationChoices();\n reloadToolList();\n }\n };\n\n /**\n * Load the external registration template and render it in the DOM and display it.\n *\n * @method initiateRegistration\n * @private\n * @param {String} url where to send the registration request\n */\n var initiateRegistration = function(url) {\n // Show the external registration page in an iframe.\n $(SELECTORS.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass('hidden');\n var container = $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);\n container.append($(\"\"));\n showExternalRegistration();\n window.addEventListener(\"message\", closeLTIAdvRegistration, false);\n };\n\n /**\n * Get the tool type URL.\n *\n * @method getToolURL\n * @private\n * @return {String} the tool type url\n */\n var getToolURL = function() {\n return $(SELECTORS.TOOL_URL).val();\n };\n\n /**\n * Hide the external registration container.\n *\n * @method hideExternalRegistration\n * @private\n */\n var hideExternalRegistration = function() {\n getExternalRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the cartridge registration container.\n *\n * @method hideCartridgeRegistration\n * @private\n */\n var hideCartridgeRegistration = function() {\n getCartridgeRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the registration choice container.\n *\n * @method hideRegistrationChoices\n * @private\n */\n var hideRegistrationChoices = function() {\n getRegistrationChoiceContainer().addClass('hidden');\n };\n\n /**\n * Display the external registration panel and hides the other\n * panels.\n *\n * @method showExternalRegistration\n * @private\n */\n var showExternalRegistration = function() {\n hideCartridgeRegistration();\n hideRegistrationChoices();\n getExternalRegistrationContainer().removeClass('hidden');\n screenReaderAnnounce(getExternalRegistrationContainer());\n };\n\n /**\n * Display the cartridge registration panel and hides the other\n * panels.\n *\n * @method showCartridgeRegistration\n * @param {String} url\n * @private\n */\n var showCartridgeRegistration = function(url) {\n hideExternalRegistration();\n hideRegistrationChoices();\n // Don't save the key and secret from the last tool.\n var container = getCartridgeRegistrationContainer();\n container.find('input').val('');\n container.removeClass('hidden');\n container.find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).attr('data-cartridge-url', url);\n screenReaderAnnounce(container);\n };\n\n /**\n * Display the registration choices panel and hides the other\n * panels.\n *\n * @method showRegistrationChoices\n * @private\n */\n var showRegistrationChoices = function() {\n hideExternalRegistration();\n hideCartridgeRegistration();\n getRegistrationChoiceContainer().removeClass('hidden');\n screenReaderAnnounce(getRegistrationChoiceContainer());\n };\n\n /**\n * JAWS does not notice visibility changes with aria-live.\n * Remove and add the content back to force it to read it out.\n * This function can be removed once JAWS supports visibility.\n *\n * @method screenReaderAnnounce\n * @param {Object} element\n * @private\n */\n var screenReaderAnnounce = function(element) {\n var children = element.children().detach();\n children.appendTo(element);\n };\n\n /**\n * Hides the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var hideToolList = function() {\n getToolListContainer().addClass('hidden');\n };\n\n /**\n * Display the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var showToolList = function() {\n getToolListContainer().removeClass('hidden');\n };\n\n /**\n * Display the registration feedback alert and hide the other panels.\n *\n * @method showRegistrationFeedback\n * @param {Object} data\n * @private\n */\n var showRegistrationFeedback = function(data) {\n var type = data.error ? 'error' : 'success';\n notification.addNotification({\n message: data.message,\n type: type\n });\n };\n\n /**\n * Show the loading animation\n *\n * @method startLoading\n * @private\n * @param {Object} element jQuery object\n */\n var startLoading = function(element) {\n element.addClass(\"loading\");\n };\n\n /**\n * Hide the loading animation\n *\n * @method stopLoading\n * @private\n * @param {Object} element jQuery object\n */\n var stopLoading = function(element) {\n element.removeClass(\"loading\");\n };\n\n /**\n * Refresh the list of tool types and render the new ones.\n *\n * @method reloadToolList\n * @private\n */\n var reloadToolList = function() {\n // Behat tests should wait for the tool list to load.\n M.cfg.js_pending('reloadToolList');\n\n const cardContainer = getToolCardContainer();\n const listContainer = getToolListContainer();\n const limit = 60;\n // Get initial data with zero limit and offset.\n fetchToolCount().done(function(data) {\n pagedContentFactory.createWithTotalAndLimit(\n data.count,\n limit,\n function(pagesData) {\n return pagesData.map(function(pageData) {\n return fetchToolData(pageData.limit, pageData.offset)\n .then(function(data) {\n return renderToolData(data);\n });\n });\n },\n {\n 'showFirstLast': true\n })\n .done(function(html, js) {\n // Add the paged content into the page.\n templates.replaceNodeContents(cardContainer, html, js);\n })\n .always(function() {\n stopLoading(listContainer);\n M.cfg.js_complete('reloadToolList');\n });\n });\n startLoading(listContainer);\n };\n\n /**\n * Fetch the count of tool type and proxy datasets.\n *\n * @return {*|void}\n */\n const fetchToolCount = function() {\n return toolTypesAndProxies.count({'orphanedonly': true})\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'count': 0\n };\n });\n };\n\n /**\n * Fetch the data for tool type and proxy cards.\n *\n * @param {number} limit Maximum number of datasets to get.\n * @param {number} offset Offset count for fetching the data.\n * @return {*|void}\n */\n const fetchToolData = function(limit, offset) {\n const args = {'orphanedonly': true};\n // Only add limit and offset to args if they are integers and not null, otherwise defaults will be used.\n if (limit !== null && !Number.isNaN(limit)) {\n args.limit = limit;\n }\n if (offset !== null && !Number.isNaN(offset)) {\n args.offset = offset;\n }\n return toolTypesAndProxies.query(args)\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'types': [],\n 'proxies': [],\n 'limit': limit,\n 'offset': offset\n };\n });\n };\n\n /**\n * Render Tool and Proxy cards from data.\n *\n * @param {Object} data Contains arrays of data objects to populate cards.\n * @return {*}\n */\n const renderToolData = function(data) {\n const context = {\n tools: data.types,\n proxies: data.proxies,\n };\n return templates.render('mod_lti/tool_list', context)\n .done(function(html, js) {\n return {html, js};\n }\n );\n };\n\n /**\n * Start the LTI Advantage registration.\n *\n * @method addLTIAdvTool\n * @private\n */\n var addLTIAdvTool = function() {\n var url = getToolURL().trim();\n\n if (url) {\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n initiateRegistration(url);\n }\n\n };\n\n /**\n * Trigger appropriate registration process process for the user input\n * URL. It can either be a cartridge or a registration url.\n *\n * @method addLTILegacyTool\n * @private\n * @return {Promise} jQuery Deferred object\n */\n var addLTILegacyTool = function() {\n var url = getToolURL().trim();\n\n if (url === \"\") {\n return $.Deferred().resolve();\n }\n var toolButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n startLoading(toolButton);\n\n var promise = toolType.isCartridge(url);\n\n promise.always(function() {\n stopLoading(toolButton);\n });\n\n promise.done(function(result) {\n if (result.iscartridge) {\n $(SELECTORS.TOOL_URL).val('');\n $(document).trigger(ltiEvents.START_CARTRIDGE_REGISTRATION, url);\n } else {\n $(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION, {url: url});\n }\n });\n\n promise.fail(function() {\n str.get_string('errorbadurl', 'mod_lti')\n .done(function(s) {\n $(document).trigger(ltiEvents.REGISTRATION_FEEDBACK, {\n message: s,\n error: true\n });\n })\n .fail(notification.exception);\n });\n\n return promise;\n };\n\n /**\n * Sets up the listeners for user interaction on the page.\n *\n * @method registerEventListeners\n * @private\n */\n var registerEventListeners = function() {\n\n // These are events fired by the registration processes. Either\n // the cartridge registration or the external registration url.\n $(document).on(ltiEvents.NEW_TOOL_TYPE, function() {\n reloadToolList();\n });\n\n $(document).on(ltiEvents.START_EXTERNAL_REGISTRATION, function() {\n showExternalRegistration();\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n });\n\n $(document).on(ltiEvents.STOP_EXTERNAL_REGISTRATION, function() {\n showToolList();\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.START_CARTRIDGE_REGISTRATION, function(event, url) {\n showCartridgeRegistration(url);\n });\n\n $(document).on(ltiEvents.STOP_CARTRIDGE_REGISTRATION, function() {\n getCartridgeRegistrationContainer().find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).removeAttr('data-cartridge-url');\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.REGISTRATION_FEEDBACK, function(event, data) {\n showRegistrationFeedback(data);\n });\n\n var addLegacyButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n addLegacyButton.click(function(e) {\n e.preventDefault();\n addLTILegacyTool();\n });\n\n var addLTIButton = $(SELECTORS.TOOL_CREATE_BUTTON);\n addLTIButton.click(function(e) {\n e.preventDefault();\n addLTIAdvTool();\n });\n\n };\n\n return /** @alias module:mod_lti/cartridge_registration_form */ {\n\n /**\n * Initialise this module.\n */\n init: function() {\n registerEventListeners();\n reloadToolList();\n }\n };\n});\n"],"file":"tool_configure_controller.min.js"} \ No newline at end of file diff --git a/mod/lti/amd/src/tool_configure_controller.js b/mod/lti/amd/src/tool_configure_controller.js index e184f991656..9fa4bb0d537 100644 --- a/mod/lti/amd/src/tool_configure_controller.js +++ b/mod/lti/amd/src/tool_configure_controller.js @@ -299,6 +299,9 @@ define(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification' * @private */ var reloadToolList = function() { + // Behat tests should wait for the tool list to load. + M.cfg.js_pending('reloadToolList'); + const cardContainer = getToolCardContainer(); const listContainer = getToolListContainer(); const limit = 60; @@ -322,7 +325,10 @@ define(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification' // Add the paged content into the page. templates.replaceNodeContents(cardContainer, html, js); }) - .always(stopLoading(listContainer)); + .always(function() { + stopLoading(listContainer); + M.cfg.js_complete('reloadToolList'); + }); }); startLoading(listContainer); }; diff --git a/mod/lti/tests/behat/viewtools.feature b/mod/lti/tests/behat/viewtools.feature index 0827135c7e3..6e2506d237f 100644 --- a/mod/lti/tests/behat/viewtools.feature +++ b/mod/lti/tests/behat/viewtools.feature @@ -14,6 +14,7 @@ Feature: Navigate existing LTI tool types using pagination Scenario: View first page of tool types. Given I log in as "admin" When I navigate to "Plugins > Activity modules > External tool > Manage tools" in site administration + And I wait until the page is ready Then I should see "Test tool 30" And "Test tool 70" "text" should not be visible @@ -21,7 +22,9 @@ Feature: Navigate existing LTI tool types using pagination Scenario: View second page of tool types using page 2 button. Given I log in as "admin" When I navigate to "Plugins > Activity modules > External tool > Manage tools" in site administration + And I wait until the page is ready And I click on "2" "link" + And I wait until the page is ready Then I should see "Test tool 70" And "Test tool 30" "text" should not be visible @@ -29,6 +32,8 @@ Feature: Navigate existing LTI tool types using pagination Scenario: View last page of tool types using page 2 button. Given I log in as "admin" When I navigate to "Plugins > Activity modules > External tool > Manage tools" in site administration + And I wait until the page is ready And I click on "Last" "link" + And I wait until the page is ready Then I should see "Test tool 70" And "Test tool 30" "text" should not be visible From 47c9289420bc8864bf9b340f4bce9e192a37a2e5 Mon Sep 17 00:00:00 2001 From: Ilya Tregubov Date: Fri, 19 Nov 2021 09:13:03 +0200 Subject: [PATCH 2/2] MDL-69092 mod_lti: Fix typo. --- mod/lti/amd/build/tool_configure_controller.min.js | 2 +- mod/lti/amd/build/tool_configure_controller.min.js.map | 2 +- mod/lti/amd/src/tool_configure_controller.js | 4 ++-- mod/lti/tests/behat/viewtools.feature | 5 ----- 4 files changed, 4 insertions(+), 9 deletions(-) diff --git a/mod/lti/amd/build/tool_configure_controller.min.js b/mod/lti/amd/build/tool_configure_controller.min.js index 6ad1f7bfa0c..d5c1459567f 100644 --- a/mod/lti/amd/build/tool_configure_controller.min.js +++ b/mod/lti/amd/build/tool_configure_controller.min.js @@ -1,2 +1,2 @@ -define ("mod_lti/tool_configure_controller",["jquery","core/ajax","core/paged_content_factory","core/notification","core/templates","mod_lti/events","mod_lti/keys","mod_lti/tool_types_and_proxies","mod_lti/tool_type","mod_lti/tool_proxy","core/str","core/config"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m={EXTERNAL_REGISTRATION_CONTAINER:"#external-registration-container",EXTERNAL_REGISTRATION_PAGE_CONTAINER:"#external-registration-page-container",EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER:"#external-registration-template-container",CARTRIDGE_REGISTRATION_CONTAINER:"#cartridge-registration-container",CARTRIDGE_REGISTRATION_FORM:"#cartridge-registration-form",ADD_TOOL_FORM:"#add-tool-form",TOOL_CARD_CONTAINER:"#tool-card-container",TOOL_LIST_CONTAINER:"#tool-list-container",TOOL_CREATE_BUTTON:"#tool-create-button",TOOL_CREATE_LTILEGACY_BUTTON:"#tool-createltilegacy-button",REGISTRATION_CHOICE_CONTAINER:"#registration-choice-container",TOOL_URL:"#tool-url"},n=function(){return a(m.TOOL_LIST_CONTAINER)},o=function(){return a(m.TOOL_CARD_CONTAINER)},p=function(){return a(m.EXTERNAL_REGISTRATION_CONTAINER)},q=function(){return a(m.CARTRIDGE_REGISTRATION_CONTAINER)},r=function(){return a(m.REGISTRATION_CHOICE_CONTAINER)},s=function(b){if(b.data&&"org.imsglobal.lti.close"===b.data.subject){a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();v();A();D();A();H()}},t=function(b){a(m.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass("hidden");var c=a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);c.append(a(""));y();window.addEventListener("message",s,!1)},u=function(){return a(m.TOOL_URL).val()},v=function(){p().addClass("hidden")},w=function(){q().addClass("hidden")},x=function(){r().addClass("hidden")},y=function(){w();x();p().removeClass("hidden");B(p())},z=function(a){v();x();var b=q();b.find("input").val("");b.removeClass("hidden");b.find(m.CARTRIDGE_REGISTRATION_FORM).attr("data-cartridge-url",a);B(b)},A=function(){v();w();r().removeClass("hidden");B(r())},B=function(a){var b=a.children().detach();b.appendTo(a)},C=function(){n().addClass("hidden")},D=function(){n().removeClass("hidden")},E=function(a){var b=a.error?"error":"success";d.addNotification({message:a.message,type:b})},F=function(a){a.addClass("loading")},G=function(a){a.removeClass("loading")},H=function(){M.cfg.js_pending("reloadToolList");var a=o(),b=n();I().done(function(d){c.createWithTotalAndLimit(d.count,60,function(a){return a.map(function(a){return J(a.limit,a.offset).then(function(a){return K(a)})})},{showFirstLast:!0}).done(function(b,c){e.replaceNodeContents(a,b,c)}).always(function(){G(b);M.cfg.js_complete("reloadToolList")})});F(b)},I=function(){return h.count({orphanedonly:!0}).done(function(a){return a}).catch(function(a){d.exception(a);return{count:0}})},J=function(a,b){var c={orphanedonly:!0};if(null!==a&&!Number.isNaN(a)){c.limit=a}if(null!==b&&!Number.isNaN(b)){c.offset=b}return h.query(c).done(function(a){return a}).catch(function(c){d.exception(c);return{types:[],proxies:[],limit:a,offset:b}})},K=function(a){var b={tools:a.types,proxies:a.proxies};return e.render("mod_lti/tool_list",b).done(function(a,b){return{html:a,js:b}})},L=function(){var b=u().trim();if(b){a(m.TOOL_URL).val("");C();t(b)}},N=function(){var b=u().trim();if(""===b){return a.Deferred().resolve()}var c=a(m.TOOL_CREATE_LTILEGACY_BUTTON);F(c);var e=i.isCartridge(b);e.always(function(){G(c)});e.done(function(c){if(c.iscartridge){a(m.TOOL_URL).val("");a(document).trigger(f.START_CARTRIDGE_REGISTRATION,b)}else{a(document).trigger(f.START_EXTERNAL_REGISTRATION,{url:b})}});e.fail(function(){k.get_string("errorbadurl","mod_lti").done(function(b){a(document).trigger(f.REGISTRATION_FEEDBACK,{message:b,error:!0})}).fail(d.exception)});return e},O=function(){a(document).on(f.NEW_TOOL_TYPE,function(){H()});a(document).on(f.START_EXTERNAL_REGISTRATION,function(){y();a(m.TOOL_URL).val("");C()});a(document).on(f.STOP_EXTERNAL_REGISTRATION,function(){D();A()});a(document).on(f.START_CARTRIDGE_REGISTRATION,function(a,b){z(b)});a(document).on(f.STOP_CARTRIDGE_REGISTRATION,function(){q().find(m.CARTRIDGE_REGISTRATION_FORM).removeAttr("data-cartridge-url");A()});a(document).on(f.REGISTRATION_FEEDBACK,function(a,b){E(b)});var b=a(m.TOOL_CREATE_LTILEGACY_BUTTON);b.click(function(a){a.preventDefault();N()});var c=a(m.TOOL_CREATE_BUTTON);c.click(function(a){a.preventDefault();L()})};return{init:function init(){O();H()}}}); +define ("mod_lti/tool_configure_controller",["jquery","core/ajax","core/paged_content_factory","core/notification","core/templates","mod_lti/events","mod_lti/keys","mod_lti/tool_types_and_proxies","mod_lti/tool_type","mod_lti/tool_proxy","core/str","core/config"],function(a,b,c,d,e,f,g,h,i,j,k,l){var m={EXTERNAL_REGISTRATION_CONTAINER:"#external-registration-container",EXTERNAL_REGISTRATION_PAGE_CONTAINER:"#external-registration-page-container",EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER:"#external-registration-template-container",CARTRIDGE_REGISTRATION_CONTAINER:"#cartridge-registration-container",CARTRIDGE_REGISTRATION_FORM:"#cartridge-registration-form",ADD_TOOL_FORM:"#add-tool-form",TOOL_CARD_CONTAINER:"#tool-card-container",TOOL_LIST_CONTAINER:"#tool-list-container",TOOL_CREATE_BUTTON:"#tool-create-button",TOOL_CREATE_LTILEGACY_BUTTON:"#tool-createltilegacy-button",REGISTRATION_CHOICE_CONTAINER:"#registration-choice-container",TOOL_URL:"#tool-url"},n=function(){return a(m.TOOL_LIST_CONTAINER)},o=function(){return a(m.TOOL_CARD_CONTAINER)},p=function(){return a(m.EXTERNAL_REGISTRATION_CONTAINER)},q=function(){return a(m.CARTRIDGE_REGISTRATION_CONTAINER)},r=function(){return a(m.REGISTRATION_CHOICE_CONTAINER)},s=function(b){if(b.data&&"org.imsglobal.lti.close"===b.data.subject){a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();v();A();D();A();H()}},t=function(b){a(m.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass("hidden");var c=a(m.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);c.append(a(""));y();window.addEventListener("message",s,!1)},u=function(){return a(m.TOOL_URL).val()},v=function(){p().addClass("hidden")},w=function(){q().addClass("hidden")},x=function(){r().addClass("hidden")},y=function(){w();x();p().removeClass("hidden");B(p())},z=function(a){v();x();var b=q();b.find("input").val("");b.removeClass("hidden");b.find(m.CARTRIDGE_REGISTRATION_FORM).attr("data-cartridge-url",a);B(b)},A=function(){v();w();r().removeClass("hidden");B(r())},B=function(a){var b=a.children().detach();b.appendTo(a)},C=function(){n().addClass("hidden")},D=function(){n().removeClass("hidden")},E=function(a){var b=a.error?"error":"success";d.addNotification({message:a.message,type:b})},F=function(a){a.addClass("loading")},G=function(a){a.removeClass("loading")},H=function(){M.util.js_pending("reloadToolList");var a=o(),b=n();I().done(function(d){c.createWithTotalAndLimit(d.count,60,function(a){return a.map(function(a){return J(a.limit,a.offset).then(function(a){return K(a)})})},{showFirstLast:!0}).done(function(b,c){e.replaceNodeContents(a,b,c)}).always(function(){G(b);M.util.js_complete("reloadToolList")})});F(b)},I=function(){return h.count({orphanedonly:!0}).done(function(a){return a}).catch(function(a){d.exception(a);return{count:0}})},J=function(a,b){var c={orphanedonly:!0};if(null!==a&&!Number.isNaN(a)){c.limit=a}if(null!==b&&!Number.isNaN(b)){c.offset=b}return h.query(c).done(function(a){return a}).catch(function(c){d.exception(c);return{types:[],proxies:[],limit:a,offset:b}})},K=function(a){var b={tools:a.types,proxies:a.proxies};return e.render("mod_lti/tool_list",b).done(function(a,b){return{html:a,js:b}})},L=function(){var b=u().trim();if(b){a(m.TOOL_URL).val("");C();t(b)}},N=function(){var b=u().trim();if(""===b){return a.Deferred().resolve()}var c=a(m.TOOL_CREATE_LTILEGACY_BUTTON);F(c);var e=i.isCartridge(b);e.always(function(){G(c)});e.done(function(c){if(c.iscartridge){a(m.TOOL_URL).val("");a(document).trigger(f.START_CARTRIDGE_REGISTRATION,b)}else{a(document).trigger(f.START_EXTERNAL_REGISTRATION,{url:b})}});e.fail(function(){k.get_string("errorbadurl","mod_lti").done(function(b){a(document).trigger(f.REGISTRATION_FEEDBACK,{message:b,error:!0})}).fail(d.exception)});return e},O=function(){a(document).on(f.NEW_TOOL_TYPE,function(){H()});a(document).on(f.START_EXTERNAL_REGISTRATION,function(){y();a(m.TOOL_URL).val("");C()});a(document).on(f.STOP_EXTERNAL_REGISTRATION,function(){D();A()});a(document).on(f.START_CARTRIDGE_REGISTRATION,function(a,b){z(b)});a(document).on(f.STOP_CARTRIDGE_REGISTRATION,function(){q().find(m.CARTRIDGE_REGISTRATION_FORM).removeAttr("data-cartridge-url");A()});a(document).on(f.REGISTRATION_FEEDBACK,function(a,b){E(b)});var b=a(m.TOOL_CREATE_LTILEGACY_BUTTON);b.click(function(a){a.preventDefault();N()});var c=a(m.TOOL_CREATE_BUTTON);c.click(function(a){a.preventDefault();L()})};return{init:function init(){O();H()}}}); //# sourceMappingURL=tool_configure_controller.min.js.map diff --git a/mod/lti/amd/build/tool_configure_controller.min.js.map b/mod/lti/amd/build/tool_configure_controller.min.js.map index 9c47c4365d3..c452436c760 100644 --- a/mod/lti/amd/build/tool_configure_controller.min.js.map +++ b/mod/lti/amd/build/tool_configure_controller.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/tool_configure_controller.js"],"names":["define","$","ajax","pagedContentFactory","notification","templates","ltiEvents","KEYS","toolTypesAndProxies","toolType","toolProxy","str","config","SELECTORS","EXTERNAL_REGISTRATION_CONTAINER","EXTERNAL_REGISTRATION_PAGE_CONTAINER","EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER","CARTRIDGE_REGISTRATION_CONTAINER","CARTRIDGE_REGISTRATION_FORM","ADD_TOOL_FORM","TOOL_CARD_CONTAINER","TOOL_LIST_CONTAINER","TOOL_CREATE_BUTTON","TOOL_CREATE_LTILEGACY_BUTTON","REGISTRATION_CHOICE_CONTAINER","TOOL_URL","getToolListContainer","getToolCardContainer","getExternalRegistrationContainer","getCartridgeRegistrationContainer","getRegistrationChoiceContainer","closeLTIAdvRegistration","e","data","subject","empty","hideExternalRegistration","showRegistrationChoices","showToolList","reloadToolList","initiateRegistration","url","removeClass","container","append","encodeURIComponent","sesskey","showExternalRegistration","window","addEventListener","getToolURL","val","addClass","hideCartridgeRegistration","hideRegistrationChoices","screenReaderAnnounce","showCartridgeRegistration","find","attr","element","children","detach","appendTo","hideToolList","showRegistrationFeedback","type","error","addNotification","message","startLoading","stopLoading","M","cfg","js_pending","cardContainer","listContainer","fetchToolCount","done","createWithTotalAndLimit","count","pagesData","map","pageData","fetchToolData","limit","offset","then","renderToolData","html","js","replaceNodeContents","always","js_complete","catch","exception","args","Number","isNaN","query","context","tools","types","proxies","render","addLTIAdvTool","trim","addLTILegacyTool","Deferred","resolve","toolButton","promise","isCartridge","result","iscartridge","document","trigger","START_CARTRIDGE_REGISTRATION","START_EXTERNAL_REGISTRATION","fail","get_string","s","REGISTRATION_FEEDBACK","registerEventListeners","on","NEW_TOOL_TYPE","STOP_EXTERNAL_REGISTRATION","event","STOP_CARTRIDGE_REGISTRATION","removeAttr","addLegacyButton","click","preventDefault","addLTIButton","init"],"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 .\n\n/**\n * Standard Ajax wrapper for Moodle. It calls the central Ajax script,\n * which can call any existing webservice using the current session.\n * In addition, it can batch multiple requests and return multiple responses.\n *\n * @module mod_lti/tool_configure_controller\n * @copyright 2015 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification', 'core/templates', 'mod_lti/events',\n 'mod_lti/keys', 'mod_lti/tool_types_and_proxies', 'mod_lti/tool_type', 'mod_lti/tool_proxy', 'core/str', 'core/config'],\n function($, ajax,\n pagedContentFactory, notification, templates, ltiEvents, KEYS,\n toolTypesAndProxies, toolType, toolProxy, str, config) {\n\n var SELECTORS = {\n EXTERNAL_REGISTRATION_CONTAINER: '#external-registration-container',\n EXTERNAL_REGISTRATION_PAGE_CONTAINER: '#external-registration-page-container',\n EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER: '#external-registration-template-container',\n CARTRIDGE_REGISTRATION_CONTAINER: '#cartridge-registration-container',\n CARTRIDGE_REGISTRATION_FORM: '#cartridge-registration-form',\n ADD_TOOL_FORM: '#add-tool-form',\n TOOL_CARD_CONTAINER: '#tool-card-container',\n TOOL_LIST_CONTAINER: '#tool-list-container',\n TOOL_CREATE_BUTTON: '#tool-create-button',\n TOOL_CREATE_LTILEGACY_BUTTON: '#tool-createltilegacy-button',\n REGISTRATION_CHOICE_CONTAINER: '#registration-choice-container',\n TOOL_URL: '#tool-url'\n };\n\n /**\n * Get the tool list container element.\n *\n * @method getToolListContainer\n * @private\n * @return {Object} jQuery object\n */\n var getToolListContainer = function() {\n return $(SELECTORS.TOOL_LIST_CONTAINER);\n };\n\n /**\n * Get the tool card container element.\n *\n * @method getToolCardContainer\n * @private\n * @return {Object} jQuery object\n */\n const getToolCardContainer = function() {\n return $(SELECTORS.TOOL_CARD_CONTAINER);\n };\n\n /**\n * Get the external registration container element.\n *\n * @method getExternalRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getExternalRegistrationContainer = function() {\n return $(SELECTORS.EXTERNAL_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the cartridge registration container element.\n *\n * @method getCartridgeRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getCartridgeRegistrationContainer = function() {\n return $(SELECTORS.CARTRIDGE_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the registration choice container element.\n *\n * @method getRegistrationChoiceContainer\n * @private\n * @return {Object} jQuery object\n */\n var getRegistrationChoiceContainer = function() {\n return $(SELECTORS.REGISTRATION_CHOICE_CONTAINER);\n };\n\n /**\n * Close the LTI Advantage Registration IFrame.\n *\n * @private\n * @param {Object} e post message event sent from the registration frame.\n */\n var closeLTIAdvRegistration = function(e) {\n if (e.data && 'org.imsglobal.lti.close' === e.data.subject) {\n $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();\n hideExternalRegistration();\n showRegistrationChoices();\n showToolList();\n showRegistrationChoices();\n reloadToolList();\n }\n };\n\n /**\n * Load the external registration template and render it in the DOM and display it.\n *\n * @method initiateRegistration\n * @private\n * @param {String} url where to send the registration request\n */\n var initiateRegistration = function(url) {\n // Show the external registration page in an iframe.\n $(SELECTORS.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass('hidden');\n var container = $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);\n container.append($(\"\"));\n showExternalRegistration();\n window.addEventListener(\"message\", closeLTIAdvRegistration, false);\n };\n\n /**\n * Get the tool type URL.\n *\n * @method getToolURL\n * @private\n * @return {String} the tool type url\n */\n var getToolURL = function() {\n return $(SELECTORS.TOOL_URL).val();\n };\n\n /**\n * Hide the external registration container.\n *\n * @method hideExternalRegistration\n * @private\n */\n var hideExternalRegistration = function() {\n getExternalRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the cartridge registration container.\n *\n * @method hideCartridgeRegistration\n * @private\n */\n var hideCartridgeRegistration = function() {\n getCartridgeRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the registration choice container.\n *\n * @method hideRegistrationChoices\n * @private\n */\n var hideRegistrationChoices = function() {\n getRegistrationChoiceContainer().addClass('hidden');\n };\n\n /**\n * Display the external registration panel and hides the other\n * panels.\n *\n * @method showExternalRegistration\n * @private\n */\n var showExternalRegistration = function() {\n hideCartridgeRegistration();\n hideRegistrationChoices();\n getExternalRegistrationContainer().removeClass('hidden');\n screenReaderAnnounce(getExternalRegistrationContainer());\n };\n\n /**\n * Display the cartridge registration panel and hides the other\n * panels.\n *\n * @method showCartridgeRegistration\n * @param {String} url\n * @private\n */\n var showCartridgeRegistration = function(url) {\n hideExternalRegistration();\n hideRegistrationChoices();\n // Don't save the key and secret from the last tool.\n var container = getCartridgeRegistrationContainer();\n container.find('input').val('');\n container.removeClass('hidden');\n container.find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).attr('data-cartridge-url', url);\n screenReaderAnnounce(container);\n };\n\n /**\n * Display the registration choices panel and hides the other\n * panels.\n *\n * @method showRegistrationChoices\n * @private\n */\n var showRegistrationChoices = function() {\n hideExternalRegistration();\n hideCartridgeRegistration();\n getRegistrationChoiceContainer().removeClass('hidden');\n screenReaderAnnounce(getRegistrationChoiceContainer());\n };\n\n /**\n * JAWS does not notice visibility changes with aria-live.\n * Remove and add the content back to force it to read it out.\n * This function can be removed once JAWS supports visibility.\n *\n * @method screenReaderAnnounce\n * @param {Object} element\n * @private\n */\n var screenReaderAnnounce = function(element) {\n var children = element.children().detach();\n children.appendTo(element);\n };\n\n /**\n * Hides the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var hideToolList = function() {\n getToolListContainer().addClass('hidden');\n };\n\n /**\n * Display the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var showToolList = function() {\n getToolListContainer().removeClass('hidden');\n };\n\n /**\n * Display the registration feedback alert and hide the other panels.\n *\n * @method showRegistrationFeedback\n * @param {Object} data\n * @private\n */\n var showRegistrationFeedback = function(data) {\n var type = data.error ? 'error' : 'success';\n notification.addNotification({\n message: data.message,\n type: type\n });\n };\n\n /**\n * Show the loading animation\n *\n * @method startLoading\n * @private\n * @param {Object} element jQuery object\n */\n var startLoading = function(element) {\n element.addClass(\"loading\");\n };\n\n /**\n * Hide the loading animation\n *\n * @method stopLoading\n * @private\n * @param {Object} element jQuery object\n */\n var stopLoading = function(element) {\n element.removeClass(\"loading\");\n };\n\n /**\n * Refresh the list of tool types and render the new ones.\n *\n * @method reloadToolList\n * @private\n */\n var reloadToolList = function() {\n // Behat tests should wait for the tool list to load.\n M.cfg.js_pending('reloadToolList');\n\n const cardContainer = getToolCardContainer();\n const listContainer = getToolListContainer();\n const limit = 60;\n // Get initial data with zero limit and offset.\n fetchToolCount().done(function(data) {\n pagedContentFactory.createWithTotalAndLimit(\n data.count,\n limit,\n function(pagesData) {\n return pagesData.map(function(pageData) {\n return fetchToolData(pageData.limit, pageData.offset)\n .then(function(data) {\n return renderToolData(data);\n });\n });\n },\n {\n 'showFirstLast': true\n })\n .done(function(html, js) {\n // Add the paged content into the page.\n templates.replaceNodeContents(cardContainer, html, js);\n })\n .always(function() {\n stopLoading(listContainer);\n M.cfg.js_complete('reloadToolList');\n });\n });\n startLoading(listContainer);\n };\n\n /**\n * Fetch the count of tool type and proxy datasets.\n *\n * @return {*|void}\n */\n const fetchToolCount = function() {\n return toolTypesAndProxies.count({'orphanedonly': true})\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'count': 0\n };\n });\n };\n\n /**\n * Fetch the data for tool type and proxy cards.\n *\n * @param {number} limit Maximum number of datasets to get.\n * @param {number} offset Offset count for fetching the data.\n * @return {*|void}\n */\n const fetchToolData = function(limit, offset) {\n const args = {'orphanedonly': true};\n // Only add limit and offset to args if they are integers and not null, otherwise defaults will be used.\n if (limit !== null && !Number.isNaN(limit)) {\n args.limit = limit;\n }\n if (offset !== null && !Number.isNaN(offset)) {\n args.offset = offset;\n }\n return toolTypesAndProxies.query(args)\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'types': [],\n 'proxies': [],\n 'limit': limit,\n 'offset': offset\n };\n });\n };\n\n /**\n * Render Tool and Proxy cards from data.\n *\n * @param {Object} data Contains arrays of data objects to populate cards.\n * @return {*}\n */\n const renderToolData = function(data) {\n const context = {\n tools: data.types,\n proxies: data.proxies,\n };\n return templates.render('mod_lti/tool_list', context)\n .done(function(html, js) {\n return {html, js};\n }\n );\n };\n\n /**\n * Start the LTI Advantage registration.\n *\n * @method addLTIAdvTool\n * @private\n */\n var addLTIAdvTool = function() {\n var url = getToolURL().trim();\n\n if (url) {\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n initiateRegistration(url);\n }\n\n };\n\n /**\n * Trigger appropriate registration process process for the user input\n * URL. It can either be a cartridge or a registration url.\n *\n * @method addLTILegacyTool\n * @private\n * @return {Promise} jQuery Deferred object\n */\n var addLTILegacyTool = function() {\n var url = getToolURL().trim();\n\n if (url === \"\") {\n return $.Deferred().resolve();\n }\n var toolButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n startLoading(toolButton);\n\n var promise = toolType.isCartridge(url);\n\n promise.always(function() {\n stopLoading(toolButton);\n });\n\n promise.done(function(result) {\n if (result.iscartridge) {\n $(SELECTORS.TOOL_URL).val('');\n $(document).trigger(ltiEvents.START_CARTRIDGE_REGISTRATION, url);\n } else {\n $(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION, {url: url});\n }\n });\n\n promise.fail(function() {\n str.get_string('errorbadurl', 'mod_lti')\n .done(function(s) {\n $(document).trigger(ltiEvents.REGISTRATION_FEEDBACK, {\n message: s,\n error: true\n });\n })\n .fail(notification.exception);\n });\n\n return promise;\n };\n\n /**\n * Sets up the listeners for user interaction on the page.\n *\n * @method registerEventListeners\n * @private\n */\n var registerEventListeners = function() {\n\n // These are events fired by the registration processes. Either\n // the cartridge registration or the external registration url.\n $(document).on(ltiEvents.NEW_TOOL_TYPE, function() {\n reloadToolList();\n });\n\n $(document).on(ltiEvents.START_EXTERNAL_REGISTRATION, function() {\n showExternalRegistration();\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n });\n\n $(document).on(ltiEvents.STOP_EXTERNAL_REGISTRATION, function() {\n showToolList();\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.START_CARTRIDGE_REGISTRATION, function(event, url) {\n showCartridgeRegistration(url);\n });\n\n $(document).on(ltiEvents.STOP_CARTRIDGE_REGISTRATION, function() {\n getCartridgeRegistrationContainer().find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).removeAttr('data-cartridge-url');\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.REGISTRATION_FEEDBACK, function(event, data) {\n showRegistrationFeedback(data);\n });\n\n var addLegacyButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n addLegacyButton.click(function(e) {\n e.preventDefault();\n addLTILegacyTool();\n });\n\n var addLTIButton = $(SELECTORS.TOOL_CREATE_BUTTON);\n addLTIButton.click(function(e) {\n e.preventDefault();\n addLTIAdvTool();\n });\n\n };\n\n return /** @alias module:mod_lti/cartridge_registration_form */ {\n\n /**\n * Initialise this module.\n */\n init: function() {\n registerEventListeners();\n reloadToolList();\n }\n };\n});\n"],"file":"tool_configure_controller.min.js"} \ No newline at end of file +{"version":3,"sources":["../src/tool_configure_controller.js"],"names":["define","$","ajax","pagedContentFactory","notification","templates","ltiEvents","KEYS","toolTypesAndProxies","toolType","toolProxy","str","config","SELECTORS","EXTERNAL_REGISTRATION_CONTAINER","EXTERNAL_REGISTRATION_PAGE_CONTAINER","EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER","CARTRIDGE_REGISTRATION_CONTAINER","CARTRIDGE_REGISTRATION_FORM","ADD_TOOL_FORM","TOOL_CARD_CONTAINER","TOOL_LIST_CONTAINER","TOOL_CREATE_BUTTON","TOOL_CREATE_LTILEGACY_BUTTON","REGISTRATION_CHOICE_CONTAINER","TOOL_URL","getToolListContainer","getToolCardContainer","getExternalRegistrationContainer","getCartridgeRegistrationContainer","getRegistrationChoiceContainer","closeLTIAdvRegistration","e","data","subject","empty","hideExternalRegistration","showRegistrationChoices","showToolList","reloadToolList","initiateRegistration","url","removeClass","container","append","encodeURIComponent","sesskey","showExternalRegistration","window","addEventListener","getToolURL","val","addClass","hideCartridgeRegistration","hideRegistrationChoices","screenReaderAnnounce","showCartridgeRegistration","find","attr","element","children","detach","appendTo","hideToolList","showRegistrationFeedback","type","error","addNotification","message","startLoading","stopLoading","M","util","js_pending","cardContainer","listContainer","fetchToolCount","done","createWithTotalAndLimit","count","pagesData","map","pageData","fetchToolData","limit","offset","then","renderToolData","html","js","replaceNodeContents","always","js_complete","catch","exception","args","Number","isNaN","query","context","tools","types","proxies","render","addLTIAdvTool","trim","addLTILegacyTool","Deferred","resolve","toolButton","promise","isCartridge","result","iscartridge","document","trigger","START_CARTRIDGE_REGISTRATION","START_EXTERNAL_REGISTRATION","fail","get_string","s","REGISTRATION_FEEDBACK","registerEventListeners","on","NEW_TOOL_TYPE","STOP_EXTERNAL_REGISTRATION","event","STOP_CARTRIDGE_REGISTRATION","removeAttr","addLegacyButton","click","preventDefault","addLTIButton","init"],"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 .\n\n/**\n * Standard Ajax wrapper for Moodle. It calls the central Ajax script,\n * which can call any existing webservice using the current session.\n * In addition, it can batch multiple requests and return multiple responses.\n *\n * @module mod_lti/tool_configure_controller\n * @copyright 2015 Ryan Wyllie \n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n * @since 3.1\n */\ndefine(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification', 'core/templates', 'mod_lti/events',\n 'mod_lti/keys', 'mod_lti/tool_types_and_proxies', 'mod_lti/tool_type', 'mod_lti/tool_proxy', 'core/str', 'core/config'],\n function($, ajax,\n pagedContentFactory, notification, templates, ltiEvents, KEYS,\n toolTypesAndProxies, toolType, toolProxy, str, config) {\n\n var SELECTORS = {\n EXTERNAL_REGISTRATION_CONTAINER: '#external-registration-container',\n EXTERNAL_REGISTRATION_PAGE_CONTAINER: '#external-registration-page-container',\n EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER: '#external-registration-template-container',\n CARTRIDGE_REGISTRATION_CONTAINER: '#cartridge-registration-container',\n CARTRIDGE_REGISTRATION_FORM: '#cartridge-registration-form',\n ADD_TOOL_FORM: '#add-tool-form',\n TOOL_CARD_CONTAINER: '#tool-card-container',\n TOOL_LIST_CONTAINER: '#tool-list-container',\n TOOL_CREATE_BUTTON: '#tool-create-button',\n TOOL_CREATE_LTILEGACY_BUTTON: '#tool-createltilegacy-button',\n REGISTRATION_CHOICE_CONTAINER: '#registration-choice-container',\n TOOL_URL: '#tool-url'\n };\n\n /**\n * Get the tool list container element.\n *\n * @method getToolListContainer\n * @private\n * @return {Object} jQuery object\n */\n var getToolListContainer = function() {\n return $(SELECTORS.TOOL_LIST_CONTAINER);\n };\n\n /**\n * Get the tool card container element.\n *\n * @method getToolCardContainer\n * @private\n * @return {Object} jQuery object\n */\n const getToolCardContainer = function() {\n return $(SELECTORS.TOOL_CARD_CONTAINER);\n };\n\n /**\n * Get the external registration container element.\n *\n * @method getExternalRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getExternalRegistrationContainer = function() {\n return $(SELECTORS.EXTERNAL_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the cartridge registration container element.\n *\n * @method getCartridgeRegistrationContainer\n * @private\n * @return {Object} jQuery object\n */\n var getCartridgeRegistrationContainer = function() {\n return $(SELECTORS.CARTRIDGE_REGISTRATION_CONTAINER);\n };\n\n /**\n * Get the registration choice container element.\n *\n * @method getRegistrationChoiceContainer\n * @private\n * @return {Object} jQuery object\n */\n var getRegistrationChoiceContainer = function() {\n return $(SELECTORS.REGISTRATION_CHOICE_CONTAINER);\n };\n\n /**\n * Close the LTI Advantage Registration IFrame.\n *\n * @private\n * @param {Object} e post message event sent from the registration frame.\n */\n var closeLTIAdvRegistration = function(e) {\n if (e.data && 'org.imsglobal.lti.close' === e.data.subject) {\n $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER).empty();\n hideExternalRegistration();\n showRegistrationChoices();\n showToolList();\n showRegistrationChoices();\n reloadToolList();\n }\n };\n\n /**\n * Load the external registration template and render it in the DOM and display it.\n *\n * @method initiateRegistration\n * @private\n * @param {String} url where to send the registration request\n */\n var initiateRegistration = function(url) {\n // Show the external registration page in an iframe.\n $(SELECTORS.EXTERNAL_REGISTRATION_PAGE_CONTAINER).removeClass('hidden');\n var container = $(SELECTORS.EXTERNAL_REGISTRATION_TEMPLATE_CONTAINER);\n container.append($(\"\"));\n showExternalRegistration();\n window.addEventListener(\"message\", closeLTIAdvRegistration, false);\n };\n\n /**\n * Get the tool type URL.\n *\n * @method getToolURL\n * @private\n * @return {String} the tool type url\n */\n var getToolURL = function() {\n return $(SELECTORS.TOOL_URL).val();\n };\n\n /**\n * Hide the external registration container.\n *\n * @method hideExternalRegistration\n * @private\n */\n var hideExternalRegistration = function() {\n getExternalRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the cartridge registration container.\n *\n * @method hideCartridgeRegistration\n * @private\n */\n var hideCartridgeRegistration = function() {\n getCartridgeRegistrationContainer().addClass('hidden');\n };\n\n /**\n * Hide the registration choice container.\n *\n * @method hideRegistrationChoices\n * @private\n */\n var hideRegistrationChoices = function() {\n getRegistrationChoiceContainer().addClass('hidden');\n };\n\n /**\n * Display the external registration panel and hides the other\n * panels.\n *\n * @method showExternalRegistration\n * @private\n */\n var showExternalRegistration = function() {\n hideCartridgeRegistration();\n hideRegistrationChoices();\n getExternalRegistrationContainer().removeClass('hidden');\n screenReaderAnnounce(getExternalRegistrationContainer());\n };\n\n /**\n * Display the cartridge registration panel and hides the other\n * panels.\n *\n * @method showCartridgeRegistration\n * @param {String} url\n * @private\n */\n var showCartridgeRegistration = function(url) {\n hideExternalRegistration();\n hideRegistrationChoices();\n // Don't save the key and secret from the last tool.\n var container = getCartridgeRegistrationContainer();\n container.find('input').val('');\n container.removeClass('hidden');\n container.find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).attr('data-cartridge-url', url);\n screenReaderAnnounce(container);\n };\n\n /**\n * Display the registration choices panel and hides the other\n * panels.\n *\n * @method showRegistrationChoices\n * @private\n */\n var showRegistrationChoices = function() {\n hideExternalRegistration();\n hideCartridgeRegistration();\n getRegistrationChoiceContainer().removeClass('hidden');\n screenReaderAnnounce(getRegistrationChoiceContainer());\n };\n\n /**\n * JAWS does not notice visibility changes with aria-live.\n * Remove and add the content back to force it to read it out.\n * This function can be removed once JAWS supports visibility.\n *\n * @method screenReaderAnnounce\n * @param {Object} element\n * @private\n */\n var screenReaderAnnounce = function(element) {\n var children = element.children().detach();\n children.appendTo(element);\n };\n\n /**\n * Hides the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var hideToolList = function() {\n getToolListContainer().addClass('hidden');\n };\n\n /**\n * Display the list of tool types.\n *\n * @method hideToolList\n * @private\n */\n var showToolList = function() {\n getToolListContainer().removeClass('hidden');\n };\n\n /**\n * Display the registration feedback alert and hide the other panels.\n *\n * @method showRegistrationFeedback\n * @param {Object} data\n * @private\n */\n var showRegistrationFeedback = function(data) {\n var type = data.error ? 'error' : 'success';\n notification.addNotification({\n message: data.message,\n type: type\n });\n };\n\n /**\n * Show the loading animation\n *\n * @method startLoading\n * @private\n * @param {Object} element jQuery object\n */\n var startLoading = function(element) {\n element.addClass(\"loading\");\n };\n\n /**\n * Hide the loading animation\n *\n * @method stopLoading\n * @private\n * @param {Object} element jQuery object\n */\n var stopLoading = function(element) {\n element.removeClass(\"loading\");\n };\n\n /**\n * Refresh the list of tool types and render the new ones.\n *\n * @method reloadToolList\n * @private\n */\n var reloadToolList = function() {\n // Behat tests should wait for the tool list to load.\n M.util.js_pending('reloadToolList');\n\n const cardContainer = getToolCardContainer();\n const listContainer = getToolListContainer();\n const limit = 60;\n // Get initial data with zero limit and offset.\n fetchToolCount().done(function(data) {\n pagedContentFactory.createWithTotalAndLimit(\n data.count,\n limit,\n function(pagesData) {\n return pagesData.map(function(pageData) {\n return fetchToolData(pageData.limit, pageData.offset)\n .then(function(data) {\n return renderToolData(data);\n });\n });\n },\n {\n 'showFirstLast': true\n })\n .done(function(html, js) {\n // Add the paged content into the page.\n templates.replaceNodeContents(cardContainer, html, js);\n })\n .always(function() {\n stopLoading(listContainer);\n M.util.js_complete('reloadToolList');\n });\n });\n startLoading(listContainer);\n };\n\n /**\n * Fetch the count of tool type and proxy datasets.\n *\n * @return {*|void}\n */\n const fetchToolCount = function() {\n return toolTypesAndProxies.count({'orphanedonly': true})\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'count': 0\n };\n });\n };\n\n /**\n * Fetch the data for tool type and proxy cards.\n *\n * @param {number} limit Maximum number of datasets to get.\n * @param {number} offset Offset count for fetching the data.\n * @return {*|void}\n */\n const fetchToolData = function(limit, offset) {\n const args = {'orphanedonly': true};\n // Only add limit and offset to args if they are integers and not null, otherwise defaults will be used.\n if (limit !== null && !Number.isNaN(limit)) {\n args.limit = limit;\n }\n if (offset !== null && !Number.isNaN(offset)) {\n args.offset = offset;\n }\n return toolTypesAndProxies.query(args)\n .done(function(data) {\n return data;\n }).catch(function(error) {\n // Add debug message, then return empty data.\n notification.exception(error);\n return {\n 'types': [],\n 'proxies': [],\n 'limit': limit,\n 'offset': offset\n };\n });\n };\n\n /**\n * Render Tool and Proxy cards from data.\n *\n * @param {Object} data Contains arrays of data objects to populate cards.\n * @return {*}\n */\n const renderToolData = function(data) {\n const context = {\n tools: data.types,\n proxies: data.proxies,\n };\n return templates.render('mod_lti/tool_list', context)\n .done(function(html, js) {\n return {html, js};\n }\n );\n };\n\n /**\n * Start the LTI Advantage registration.\n *\n * @method addLTIAdvTool\n * @private\n */\n var addLTIAdvTool = function() {\n var url = getToolURL().trim();\n\n if (url) {\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n initiateRegistration(url);\n }\n\n };\n\n /**\n * Trigger appropriate registration process process for the user input\n * URL. It can either be a cartridge or a registration url.\n *\n * @method addLTILegacyTool\n * @private\n * @return {Promise} jQuery Deferred object\n */\n var addLTILegacyTool = function() {\n var url = getToolURL().trim();\n\n if (url === \"\") {\n return $.Deferred().resolve();\n }\n var toolButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n startLoading(toolButton);\n\n var promise = toolType.isCartridge(url);\n\n promise.always(function() {\n stopLoading(toolButton);\n });\n\n promise.done(function(result) {\n if (result.iscartridge) {\n $(SELECTORS.TOOL_URL).val('');\n $(document).trigger(ltiEvents.START_CARTRIDGE_REGISTRATION, url);\n } else {\n $(document).trigger(ltiEvents.START_EXTERNAL_REGISTRATION, {url: url});\n }\n });\n\n promise.fail(function() {\n str.get_string('errorbadurl', 'mod_lti')\n .done(function(s) {\n $(document).trigger(ltiEvents.REGISTRATION_FEEDBACK, {\n message: s,\n error: true\n });\n })\n .fail(notification.exception);\n });\n\n return promise;\n };\n\n /**\n * Sets up the listeners for user interaction on the page.\n *\n * @method registerEventListeners\n * @private\n */\n var registerEventListeners = function() {\n\n // These are events fired by the registration processes. Either\n // the cartridge registration or the external registration url.\n $(document).on(ltiEvents.NEW_TOOL_TYPE, function() {\n reloadToolList();\n });\n\n $(document).on(ltiEvents.START_EXTERNAL_REGISTRATION, function() {\n showExternalRegistration();\n $(SELECTORS.TOOL_URL).val('');\n hideToolList();\n });\n\n $(document).on(ltiEvents.STOP_EXTERNAL_REGISTRATION, function() {\n showToolList();\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.START_CARTRIDGE_REGISTRATION, function(event, url) {\n showCartridgeRegistration(url);\n });\n\n $(document).on(ltiEvents.STOP_CARTRIDGE_REGISTRATION, function() {\n getCartridgeRegistrationContainer().find(SELECTORS.CARTRIDGE_REGISTRATION_FORM).removeAttr('data-cartridge-url');\n showRegistrationChoices();\n });\n\n $(document).on(ltiEvents.REGISTRATION_FEEDBACK, function(event, data) {\n showRegistrationFeedback(data);\n });\n\n var addLegacyButton = $(SELECTORS.TOOL_CREATE_LTILEGACY_BUTTON);\n addLegacyButton.click(function(e) {\n e.preventDefault();\n addLTILegacyTool();\n });\n\n var addLTIButton = $(SELECTORS.TOOL_CREATE_BUTTON);\n addLTIButton.click(function(e) {\n e.preventDefault();\n addLTIAdvTool();\n });\n\n };\n\n return /** @alias module:mod_lti/cartridge_registration_form */ {\n\n /**\n * Initialise this module.\n */\n init: function() {\n registerEventListeners();\n reloadToolList();\n }\n };\n});\n"],"file":"tool_configure_controller.min.js"} \ No newline at end of file diff --git a/mod/lti/amd/src/tool_configure_controller.js b/mod/lti/amd/src/tool_configure_controller.js index 9fa4bb0d537..1526b587069 100644 --- a/mod/lti/amd/src/tool_configure_controller.js +++ b/mod/lti/amd/src/tool_configure_controller.js @@ -300,7 +300,7 @@ define(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification' */ var reloadToolList = function() { // Behat tests should wait for the tool list to load. - M.cfg.js_pending('reloadToolList'); + M.util.js_pending('reloadToolList'); const cardContainer = getToolCardContainer(); const listContainer = getToolListContainer(); @@ -327,7 +327,7 @@ define(['jquery', 'core/ajax', 'core/paged_content_factory', 'core/notification' }) .always(function() { stopLoading(listContainer); - M.cfg.js_complete('reloadToolList'); + M.util.js_complete('reloadToolList'); }); }); startLoading(listContainer); diff --git a/mod/lti/tests/behat/viewtools.feature b/mod/lti/tests/behat/viewtools.feature index 6e2506d237f..0827135c7e3 100644 --- a/mod/lti/tests/behat/viewtools.feature +++ b/mod/lti/tests/behat/viewtools.feature @@ -14,7 +14,6 @@ Feature: Navigate existing LTI tool types using pagination Scenario: View first page of tool types. Given I log in as "admin" When I navigate to "Plugins > Activity modules > External tool > Manage tools" in site administration - And I wait until the page is ready Then I should see "Test tool 30" And "Test tool 70" "text" should not be visible @@ -22,9 +21,7 @@ Feature: Navigate existing LTI tool types using pagination Scenario: View second page of tool types using page 2 button. Given I log in as "admin" When I navigate to "Plugins > Activity modules > External tool > Manage tools" in site administration - And I wait until the page is ready And I click on "2" "link" - And I wait until the page is ready Then I should see "Test tool 70" And "Test tool 30" "text" should not be visible @@ -32,8 +29,6 @@ Feature: Navigate existing LTI tool types using pagination Scenario: View last page of tool types using page 2 button. Given I log in as "admin" When I navigate to "Plugins > Activity modules > External tool > Manage tools" in site administration - And I wait until the page is ready And I click on "Last" "link" - And I wait until the page is ready Then I should see "Test tool 70" And "Test tool 30" "text" should not be visible