Error handling for polls in the quick reply feature
authorAlexander Ebert <ebert@woltlab.com>
Thu, 6 Dec 2018 19:26:07 +0000 (20:26 +0100)
committerAlexander Ebert <ebert@woltlab.com>
Thu, 6 Dec 2018 19:26:07 +0000 (20:26 +0100)
Fixes #2742

wcfsetup/install/files/js/WCF.Poll.js

index e8cdb276ebaae4414cb16a36d6579602fde397cb..7e8a66be2c57b1289ea919acaf79e4ca8fcec070 100644 (file)
@@ -68,6 +68,7 @@ if (COMPILER_TARGET_DEFAULT) {
                                WCF.System.Event.addListener('com.woltlab.wcf.redactor2', 'reset_' + editorId, this._reset.bind(this));
                                WCF.System.Event.addListener('com.woltlab.wcf.redactor2', 'submit_' + editorId, this._submit.bind(this));
                                WCF.System.Event.addListener('com.woltlab.wcf.redactor2', 'validate_' + editorId, this._validate.bind(this));
+                               WCF.System.Event.addListener('com.woltlab.wcf.redactor2', 'handleError_' + editorId, this._handleError.bind(this));
                        }
                        else {
                                this._container.closest('form').submit($.proxy(this._submit, this));
@@ -301,6 +302,30 @@ if (COMPILER_TARGET_DEFAULT) {
                                        data.valid = false;
                                }
                        }
+               },
+               
+               _handleError: function (data) {
+                       switch (data.returnValues.fieldName) {
+                               case 'pollEndTime':
+                               case 'pollMaxVotes':
+                                       var fieldName = (data.returnValues.fieldName === 'pollEndTime') ? 'endTime' : 'maxVotes';
+                                       
+                                       var small = elCreate('small');
+                                       small.className = 'innerError';
+                                       small.innerHTML = WCF.Language.get('wcf.poll.' + fieldName + '.error.' + data.returnValues.errorType);
+                                       
+                                       var element = elById(data.returnValues.fieldName + '_' + this._editorId);
+                                       var parent = element.parentElement;
+                                       if (parent.classList.contains('inputAddon')) {
+                                               element = parent;
+                                               parent = parent.parentElement;
+                                       }
+                                       
+                                       parent.insertBefore(small, element.nextSibling);
+                                       
+                                       data.cancel = true;
+                                       break;
+                       }
                }
        });
 }