1 |
efrain |
1 |
{"version":3,"file":"model.min.js","sources":["../src/model.js"],"sourcesContent":["// This file is part of Moodle - http://moodle.org/\n//\n// Moodle is free software: you can redistribute it and/or modify\n// it under the terms of the GNU General Public License as published by\n// the Free Software Foundation, either version 3 of the License, or\n// (at your option) any later version.\n//\n// Moodle is distributed in the hope that it will be useful,\n// but WITHOUT ANY WARRANTY; without even the implied warranty of\n// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n// GNU General Public License for more details.\n//\n// You should have received a copy of the GNU General Public License\n// along with Moodle. If not, see <http://www.gnu.org/licenses/>.\n\n/**\n * AMD module for model actions confirmation.\n *\n * @module tool_analytics/model\n * @copyright 2017 David Monllao\n * @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\ndefine([\n 'jquery', 'core/str', 'core/log', 'core/notification', 'core/modal_save_cancel',\n 'core/modal_cancel', 'core/modal_events', 'core/templates'],\n function($, Str, log, Notification, ModalSaveCancel, ModalCancel, ModalEvents, Templates) {\n\n /**\n * List of actions that require confirmation and confirmation message.\n */\n var actionsList = {\n clear: {\n title: {\n key: 'clearpredictions',\n component: 'tool_analytics'\n }, body: {\n key: 'clearmodelpredictions',\n component: 'tool_analytics'\n }\n\n },\n 'delete': {\n title: {\n key: 'delete',\n component: 'tool_analytics'\n }, body: {\n key: 'deletemodelconfirmation',\n component: 'tool_analytics'\n }\n }\n };\n\n /**\n * Returns the model name.\n *\n * @param {Object} actionItem The action item DOM node.\n * @return {String}\n */\n var getModelName = function(actionItem) {\n var wrap = $(actionItem).closest('[data-model-name]');\n\n if (wrap.length) {\n return wrap.attr('data-model-name');\n\n } else {\n log.error('Unexpected DOM error - unable to obtain the model name');\n return '';\n }\n };\n\n /** @alias module:tool_analytics/model */\n return {\n\n /**\n * Displays a confirm modal window before executing the action.\n *\n * @param {String} actionId\n * @param {String} actionType\n */\n confirmAction: function(actionId, actionType) {\n $('[data-action-id=\"' + actionId + '\"]').on('click', function(ev) {\n ev.preventDefault();\n\n var a = $(ev.currentTarget);\n\n if (typeof actionsList[actionType] === \"undefined\") {\n log.error('Action \"' + actionType + '\" is not allowed.');\n return;\n }\n\n var reqStrings = [\n actionsList[actionType].title,\n actionsList[actionType].body\n ];\n reqStrings[1].param = getModelName(a);\n\n var stringsPromise = Str.get_strings(reqStrings);\n var modalPromise = ModalSaveCancel.create({});\n\n $.when(stringsPromise, modalPromise).then(function(strings, modal) {\n modal.setTitle(strings[0]);\n modal.setBody(strings[1]);\n modal.setSaveButtonText(strings[0]);\n modal.getRoot().on(ModalEvents.save, function() {\n window.location.href = a.attr('href');\n });\n modal.show();\n return modal;\n }).fail(Notification.exception);\n });\n },\n\n /**\n * Displays evaluation mode and time-splitting method choices.\n *\n * @param {String} actionId\n * @param {Boolean} trainedOnlyExternally\n */\n selectEvaluationOptions: function(actionId, trainedOnlyExternally) {\n $('[data-action-id=\"' + actionId + '\"]').on('click', function(ev) {\n ev.preventDefault();\n\n var a = $(ev.currentTarget);\n\n var timeSplittingMethods = $(this).attr('data-timesplitting-methods');\n\n ModalSaveCancel.create({\n title: Str.get_string('evaluatemodel', 'tool_analytics'),\n body: Templates.render('tool_analytics/evaluation_options', {\n trainedexternally: trainedOnlyExternally,\n timesplittingmethods: JSON.parse(timeSplittingMethods)\n }),\n removeOnClose: true,\n buttons: {\n save: Str.get_string('evaluate', 'tool_analytics'),\n },\n show: true,\n })\n .then((modal) => {\n modal.getRoot().on(ModalEvents.save, function() {\n // Evaluation mode.\n var evaluationMode = $(\"input[name='evaluationmode']:checked\").val();\n if (evaluationMode == 'trainedmodel') {\n a.attr('href', a.attr('href') + '&mode=trainedmodel');\n }\n\n // Selected time-splitting id.\n var timeSplittingMethod = $(\"#id-evaluation-timesplitting\").val();\n a.attr('href', a.attr('href') + '×plitting=' + timeSplittingMethod);\n\n window.location.href = a.attr('href');\n return;\n });\n\n return modal;\n }).catch(Notification.exception);\n });\n },\n\n /**\n * Displays export options.\n *\n * We have two main options: export training data and export configuration.\n * The 2nd option has an extra option: include the trained algorithm weights.\n *\n * @param {String} actionId\n * @param {Boolean} isTrained\n */\n selectExportOptions: function(actionId, isTrained) {\n $('[data-action-id=\"' + actionId + '\"]').on('click', function(ev) {\n ev.preventDefault();\n\n var a = $(ev.currentTarget);\n\n if (!isTrained) {\n // Export the model configuration if the model is not trained. We can't export anything else.\n a.attr('href', a.attr('href') + '&action=exportmodel&includeweights=0');\n window.location.href = a.attr('href');\n return;\n }\n\n var stringsPromise = Str.get_strings([\n {\n key: 'export',\n component: 'tool_analytics'\n }\n ]);\n var modalPromise = ModalSaveCancel.create({\n body: Templates.render('tool_analytics/export_options', {}),\n removeOnClose: true,\n });\n\n $.when(stringsPromise, modalPromise).then(function(strings, modal) {\n modal.setTitle(strings[0]);\n modal.setSaveButtonText(strings[0]);\n\n modal.getRoot().on(ModalEvents.save, function() {\n\n var exportOption = $(\"input[name='exportoption']:checked\").val();\n\n if (exportOption == 'exportdata') {\n a.attr('href', a.attr('href') + '&action=exportdata');\n\n } else {\n a.attr('href', a.attr('href') + '&action=exportmodel');\n if ($(\"#id-includeweights\").is(':checked')) {\n a.attr('href', a.attr('href') + '&includeweights=1');\n } else {\n a.attr('href', a.attr('href') + '&includeweights=0');\n }\n }\n\n window.location.href = a.attr('href');\n return;\n });\n\n modal.show();\n return modal;\n }).fail(Notification.exception);\n });\n }\n };\n});\n"],"names":["define","$","Str","log","Notification","ModalSaveCancel","ModalCancel","ModalEvents","Templates","actionsList","clear","title","key","component","body","confirmAction","actionId","actionType","on","ev","preventDefault","a","currentTarget","wrap","reqStrings","param","closest","length","attr","error","stringsPromise","get_strings","modalPromise","create","when","then","strings","modal","setTitle","setBody","setSaveButtonText","getRoot","save","window","location","href","show","fail","exception","selectEvaluationOptions","trainedOnlyExternally","timeSplittingMethods","this","get_string","render","trainedexternally","timesplittingmethods","JSON","parse","removeOnClose","buttons","val","timeSplittingMethod","catch","selectExportOptions","isTrained","is"],"mappings":"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"}
|