Properly position errors below fields in `.inputAddon` elements
authorMatthias Schmidt <gravatronics@live.com>
Tue, 18 May 2021 05:01:42 +0000 (07:01 +0200)
committerMatthias Schmidt <gravatronics@live.com>
Tue, 18 May 2021 05:01:42 +0000 (07:01 +0200)
ts/WoltLabSuite/Core/Dom/Util.ts
wcfsetup/install/files/js/WoltLabSuite/Core/Dom/Util.js

index 838c52b4ca24cfa6f373b32295ad9816be40f663..8170042606a089b52b41be0e6df8b4b5360347d5 100644 (file)
@@ -449,14 +449,21 @@ const DomUtil = {
       }
     }
 
-    let innerError = element.nextElementSibling as HTMLElement | null;
+    let insertTarget = parent as HTMLElement;
+    let referenceElement = element;
+    if (insertTarget.classList.contains('inputAddon')) {
+      insertTarget = parent.parentElement as HTMLElement;
+      referenceElement = parent as HTMLElement;
+    }
+
+    let innerError = referenceElement.nextElementSibling as HTMLElement | null;
     if (innerError === null || innerError.nodeName !== "SMALL" || !innerError.classList.contains("innerError")) {
       if (errorMessage === "") {
         innerError = null;
       } else {
         innerError = document.createElement("small");
         innerError.className = "innerError";
-        parent.insertBefore(innerError, element.nextSibling);
+        insertTarget.insertBefore(innerError, referenceElement.nextSibling);
       }
     }
 
index 49f7a0ed7fcc427af55a14b083eeb63ddb5cb57b..c3f078b0801b928ca869417af9a0ecc22d1b427c 100644 (file)
@@ -380,7 +380,13 @@ define(["require", "exports", "tslib", "../StringUtil"], function (require, expo
                     throw new TypeError("The error message must be a string; `false`, `null` or `undefined` can be used as a substitute for an empty string.");
                 }
             }
-            let innerError = element.nextElementSibling;
+            let insertTarget = parent;
+            let referenceElement = element;
+            if (insertTarget.classList.contains('inputAddon')) {
+                insertTarget = parent.parentElement;
+                referenceElement = parent;
+            }
+            let innerError = referenceElement.nextElementSibling;
             if (innerError === null || innerError.nodeName !== "SMALL" || !innerError.classList.contains("innerError")) {
                 if (errorMessage === "") {
                     innerError = null;
@@ -388,7 +394,7 @@ define(["require", "exports", "tslib", "../StringUtil"], function (require, expo
                 else {
                     innerError = document.createElement("small");
                     innerError.className = "innerError";
-                    parent.insertBefore(innerError, element.nextSibling);
+                    insertTarget.insertBefore(innerError, referenceElement.nextSibling);
                 }
             }
             if (errorMessage === "") {