MDL-59784 core: Modal should accept title as a promise
authorAndrew Nicols <andrew@nicols.co.uk>
Wed, 16 Aug 2017 04:31:53 +0000 (12:31 +0800)
committerAndrew Nicols <andrew@nicols.co.uk>
Fri, 18 Aug 2017 14:51:47 +0000 (22:51 +0800)
lib/amd/build/modal.min.js
lib/amd/src/modal.js

index d1b6f8e..7566ff4 100644 (file)
Binary files a/lib/amd/build/modal.min.js and b/lib/amd/build/modal.min.js differ
index 53ae0b7..fbc7d9a 100644 (file)
@@ -215,23 +215,26 @@ define(['jquery', 'core/templates', 'core/notification', 'core/key_codes',
     /**
      * Set the modal title element.
      *
+     * This method is overloaded to take either a string value for the title or a jQuery promise that is resolved with
+     * HTML most commonly from a Str.get_string call.
+     *
      * @method setTitle
-     * @param {string} value The title string
+     * @param {(string|object)} value The title string or jQuery promise which resolves to the title.
      */
     Modal.prototype.setTitle = function(value) {
         var title = this.getTitle();
-        title.html(value);
+
+        this.asyncSet(value, title.html.bind(title));
     };
 
     /**
      * Set the modal body element.
      *
-     * This method is overloaded to take either a string
-     * value for the body or a jQuery promise that is resolved with HTML and Javascript
-     * most commonly from a Templates.render call.
+     * This method is overloaded to take either a string value for the body or a jQuery promise that is resolved with
+     * HTML and Javascript most commonly from a Templates.render call.
      *
      * @method setBody
-     * @param {(string|object)} value The body string or jQuery promise
+     * @param {(string|object)} value The body string or jQuery promise which resolves to the body.
      */
     Modal.prototype.setBody = function(value) {
         var body = this.getBody();
@@ -595,5 +598,29 @@ define(['jquery', 'core/templates', 'core/notification', 'core/key_codes',
         }.bind(this));
     };
 
+    /**
+     * Set or resolve and set the value using the function.
+     *
+     * @method asyncSet
+     * @param {(string|object)} value The string or jQuery promise.
+     * @param {function} setFunction The setter
+     * @return {Promise}
+     */
+    Modal.prototype.asyncSet = function(value, setFunction) {
+        var p = value;
+        if (typeof value === 'string') {
+            p = $.Deferred();
+            p.resolve(value);
+        }
+
+        p.then(function(content) {
+            setFunction(content);
+
+            return;
+        });
+
+        return p;
+    };
+
     return Modal;
 });