MDL-40759 icons: Refactor to allow theme icon systems
[moodle.git] / lib / amd / src / templates.js
index 7e658dc..8cf4c9e 100644 (file)
@@ -160,26 +160,22 @@ define(['core/mustache',
      */
     Renderer.prototype.renderIcon = function(key, component, title) {
         // Preload the module to do the icon rendering based on the theme iconsystem.
-        var modulename = 'core/icon_system_' + config.iconsystem;
+        var modulename = config.iconsystemmodule;
 
+        // RequireJS does not return a promise.
         var ready = $.Deferred();
         require([modulename], function(System) {
             var system = new System();
             if (!(system instanceof IconSystem)) {
-                ready.reject('Invalid icon system specified' + config.iconsystem);
+                ready.reject('Invalid icon system specified' + config.iconsystemmodule);
             } else {
-                system.init().then(ready.resolve);
                 iconSystem = system;
+                system.init().then(ready.resolve);
             }
         });
 
-        var suffix = '';
-        if (config.iconsystem != 'standard') {
-            suffix = '_' + config.iconsystem;
-        }
-
-        return ready.then(function() {
-            return this.getTemplate('core/pix_icon' + suffix);
+        return ready.then(function(iconSystem) {
+            return this.getTemplate(iconSystem.getTemplateName());
         }.bind(this)).then(function(template) {
             return iconSystem.renderIcon(key, component, title, template);
         });
@@ -211,13 +207,9 @@ define(['core/mustache',
             text = helper(parts.join(',').trim());
         }
 
-        var suffix = '';
-        if (config.iconsystem != 'standard') {
-            suffix = '_' + config.iconsystem;
-        }
-
+        var templateName = iconSystem.getTemplateName();
 
-        var searchKey = this.currentThemeName + '/core/pix_icon' + suffix;
+        var searchKey = this.currentThemeName + '/' + templateName;
         var template = templateCache[searchKey];
 
         return iconSystem.renderIcon(key, component, text, template);
@@ -508,12 +500,9 @@ define(['core/mustache',
      */
     Renderer.prototype.doRender = function(templateSource, context, themeName) {
         this.currentThemeName = themeName;
-        var suffix = '';
-        if (config.iconsystem != 'standard') {
-            suffix = '_' + config.iconsystem;
-        }
+        var iconTemplate = iconSystem.getTemplateName();
 
-        return this.getTemplate('core/pix_icon' + suffix).then(function() {
+        return this.getTemplate(iconTemplate).then(function() {
             this.addHelpers(context, themeName);
             var result = mustache.render(templateSource, context, this.partialHelper.bind(this));
             return $.Deferred().resolve(result.trim(), this.getJS()).promise();
@@ -695,7 +684,7 @@ define(['core/mustache',
         this.currentThemeName = themeName;
 
         // Preload the module to do the icon rendering based on the theme iconsystem.
-        var modulename = 'core/icon_system_' + config.iconsystem;
+        var modulename = config.iconsystemmodule;
 
         var ready = $.Deferred();
         require([modulename], function(System) {