MDL-40759 icons: Refactor to allow theme icon systems
[moodle.git] / lib / amd / src / icon_system.js
index 963e8a4..1d28046 100644 (file)
@@ -26,7 +26,7 @@ define(['jquery'], function($) {
     /**
      * Icon System abstract class.
      *
-     * Any icon system needs to define a module extending this one with the name core/icon_system_blah.
+     * Any icon system needs to define a module extending this one and return this module name from the php icon_system class.
      */
     var IconSystem = function() {
     };
@@ -38,12 +38,18 @@ define(['jquery'], function($) {
      * @method init
      */
     IconSystem.prototype.init = function() {
-        return $.when();
+        return $.when(this);
     };
 
     /**
      * Render an icon.
      *
+     * The key, component and title come from either the pix mustache helper tag, or the call to templates.renderIcon.
+     * The template is the pre-loaded template string matching the template from getTemplateName() in this class.
+     * This function must return a string (not a promise) because it is used during the internal rendering of the mustache
+     * template (which is unfortunately synchronous). To render the mustache template in this function call
+     * core/mustache.render() directly and do not use any partials, blocks or helper functions in the template.
+     *
      * @param {String} key
      * @param {String} component
      * @param {String} title
@@ -55,5 +61,15 @@ define(['jquery'], function($) {
         throw new Error('Abstract function not implemented.');
     };
 
+    /**
+     * getTemplateName
+     *
+     * @return {String}
+     * @method getTemplateName
+     */
+    IconSystem.prototype.getTemplateName = function() {
+        throw new Error('Abstract function not implemented.');
+    };
+
     return /** @alias module:core/icon_system */ IconSystem;
 });