Proyectos de Subversion Moodle

Rev

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

{"version":3,"file":"competency_rule_points.min.js","sources":["../src/competency_rule_points.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 * Competency rule points module.\n *\n * @module     tool_lp/competency_rule_points\n * @copyright  2015 Frédéric Massart - FMCorz.net\n * @license    http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later\n */\n\ndefine(['jquery',\n        'core/str',\n        'core/templates',\n        'tool_lp/competency_rule',\n        ],\n        function($, Str, Templates, RuleBase) {\n\n    /**\n     * Competency rule points class.\n     */\n    var Rule = function() {\n        RuleBase.apply(this, arguments);\n    };\n    Rule.prototype = Object.create(RuleBase.prototype);\n\n    /** @property {Node} Reference to the container in which the template was included. */\n    Rule.prototype._container = null;\n    /** @property {Boolean} Whether or not the template was included. */\n    Rule.prototype._templateLoaded = false;\n\n    /**\n     * The config established by this rule.\n     *\n     * @return {String}\n     * @method getConfig\n     */\n    Rule.prototype.getConfig = function() {\n        return JSON.stringify({\n            base: {\n                points: this._getRequiredPoints(),\n            },\n            competencies: this._getCompetenciesConfig()\n        });\n    };\n\n    /**\n     * Gathers the input provided by the user for competencies.\n     *\n     * @return {Array} Containing id, points and required.\n     * @method _getCompetenciesConfig\n     * @protected\n     */\n    Rule.prototype._getCompetenciesConfig = function() {\n        var competencies = [];\n\n        this._container.find('[data-competency]').each(function() {\n            var node = $(this),\n                id = node.data('competency'),\n                points = parseInt(node.find('[name=\"points\"]').val(), 10),\n                required = node.find('[name=\"required\"]').prop('checked');\n\n            competencies.push({\n                id: id,\n                points: points,\n                required: required ? 1 : 0\n            });\n        });\n\n        return competencies;\n    };\n\n    /**\n     * Fetches the required points set by the user.\n     *\n     * @return {Number}\n     * @method _getRequiredPoints\n     * @protected\n     */\n    Rule.prototype._getRequiredPoints = function() {\n        return parseInt(this._container.find('[name=\"requiredpoints\"]').val() || 1, 10);\n    };\n\n    /**\n     * Return the type of the module.\n     *\n     * @return {String}\n     * @method getType\n     */\n    Rule.prototype.getType = function() {\n        return 'core_competency\\\\competency_rule_points';\n    };\n\n    /**\n     * Callback to inject the template.\n     *\n     * @param  {Node} container Node to inject in.\n     * @return {Promise} Resolved when done.\n     * @method injectTemplate\n     */\n    Rule.prototype.injectTemplate = function(container) {\n        var self = this,\n            children = this._tree.getChildren(this._competency.id),\n            context,\n            config = {\n                base: {points: 2},\n                competencies: []\n            };\n\n        this._templateLoaded = false;\n\n        // Only pre-load the configuration when the competency is using this rule.\n        if (self._competency.ruletype == self.getType()) {\n            try {\n                config = JSON.parse(self._competency.ruleconfig);\n            } catch (e) {\n                // eslint-disable-line no-empty\n            }\n        }\n\n        context = {\n            requiredpoints: (config && config.base) ? config.base.points : 2,\n            competency: self._competency,\n            children: []\n        };\n\n        $.each(children, function(index, child) {\n            var competency = {\n                id: child.id,\n                shortname: child.shortname,\n                required: false,\n                points: 0\n            };\n\n            if (config) {\n                $.each(config.competencies, function(index, comp) {\n                    if (comp.id == competency.id) {\n                        competency.required = comp.required ? true : false;\n                        competency.points = comp.points;\n                    }\n                });\n            }\n\n            context.children.push(competency);\n        });\n\n        return Templates.render('tool_lp/competency_rule_points', context).then(function(html) {\n            self._container = container;\n            container.html(html);\n            container.find('input').change(function() {\n                self._triggerChange();\n            });\n\n            // We're done, let's trigger a change.\n            self._templateLoaded = true;\n            self._triggerChange();\n            return;\n        });\n    };\n\n    /**\n     * Whether or not the current config is valid.\n     *\n     * @return {Boolean}\n     * @method isValid\n     */\n    Rule.prototype.isValid = function() {\n        if (!this._templateLoaded) {\n            return false;\n        }\n\n        var required = this._getRequiredPoints(),\n            max = 0,\n            valid = true;\n\n        $.each(this._getCompetenciesConfig(), function(index, competency) {\n            if (competency.points < 0) {\n                valid = false;\n            }\n            max += competency.points;\n        });\n\n        valid = valid && max >= required;\n        return valid;\n    };\n\n    return Rule;\n});\n"],"names":["define","$","Str","Templates","RuleBase","Rule","apply","this","arguments","prototype","Object","create","_container","_templateLoaded","getConfig","JSON","stringify","base","points","_getRequiredPoints","competencies","_getCompetenciesConfig","find","each","node","id","data","parseInt","val","required","prop","push","getType","injectTemplate","container","context","self","children","_tree","getChildren","_competency","config","ruletype","parse","ruleconfig","e","requiredpoints","competency","index","child","shortname","comp","render","then","html","change","_triggerChange","isValid","max","valid"],"mappings":";;;;;;;AAuBAA,wCAAO,CAAC,SACA,WACA,iBACA,4BAEA,SAASC,EAAGC,IAAKC,UAAWC,cAK5BC,KAAO,WACPD,SAASE,MAAMC,KAAMC,mBAEzBH,KAAKI,UAAYC,OAAOC,OAAOP,SAASK,YAGzBG,WAAa,KAE5BP,KAAKI,UAAUI,iBAAkB,EAQjCR,KAAKI,UAAUK,UAAY,kBAChBC,KAAKC,UAAU,CAClBC,KAAM,CACFC,OAAQX,KAAKY,sBAEjBC,aAAcb,KAAKc,4BAW3BhB,KAAKI,UAAUY,uBAAyB,eAChCD,aAAe,eAEdR,WAAWU,KAAK,qBAAqBC,MAAK,eACvCC,KAAOvB,EAAEM,MACTkB,GAAKD,KAAKE,KAAK,cACfR,OAASS,SAASH,KAAKF,KAAK,mBAAmBM,MAAO,IACtDC,SAAWL,KAAKF,KAAK,qBAAqBQ,KAAK,WAEnDV,aAAaW,KAAK,CACdN,GAAIA,GACJP,OAAQA,OACRW,SAAUA,SAAW,EAAI,OAI1BT,cAUXf,KAAKI,UAAUU,mBAAqB,kBACzBQ,SAASpB,KAAKK,WAAWU,KAAK,2BAA2BM,OAAS,EAAG,KAShFvB,KAAKI,UAAUuB,QAAU,iBACd,2CAUX3B,KAAKI,UAAUwB,eAAiB,SAASC,eAGjCC,QAFAC,KAAO7B,KACP8B,SAAW9B,KAAK+B,MAAMC,YAAYhC,KAAKiC,YAAYf,IAEnDgB,OAAS,CACLxB,KAAM,CAACC,OAAQ,GACfE,aAAc,YAGjBP,iBAAkB,EAGnBuB,KAAKI,YAAYE,UAAYN,KAAKJ,cAE9BS,OAAS1B,KAAK4B,MAAMP,KAAKI,YAAYI,YACvC,MAAOC,WAKbV,QAAU,CACNW,eAAiBL,QAAUA,OAAOxB,KAAQwB,OAAOxB,KAAKC,OAAS,EAC/D6B,WAAYX,KAAKI,YACjBH,SAAU,IAGdpC,EAAEsB,KAAKc,UAAU,SAASW,MAAOC,WACzBF,WAAa,CACbtB,GAAIwB,MAAMxB,GACVyB,UAAWD,MAAMC,UACjBrB,UAAU,EACVX,OAAQ,GAGRuB,QACAxC,EAAEsB,KAAKkB,OAAOrB,cAAc,SAAS4B,MAAOG,MACpCA,KAAK1B,IAAMsB,WAAWtB,KACtBsB,WAAWlB,WAAWsB,KAAKtB,SAC3BkB,WAAW7B,OAASiC,KAAKjC,WAKrCiB,QAAQE,SAASN,KAAKgB,eAGnB5C,UAAUiD,OAAO,iCAAkCjB,SAASkB,MAAK,SAASC,MAC7ElB,KAAKxB,WAAasB,UAClBA,UAAUoB,KAAKA,MACfpB,UAAUZ,KAAK,SAASiC,QAAO,WAC3BnB,KAAKoB,oBAITpB,KAAKvB,iBAAkB,EACvBuB,KAAKoB,qBAWbnD,KAAKI,UAAUgD,QAAU,eAChBlD,KAAKM,uBACC,MAGPgB,SAAWtB,KAAKY,qBAChBuC,IAAM,EACNC,OAAQ,SAEZ1D,EAAEsB,KAAKhB,KAAKc,0BAA0B,SAAS2B,MAAOD,YAC9CA,WAAW7B,OAAS,IACpByC,OAAQ,GAEZD,KAAOX,WAAW7B,UAGtByC,MAAQA,OAASD,KAAO7B,UAIrBxB"}