]> scripts.mit.edu Git - autoinstallsdev/mediawiki.git/blobdiff - includes/htmlform/fields/HTMLFloatField.php
MediaWiki 1.30.2
[autoinstallsdev/mediawiki.git] / includes / htmlform / fields / HTMLFloatField.php
diff --git a/includes/htmlform/fields/HTMLFloatField.php b/includes/htmlform/fields/HTMLFloatField.php
new file mode 100644 (file)
index 0000000..d2d54e2
--- /dev/null
@@ -0,0 +1,46 @@
+<?php
+
+/**
+ * A field that will contain a numeric value
+ */
+class HTMLFloatField extends HTMLTextField {
+       public function getSize() {
+               return isset( $this->mParams['size'] ) ? $this->mParams['size'] : 20;
+       }
+
+       public function validate( $value, $alldata ) {
+               $p = parent::validate( $value, $alldata );
+
+               if ( $p !== true ) {
+                       return $p;
+               }
+
+               $value = trim( $value );
+
+               # https://www.w3.org/TR/html5/infrastructure.html#floating-point-numbers
+               # with the addition that a leading '+' sign is ok.
+               if ( !preg_match( '/^((\+|\-)?\d+(\.\d+)?(E(\+|\-)?\d+)?)?$/i', $value ) ) {
+                       return $this->msg( 'htmlform-float-invalid' );
+               }
+
+               # The "int" part of these message names is rather confusing.
+               # They make equal sense for all numbers.
+               if ( isset( $this->mParams['min'] ) ) {
+                       $min = $this->mParams['min'];
+
+                       if ( $min > $value ) {
+                               return $this->msg( 'htmlform-int-toolow', $min );
+                       }
+               }
+
+               if ( isset( $this->mParams['max'] ) ) {
+                       $max = $this->mParams['max'];
+
+                       if ( $max < $value ) {
+                               return $this->msg( 'htmlform-int-toohigh', $max );
+                       }
+               }
+
+               return true;
+       }
+}