/* This Source Code Form is subject to the terms of the Mozilla Public *License,v.2.0.IfacopyoftheMPLwasnotdistributedwiththis
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
// nsIContent void HTMLFieldSetElement::GetEventTargetParent(EventChainPreVisitor& aVisitor) { // Do not process any DOM events if the element is disabled.
aVisitor.mCanHandle = false;
if (IsDisabledForEvents(aVisitor.mEvent)) { return;
}
void HTMLFieldSetElement::AfterSetAttr(int32_t aNameSpaceID, nsAtom* aName, const nsAttrValue* aValue, const nsAttrValue* aOldValue,
nsIPrincipal* aSubjectPrincipal, bool aNotify) {
if (aNameSpaceID == kNameSpaceID_None && aName == nsGkAtoms::disabled) { // This *has* to be called *before* calling FieldSetDisabledChanged on our // controls, as they may depend on our disabled state.
UpdateDisabledState(aNotify);
}
if (aChild->IsHTMLElement(nsGkAtoms::legend)) {
if (!mFirstLegend) {
mFirstLegend = aChild; // We do not want to notify the first time mFirstElement is set.
} else { // If mFirstLegend is before aIndex, we do not change it. // Otherwise, mFirstLegend is now aChild. const Maybe<uint32_t> indexOfRef =
aBeforeThis ? ComputeIndexOf(aBeforeThis) : Some(GetChildCount()); const Maybe<uint32_t> indexOfFirstLegend = ComputeIndexOf(mFirstLegend);
if ((indexOfRef.isSome() && indexOfFirstLegend.isSome() &&
*indexOfRef <= *indexOfFirstLegend) || // XXX Keep the odd traditional behavior for now.
indexOfRef.isNothing()) {
mFirstLegend = aChild;
firstLegendHasChanged = true;
}
}
}
if (mFirstLegend && aKid == mFirstLegend) { // If we are removing the first legend we have to found another one.
nsIContent* child = mFirstLegend->GetNextSibling();
mFirstLegend = nullptr;
firstLegendHasChanged = true;
for (; child; child = child->GetNextSibling()) {
if (child->IsHTMLElement(nsGkAtoms::legend)) {
mFirstLegend = child; break;
}
}
}
// If the element that we are adding aElement is a fieldset, then all the // invalid elements in aElement are also invalid elements of this.
HTMLFieldSetElement* fieldSet = FromNode(aElement);
if (fieldSet) {
for (int32_t i = 0; i < fieldSet->mInvalidElementsCount; i++) {
UpdateValidity(false);
} return;
}
// If the element is a form-associated custom element, adding element might be // caused by FACE upgrade which won't trigger mutation observer, so mark // mElements dirty manually here.
CustomElementData* data = aElement->GetCustomElementData();
if (data && data->IsFormAssociated() && mElements) {
mElements->SetDirty();
}
// We need to update the validity of the fieldset.
nsCOMPtr<nsIConstraintValidation> cvElmt = do_QueryObject(aElement);
if (cvElmt && cvElmt->IsCandidateForConstraintValidation() &&
!cvElmt->IsValid()) {
UpdateValidity(false);
}
#if DEBUG
int32_t debugInvalidElementsCount = 0;
for (uint32_t i = 0; i < mDependentElements.Length(); i++) {
HTMLFieldSetElement* fieldSet = FromNode(mDependentElements[i]);
if (fieldSet) {
debugInvalidElementsCount += fieldSet->mInvalidElementsCount; continue;
}
nsCOMPtr<nsIConstraintValidation> cvElmt =
do_QueryObject(mDependentElements[i]);
if (cvElmt && cvElmt->IsCandidateForConstraintValidation() &&
!(cvElmt->IsValid())) {
debugInvalidElementsCount += 1;
}
}
MOZ_ASSERT(debugInvalidElementsCount == mInvalidElementsCount); #endif
}
// If the element that we are removing aElement is a fieldset, then all the // invalid elements in aElement are also removed from this.
HTMLFieldSetElement* fieldSet = FromNode(aElement);
if (fieldSet) {
for (int32_t i = 0; i < fieldSet->mInvalidElementsCount; i++) {
UpdateValidity(true);
} return;
}
// We need to update the validity of the fieldset.
nsCOMPtr<nsIConstraintValidation> cvElmt = do_QueryObject(aElement);
if (cvElmt && cvElmt->IsCandidateForConstraintValidation() &&
!cvElmt->IsValid()) {
UpdateValidity(true);
}
#if DEBUG
int32_t debugInvalidElementsCount = 0;
for (uint32_t i = 0; i < mDependentElements.Length(); i++) {
HTMLFieldSetElement* fieldSet = FromNode(mDependentElements[i]);
if (fieldSet) {
debugInvalidElementsCount += fieldSet->mInvalidElementsCount; continue;
}
nsCOMPtr<nsIConstraintValidation> cvElmt =
do_QueryObject(mDependentElements[i]);
if (cvElmt && cvElmt->IsCandidateForConstraintValidation() &&
!(cvElmt->IsValid())) {
debugInvalidElementsCount += 1;
}
}
MOZ_ASSERT(debugInvalidElementsCount == mInvalidElementsCount); #endif
}
// The fieldset validity has just changed if: // - there are no more invalid elements ; // - or there is one invalid elmement and an element just became invalid.
if (!mInvalidElementsCount ||
(mInvalidElementsCount == 1 && !aElementValidity)) {
AutoStateChangeNotifier notifier(*this, true);
RemoveStatesSilently(ElementState::VALID | ElementState::INVALID);
AddStatesSilently(mInvalidElementsCount ? ElementState::INVALID
: ElementState::VALID);
}
// We should propagate the change to the fieldset parent chain.
if (mFieldSet) {
mFieldSet->UpdateValidity(aElementValidity);
}
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.