MDL-66074 core: Add a renderForPromise function
authorAndrew Nicols <andrew@nicols.co.uk>
Sat, 5 Oct 2019 05:56:30 +0000 (13:56 +0800)
committerMathew May <mathewm@hotmail.co.nz>
Mon, 28 Oct 2019 05:55:12 +0000 (13:55 +0800)
Promises only take a single argument so this makes it easier to chain
promises and use them with await.

lib/amd/build/templates.min.js
lib/amd/build/templates.min.js.map
lib/amd/src/templates.js

index 15471dc..aefca08 100644 (file)
Binary files a/lib/amd/build/templates.min.js and b/lib/amd/build/templates.min.js differ
index 08d2f3f..3a6b52c 100644 (file)
Binary files a/lib/amd/build/templates.min.js.map and b/lib/amd/build/templates.min.js.map differ
index 75baa08..afac7f3 100644 (file)
@@ -722,7 +722,7 @@ define([
      * content with the their respective translated dates.
      *
      * @param {String} content The content in which string placeholders are to be found.
-     * @param {Array} strings The strings to replace with.
+     * @param {Array} dates The dates to replace with.
      * @return {String} The treated content.
      */
     Renderer.prototype.treatDatesInContent = function(content, dates) {
@@ -1045,6 +1045,33 @@ define([
             return renderer.render(templateName, context, themeName);
         },
 
+        /**
+         * Every call to render creates a new instance of the class and calls render on it. This
+         * means each render call has it's own class variables.
+         *
+         * This alernate to the standard .render() function returns the html and js in a single object suitable for a
+         * native Promise.
+         *
+         * @method renderForPromise
+         * @private
+         * @param {string} templateName - should consist of the component and the name of the template like this:
+         *                              core/menu (lib/templates/menu.mustache) or
+         *                              tool_bananas/yellow (admin/tool/bananas/templates/yellow.mustache)
+         * @param {Object} context - Could be array, string or simple value for the context of the template.
+         * @param {string} themeName - Name of the current theme.
+         * @return {Promise} JQuery promise object resolved when the template has been rendered.
+         */
+        renderForPromise: function(templateName, context, themeName) {
+            var renderer = new Renderer();
+            return renderer.render(templateName, context, themeName)
+            .then(function(html, js) {
+                return {
+                    html: html,
+                    js: js,
+                };
+            });
+        },
+
         /**
          * Every call to renderIcon creates a new instance of the class and calls renderIcon on it. This
          * means each render call has it's own class variables.
@@ -1116,6 +1143,6 @@ define([
          */
         appendNodeContents: function(element, html, js) {
             domAppend(element, html, js);
-        }
+        },
     };
 });