'url' => 'HTMLTextField',
'title' => 'HTMLTitleTextField',
'user' => 'HTMLUserTextField',
+ 'usersmultiselect' => 'HTMLUsersMultiselectField',
];
public $mFieldData;
return ObjectFactory::constructClassInstance( OOUIHTMLForm::class, $arguments );
default:
/** @var HTMLForm $form */
- $form = ObjectFactory::constructClassInstance( HTMLForm::class, $arguments );
+ $form = ObjectFactory::constructClassInstance( self::class, $arguments );
$form->setDisplayFormat( $displayFormat );
return $form;
}
if ( !in_array( $format, $this->availableDisplayFormats, true ) ) {
throw new MWException( 'Display format must be one of ' .
- print_r( $this->availableDisplayFormats, true ) );
+ print_r(
+ array_merge(
+ $this->availableDisplayFormats,
+ $this->availableSubclassDisplayFormats
+ ),
+ true
+ ) );
}
// Evil hack for mobile :(
if ( $this->mName ) {
$attribs['name'] = $this->mName;
}
+ if ( $this->needsJSForHtml5FormValidation() ) {
+ $attribs['novalidate'] = true;
+ }
return $attribs;
}
*
* @param string|array|Status $elements The set of errors/warnings to process.
* @param string $elementsType Should warnings or errors be returned. This is meant
- * for Status objects, all other valid types are always considered as errors.
+ * for Status objects, all other valid types are always considered as errors.
* @return string
*/
public function getErrorsOrWarnings( $elements, $elementsType ) {
protected function getMessage( $value ) {
return Message::newFromSpecifier( $value )->setContext( $this );
}
+
+ /**
+ * Whether this form, with its current fields, requires the user agent to have JavaScript enabled
+ * for the client-side HTML5 form validation to work correctly. If this function returns true, a
+ * 'novalidate' attribute will be added on the `<form>` element. It will be removed if the user
+ * agent has JavaScript support, in htmlform.js.
+ *
+ * @return boolean
+ * @since 1.29
+ */
+ public function needsJSForHtml5FormValidation() {
+ foreach ( $this->mFlatFields as $fieldname => $field ) {
+ if ( $field->needsJSForHtml5FormValidation() ) {
+ return true;
+ }
+ }
+ return false;
+ }
}