Autoría | Ultima modificación | Ver Log |
// This file is part of Moodle - http://moodle.org///// Moodle is free software: you can redistribute it and/or modify// it under the terms of the GNU General Public License as published by// the Free Software Foundation, either version 3 of the License, or// (at your option) any later version.//// Moodle is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with Moodle. If not, see <http://www.gnu.org/licenses/>./*** Competency rule base module.** @module tool_lp/competency_rule* @copyright 2015 Frédéric Massart - FMCorz.net* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later*/define(['jquery'], function($) {/*** Competency rule abstract class.** Any competency rule should extend this object. The event 'change' should be* triggered on the instance when the configuration has changed. This will allow* the components using the rule to gather the config, or check its validity.** this._triggerChange();** @param {Tree} tree The competency tree.*/var Rule = function(tree) {this._eventNode = $('<div>');this._ready = $.Deferred();this._tree = tree;};/** @property {Object} The current competency. */Rule.prototype._competency = null;/** @property {Node} The node we attach the events to. */Rule.prototype._eventNode = null;/** @property {Promise} Resolved when the object is ready. */Rule.prototype._ready = null;/** @property {Tree} The competency tree. */Rule.prototype._tree = null;/*** Whether or not the current competency can be configured using this rule.** @return {Boolean}* @method canConfig*/Rule.prototype.canConfig = function() {return this._tree.hasChildren(this._competency.id);};/*** The config established by this rule.** To override in subclasses when relevant.** @return {String|null}* @method getConfig*/Rule.prototype.getConfig = function() {return null;};/*** Return the type of the module.** @return {String}* @method getType*/Rule.prototype.getType = function() {throw new Error('Not implemented');};/*** The init process.** Do not override this, instead override _load.** @return {Promise} Revoled when the plugin is initialised.* @method init*/Rule.prototype.init = function() {return this._load();};/*** Callback to inject the template.** @returns {Promise} Resolved when done.* @method injectTemplate*/Rule.prototype.injectTemplate = function() {return $.Deferred().reject().promise();};/*** Whether or not the current config is valid.** Plugins should override this.** @return {Boolean}* @method _isValid*/Rule.prototype.isValid = function() {return false;};/*** Load the class.** @return {Promise}* @method _load* @protected*/Rule.prototype._load = function() {return $.when();};/*** Register an event listener.** @param {String} type The event type.* @param {Function} handler The event listener.* @method on*/Rule.prototype.on = function(type, handler) {this._eventNode.on(type, handler);};/*** Sets the current competency.** @param {Competency} competency* @method setTargetCompetency*/Rule.prototype.setTargetCompetency = function(competency) {this._competency = competency;};/*** Trigger an event.** @param {String} type The type of event.* @param {Object} data The data to pass to the listeners.* @method _trigger* @protected*/Rule.prototype._trigger = function(type, data) {this._eventNode.trigger(type, [data]);};/*** Trigger the change event.** @method _triggerChange* @protected*/Rule.prototype._triggerChange = function() {this._trigger('change', this);};return /** @alias module:tool_lp/competency_rule */ Rule;});