Add promises support for MessageInlineEditor
authorJoshua Rüsweg <josh@bastelstu.be>
Tue, 21 Aug 2018 20:27:07 +0000 (22:27 +0200)
committerJoshua Rüsweg <josh@bastelstu.be>
Tue, 21 Aug 2018 20:27:07 +0000 (22:27 +0200)
See #2743
See #2742
See WoltLab/com.woltlab.wbb#280

wcfsetup/install/files/js/WoltLabSuite/Core/Ui/Message/InlineEditor.js

index bed5ace1c8960385f39c714517c3f629be7fd1f4..12588f8160bb342a938a8bd51ce26349a67c05d5 100644 (file)
@@ -494,19 +494,24 @@ define(
                        
                        EventHandler.fire('com.woltlab.wcf.redactor2', 'getText_' + id, parameters.data);
                        
-                       if (!this._validate(parameters)) {
-                               // validation failed
-                               return;
-                       }
-                       
-                       EventHandler.fire('com.woltlab.wcf.redactor2', 'submit_' + id, parameters);
+                       var validateResult = this._validate(parameters);
                        
-                       Ajax.api(this, {
-                               actionName: 'save',
-                               parameters: parameters
-                       });
+                       if (!(validateResult instanceof Promise)) {
+                               validateResult = Promise.resolve(validateResult);
+                       }
                        
-                       this._hideEditor();
+                       validateResult.then(function (result) {
+                               if (!result) return; 
+                               
+                               EventHandler.fire('com.woltlab.wcf.redactor2', 'submit_' + id, parameters);
+                               
+                               Ajax.api(this, {
+                                       actionName: 'save',
+                                       parameters: parameters
+                               });
+                               
+                               this._hideEditor();
+                       }.bind(this));
                },
                
                /**
@@ -523,11 +528,16 @@ define(
                        var data = {
                                api: this,
                                parameters: parameters,
-                               valid: true
+                               valid: true,
+                               promise: null
                        };
                        
                        EventHandler.fire('com.woltlab.wcf.redactor2', 'validate_' + this._getEditorId(), data);
                        
+                       if (data.valid !== false && data.promise !== null) {
+                               return data.promise;
+                       }
+                       
                        return (data.valid !== false);
                },