NS_IMETHODIMP nsIConstraintValidation::GetValidationMessage(nsAString& aValidationMessage) { aValidationMessage.Truncate(); if (IsCandidateForConstraintValidation() && !IsValid()) { nsCOMPtr<nsIContent> content = do_QueryInterface(this); NS_ASSERTION(content, "This class should be inherited by HTML elements only!"); nsAutoString authorMessage; content->GetAttr(kNameSpaceID_None, nsGkAtoms::x_moz_errormessage, authorMessage); if (!authorMessage.IsEmpty()) { aValidationMessage.Assign(authorMessage); if (aValidationMessage.Length() > sContentSpecifiedMaxLengthMessage) { aValidationMessage.Truncate(sContentSpecifiedMaxLengthMessage); } } else if (GetValidityState(VALIDITY_STATE_CUSTOM_ERROR)) { aValidationMessage.Assign(mCustomValidity); if (aValidationMessage.Length() > sContentSpecifiedMaxLengthMessage) { aValidationMessage.Truncate(sContentSpecifiedMaxLengthMessage); } } else if (GetValidityState(VALIDITY_STATE_TOO_LONG)) { GetValidationMessage(aValidationMessage, VALIDITY_STATE_TOO_LONG); } else if (GetValidityState(VALIDITY_STATE_VALUE_MISSING)) { GetValidationMessage(aValidationMessage, VALIDITY_STATE_VALUE_MISSING); } else if (GetValidityState(VALIDITY_STATE_TYPE_MISMATCH)) { GetValidationMessage(aValidationMessage, VALIDITY_STATE_TYPE_MISMATCH); } else if (GetValidityState(VALIDITY_STATE_PATTERN_MISMATCH)) { GetValidationMessage(aValidationMessage, VALIDITY_STATE_PATTERN_MISMATCH); } else { // TODO: The other messages have not been written // because related constraint validation are not implemented yet. // We should not be here. return NS_ERROR_UNEXPECTED; } } else { aValidationMessage.Truncate(); } return NS_OK; }
EventStates HTMLTextAreaElement::IntrinsicState() const { EventStates state = nsGenericHTMLFormElementWithState::IntrinsicState(); if (HasAttr(kNameSpaceID_None, nsGkAtoms::required)) { state |= NS_EVENT_STATE_REQUIRED; } else { state |= NS_EVENT_STATE_OPTIONAL; } if (IsCandidateForConstraintValidation()) { if (IsValid()) { state |= NS_EVENT_STATE_VALID; } else { state |= NS_EVENT_STATE_INVALID; // :-moz-ui-invalid always apply if the element suffers from a custom // error and never applies if novalidate is set on the form owner. if ((!mForm || !mForm->HasAttr(kNameSpaceID_None, nsGkAtoms::novalidate)) && (GetValidityState(VALIDITY_STATE_CUSTOM_ERROR) || (mCanShowInvalidUI && ShouldShowValidityUI()))) { state |= NS_EVENT_STATE_MOZ_UI_INVALID; } } // :-moz-ui-valid applies if all the following are true: // 1. The element is not focused, or had either :-moz-ui-valid or // :-moz-ui-invalid applying before it was focused ; // 2. The element is either valid or isn't allowed to have // :-moz-ui-invalid applying ; // 3. The element has no form owner or its form owner doesn't have the // novalidate attribute set ; // 4. The element has already been modified or the user tried to submit the // form owner while invalid. if ((!mForm || !mForm->HasAttr(kNameSpaceID_None, nsGkAtoms::novalidate)) && (mCanShowValidUI && ShouldShowValidityUI() && (IsValid() || (state.HasState(NS_EVENT_STATE_MOZ_UI_INVALID) && !mCanShowInvalidUI)))) { state |= NS_EVENT_STATE_MOZ_UI_VALID; } } if (HasAttr(kNameSpaceID_None, nsGkAtoms::placeholder) && IsValueEmpty()) { state |= NS_EVENT_STATE_PLACEHOLDERSHOWN; } return state; }
NS_IMETHODIMP nsDOMValidityState::GetRangeOverflow(PRBool* aRangeOverflow) { *aRangeOverflow = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_RANGE_OVERFLOW); return NS_OK; }
NS_IMETHODIMP nsDOMValidityState::GetTooLong(PRBool* aTooLong) { *aTooLong = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_TOO_LONG); return NS_OK; }
NS_IMETHODIMP nsDOMValidityState::GetPatternMismatch(PRBool* aPatternMismatch) { *aPatternMismatch = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_PATTERN_MISMATCH); return NS_OK; }
NS_IMETHODIMP nsDOMValidityState::GetTypeMismatch(PRBool* aTypeMismatch) { *aTypeMismatch = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_TYPE_MISMATCH); return NS_OK; }
NS_IMETHODIMP nsDOMValidityState::GetValueMissing(PRBool* aValueMissing) { *aValueMissing = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_VALUE_MISSING); return NS_OK; }
NS_IMETHODIMP nsDOMValidityState::GetCustomError(PRBool* aCustomError) { *aCustomError = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_CUSTOM_ERROR); return NS_OK; }
NS_IMETHODIMP nsDOMValidityState::GetStepMismatch(bool* aStepMismatch) { *aStepMismatch = GetValidityState(nsIConstraintValidation::VALIDITY_STATE_STEP_MISMATCH); return NS_OK; }