/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ /* vim: set ts=8 sts=2 et sw=2 tw=80: */ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
nsresult HTMLOptionsCollection::GetOptionIndex(Element* aOption,
int32_t aStartIndex, bool aForward, int32_t* aIndex) { // NOTE: aIndex shouldn't be set if the returned value isn't NS_OK.
int32_t index;
// Make the common case fast if (aStartIndex == 0 && aForward) {
index = mElements.IndexOf(aOption); if (index == -1) { return NS_ERROR_FAILURE;
}
void HTMLOptionsCollection::IndexedSetter(uint32_t aIndex,
HTMLOptionElement* aOption,
ErrorResult& aError) { // if the new option is null, just remove this option. Note that it's safe // to pass a too-large aIndex in here. if (!aOption) {
mSelect->Remove(aIndex);
// We're done. return;
}
// Now we're going to be setting an option in our collection if (aIndex > mElements.Length()) { // Fill our array with blank options up to (but not including, since we're // about to change it) aIndex, for compat with other browsers.
SetLength(aIndex, aError); if (NS_WARN_IF(aError.Failed())) { return;
}
}
if (aIndex == mElements.Length()) {
mSelect->AppendChild(*aOption, aError); return;
}
// Find the option they're talking about and replace it // hold a strong reference to follow COM rules.
RefPtr<HTMLOptionElement> refChild = ItemAsOption(aIndex); if (!refChild) {
aError.Throw(NS_ERROR_UNEXPECTED); return;
}
nsCOMPtr<nsINode> parent = refChild->GetParent(); if (!parent) { return;
}
void HTMLOptionsCollection::GetSupportedNames(nsTArray<nsString>& aNames) {
AutoTArray<nsAtom*, 8> atoms; for (uint32_t i = 0; i < mElements.Length(); ++i) {
HTMLOptionElement* content = mElements.ElementAt(i); if (content) { // Note: HasName means the names is exposed on the document, // which is false for options, so we don't check it here. const nsAttrValue* val = content->GetParsedAttr(nsGkAtoms::name); if (val && val->Type() == nsAttrValue::eAtom) {
nsAtom* name = val->GetAtomValue(); if (!atoms.Contains(name)) {
atoms.AppendElement(name);
}
} if (content->HasID()) {
nsAtom* id = content->GetID(); if (!atoms.Contains(id)) {
atoms.AppendElement(id);
}
}
}
}
uint32_t atomsLen = atoms.Length();
nsString* names = aNames.AppendElements(atomsLen); for (uint32_t i = 0; i < atomsLen; ++i) {
atoms[i]->ToString(names[i]);
}
}
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 ist noch experimentell.