View Javadoc
1   /*
2    * Copyright (c) 2002-2025 Gargoyle Software Inc.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    * https://www.apache.org/licenses/LICENSE-2.0
8    *
9    * Unless required by applicable law or agreed to in writing, software
10   * distributed under the License is distributed on an "AS IS" BASIS,
11   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12   * See the License for the specific language governing permissions and
13   * limitations under the License.
14   */
15  package org.htmlunit.html;
16  
17  /**
18   * An element that supports client side validation based on
19   * the Constraint validation API.
20   * see <a href="https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation">
21   * https://developer.mozilla.org/en-US/docs/Web/API/Constraint_validation</a>
22   *
23   * @author Ronald Brill
24   */
25  public interface ValidatableElement {
26  
27      /**
28       * @return whether the element is a candidate for constraint validation
29       */
30      boolean willValidate();
31  
32      /**
33       * Sets the custom validity message for the element to the specified message.
34       * @param message the new message
35       */
36      void setCustomValidity(String message);
37  
38      /**
39       * @return a boolean value boolean value that is true if the user
40       *         has provided input that the browser is unable to convert.
41       */
42      default boolean hasBadInputValidityState() {
43          return false;
44      }
45  
46      /**
47       * @return a boolean value indicating whether the element's custom validity message
48       *         has been set to a non-empty string by calling the element's setCustomValidity() method.
49       */
50      boolean isCustomErrorValidityState();
51  
52      /**
53       * @return true if the value does not match the specified pattern,
54       *         and false if it does match.
55       *         If true, the element matches the :invalid CSS pseudo-class
56       */
57      default boolean hasPatternMismatchValidityState() {
58          return false;
59      }
60  
61      /**
62       * @return true if the value does not fit the rules determined by the step attribute
63       *         (that is, it's not evenly divisible by the step value),
64       *         or false if it does fit the step rule.
65       *         If true, the element matches the :invalid and :out-of-range CSS pseudo-classes.
66       */
67      default boolean isStepMismatchValidityState() {
68          return false;
69      }
70  
71      /**
72       * @return true if the value is longer than the maximum length specified
73       *         by the maxlength attribute, or false if it is shorter than or equal to the maximum.
74       *         If true, the element matches the :invalid CSS pseudo-class
75       */
76      default boolean isTooLongValidityState() {
77          return false;
78      }
79  
80      /**
81       * @return true if the value is shorter than the minimum length specified
82       *         by the minlength attribute, or false if it is greater than or equal to the minimum.
83       *         If true, the element matches the :invalid CSS pseudo-class
84       */
85      default boolean isTooShortValidityState() {
86          return false;
87      }
88  
89      /**
90       * @return true if the value is not in the required syntax (when type is email or url),
91       *         or false if the syntax is correct.
92       *         If true, the element matches the :invalid CSS pseudo-class.
93       */
94      default boolean hasTypeMismatchValidityState() {
95          return false;
96      }
97  
98      /**
99       * @return true if the value is greater than the maximum specified by the max attribute,
100      *         or false if it is less than or equal to the maximum.
101      *         If true, the element matches the :invalid and :out-of-range CSS pseudo-classes.
102      */
103     default boolean hasRangeOverflowValidityState() {
104         return false;
105     }
106 
107     /**
108      * @return true if the value is less than the minimum specified by the min attribute,
109      *         or false if it is greater than or equal to the minimum.
110      *         If true, the element matches the :invalid and :out-of-range CSS pseudo-classes.
111      */
112     default boolean hasRangeUnderflowValidityState() {
113         return false;
114     }
115 
116     /**
117      * @return true if the element meets all its validation constraints, and is therefore
118      *         considered to be valid, or false if it fails any constraint.
119      *         If true, the element matches the :valid CSS pseudo-class; the :invalid CSS pseudo-class otherwise.
120      */
121     boolean isValidValidityState();
122 
123     /**
124      * @return true if the element has a required attribute, but no value, or false otherwise.
125      *         If true, the element matches the :invalid CSS pseudo-class.
126      */
127     default boolean isValueMissingValidityState() {
128         return false;
129     }
130 }