{"version":3,"file":"fragment.min.js","sources":["https:\/\/iie-academy.org\/lib\/amd\/src\/fragment.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 .\n\n\/**\n * A way to call HTML fragments to be inserted as required via JavaScript.\n *\n * @module core\/fragment\n * @copyright 2016 Adrian Greeve \n * @license http:\/\/www.gnu.org\/copyleft\/gpl.html GNU GPL v3 or later\n * @since 3.1\n *\/\ndefine(['jquery', 'core\/ajax'], function($, ajax) {\n\n \/**\n * Loads an HTML fragment through a callback.\n *\n * @method loadFragment\n * @param {string} component Component where callback is located.\n * @param {string} callback Callback function name.\n * @param {integer} contextid Context ID of the fragment.\n * @param {object} params Parameters for the callback.\n * @return {Promise} JQuery promise object resolved when the fragment has been loaded.\n *\/\n var loadFragment = function(component, callback, contextid, params) {\n \/\/ Change params into required webservice format.\n var formattedparams = [];\n for (var index in params) {\n formattedparams.push({\n name: index,\n value: params[index]\n });\n }\n\n return ajax.call([{\n methodname: 'core_get_fragment',\n args: {\n component: component,\n callback: callback,\n contextid: contextid,\n args: formattedparams\n }\n }])[0];\n };\n\n \/**\n * Converts the JS that was received from collecting JS requirements on the $PAGE so it can be added to the existing page\n *\n * @param {string} js\n * @return {string}\n *\/\n var processCollectedJavascript = function(js) {\n var jsNodes = $(js);\n var allScript = '';\n jsNodes.each(function(index, scriptNode) {\n scriptNode = $(scriptNode);\n var tagName = scriptNode.prop('tagName');\n if (tagName && (tagName.toLowerCase() == 'script')) {\n if (scriptNode.attr('src')) {\n \/\/ We only reload the script if it was not loaded already.\n var exists = false;\n $('script').each(function(index, s) {\n if ($(s).attr('src') == scriptNode.attr('src')) {\n exists = true;\n }\n return !exists;\n });\n if (!exists) {\n allScript += ' { ';\n allScript += ' node = document.createElement(\"script\"); ';\n allScript += ' node.type = \"text\/javascript\"; ';\n allScript += ' node.src = decodeURI(\"' + encodeURI(scriptNode.attr('src')) + '\"); ';\n allScript += ' document.getElementsByTagName(\"head\")[0].appendChild(node); ';\n allScript += ' } ';\n }\n } else {\n allScript += ' ' + scriptNode.text();\n }\n }\n });\n return allScript;\n };\n\n return {\n \/**\n * Appends HTML and JavaScript fragments to specified nodes.\n * Callbacks called by this AMD module are responsible for doing the appropriate security checks\n * to access the information that is returned. This only does minimal validation on the context.\n *\n * @method fragmentAppend\n * @param {string} component Component where callback is located.\n * @param {string} callback Callback function name.\n * @param {integer} contextid Context ID of the fragment.\n * @param {object} params Parameters for the callback.\n * @return {Deferred} new promise that is resolved with the html and js.\n *\/\n loadFragment: function(component, callback, contextid, params) {\n var promise = $.Deferred();\n loadFragment(component, callback, contextid, params).then(function(data) {\n promise.resolve(data.html, processCollectedJavascript(data.javascript));\n }).fail(function(ex) {\n promise.reject(ex);\n });\n return promise.promise();\n },\n\n \/**\n * Converts the JS that was received from collecting JS requirements on the $PAGE so it can be added to the existing page\n *\n * @param {string} js\n * @return {string}\n *\/\n processCollectedJavascript: function(js) {\n return processCollectedJavascript(js);\n }\n };\n});\n"],"names":["define","$","ajax","processCollectedJavascript","js","jsNodes","allScript","each","index","scriptNode","tagName","prop","toLowerCase","attr","exists","s","encodeURI","text","loadFragment","component","callback","contextid","params","promise","Deferred","formattedparams","push","name","value","call","methodname","args","then","data","resolve","html","javascript","fail","ex","reject"],"mappings":";;;;;;;;AAuBAA,uBAAO,CAAC,SAAU,cAAc,SAASC,EAAGC,UAuCpCC,2BAA6B,SAASC,QAClCC,QAAUJ,EAAEG,IACZE,UAAY,UAChBD,QAAQE,MAAK,SAASC,MAAOC,gBAErBC,SADJD,WAAaR,EAAEQ,aACUE,KAAK,cAC1BD,SAAqC,UAAzBA,QAAQE,iBAChBH,WAAWI,KAAK,OAAQ,KAEpBC,QAAS,EACbb,EAAE,UAAUM,MAAK,SAASC,MAAOO,UACzBd,EAAEc,GAAGF,KAAK,QAAUJ,WAAWI,KAAK,SACpCC,QAAS,IAELA,UAEPA,SACDR,WAAa,MACbA,WAAa,6CACbA,WAAa,mCACbA,WAAa,0BAA4BU,UAAUP,WAAWI,KAAK,QAAU,OAC7EP,WAAa,gEACbA,WAAa,YAGjBA,WAAa,IAAMG,WAAWQ,UAInCX,iBAGJ,CAaHY,aAAc,SAASC,UAAWC,SAAUC,UAAWC,YAC\/CC,QAAUtB,EAAEuB,kBAzEL,SAASL,UAAWC,SAAUC,UAAWC,YAEpDG,gBAAkB,OACjB,IAAIjB,SAASc,OACdG,gBAAgBC,KAAK,CACjBC,KAAMnB,MACNoB,MAAON,OAAOd,gBAIfN,KAAK2B,KAAK,CAAC,CACdC,WAAY,oBACZC,KAAM,CACFZ,UAAWA,UACXC,SAAUA,SACVC,UAAWA,UACXU,KAAMN,oBAEV,GAwDAP,CAAaC,UAAWC,SAAUC,UAAWC,QAAQU,MAAK,SAASC,MAC\/DV,QAAQW,QAAQD,KAAKE,KAAMhC,2BAA2B8B,KAAKG,gBAC5DC,MAAK,SAASC,IACbf,QAAQgB,OAAOD,OAEZf,QAAQA,WASnBpB,2BAA4B,SAASC,WAC1BD,2BAA2BC"}