Nosso formato de curso Moodle oferece a funcionalidade de substituir os ícones de edição de recursos padrão com texto real. No Moodle 2.3, conseguimos isso substituindo os renderizadores principais e os módulos YUI principais. É mais fácil falar do que fazer porque precisamos preservar todas as funcionalidades que você obtém com os ícones, incluindo o sofisticado AJAX. Poderíamos ter reescrito o JS para isso, mas descobrimos que é possível substituir os módulos YUI do Moodle.
A funcionalidade AJAX foi definida nos módulos principais. Os módulos principais do Moodle são definidos como qualquer módulo YUI padrão da seguinte forma:
YUI.add('moodle-module', function(Y) {
...
// Class definition
var SOMECLASS = function () {
SOMECLASS.superclass.constructor.apply(this, arguments);
}
// Define your class
...
// Moodle modules usually extend some other core module
Y.extend(SOMECLASS, Y.Base, {
some_method : function(param) {
// Do something...
return foo;
}, {
NAME: ...,
ATTRIB: ...
});
// Define a global variable
M.somcleass = M.somclass || {};
M.someclass.obj = SOMECLASS;
}, '@VERSION@', {requires: [ ... ]});
Suponha que você queira estender esse módulo, você faria algo como:
YUI.add('my-module', function(Y) {
var MYCLASS = function() {
MYCLASS.superclass.constructor.apply(this, arguments);
}
// Inherit from parent class
Y.extend(MYCLASS, M.someclass.obj);
// Now extend
Y.prototype.custom_method = function() {
// Do something..
}
//
}, '@VERSION@', {requires: ['moodle-module']});
Isso é pura herança de classe. Agora suponha que você queira chamar um método pai e fazer algo interessante depois que ele for chamado.
...
// Call parent method
MYCLASS.prototype.some_method = function(param) {
// Call parent method
var foo = MYCLASS.superclass.some_method.apply(this, [param]);
// Do something after you call the parent method..
// Perhaps override the images with text!
// return what's expected
return foo;
}
O fim.