(bug 40585) Don't drop 'step="any"' in HTML input fields.

The default value for "step" is "1" which effectively bans any decimal
number from being entered into an 'type="number"' field and makes
HTMLFloatField unusable.

Change-Id: I103fd4047814a7fb0dfdc174f36badd5b660b7a4
This commit is contained in:
Tim Landscheidt 2012-11-29 12:12:35 +00:00
parent 25c0031c08
commit 6dc4039270
2 changed files with 19 additions and 1 deletions

View file

@ -476,7 +476,13 @@ class Html {
// server-side validation. Opera is the only other implementation at
// this time, and has ugly UI, so just kill the feature entirely until
// we have at least one good implementation.
if ( in_array( $key, array( 'max', 'min', 'pattern', 'required', 'step' ) ) ) {
// As the default value of "1" for "step" rejects decimal
// numbers to be entered in 'type="number"' fields, allow
// the special case 'step="any"'.
if ( in_array( $key, array( 'max', 'min', 'pattern', 'required' ) ) ||
$key === 'step' && $value !== 'any' ) {
continue;
}

View file

@ -605,4 +605,16 @@ class HtmlTest extends MediaWikiTestCase {
return $ret;
}
public function testFormValidationBlacklist() {
$this->assertEmpty(
Html::expandAttributes( array( 'min' => 1, 'max' => 100, 'pattern' => 'abc', 'required' => true, 'step' => 2 ) ),
'Blacklist form validation attributes.'
);
$this->assertEquals(
' step=any',
Html::expandAttributes( array( 'min' => 1, 'max' => 100, 'pattern' => 'abc', 'required' => true, 'step' => 'any' ) ),
'Allow special case "step=any".'
);
}
}