JSValue jsHTMLCollectionLength(ExecState* exec, JSValue slotBase, const Identifier&) { JSHTMLCollection* castedThis = static_cast<JSHTMLCollection*>(asObject(slotBase)); UNUSED_PARAM(exec); HTMLCollection* imp = static_cast<HTMLCollection*>(castedThis->impl()); JSValue result = jsNumber(imp->length()); return result; }
void WebDocument::forms(WebVector<WebFormElement>& results) const { HTMLCollection* forms = const_cast<Document*>(constUnwrap<Document>())->forms(); size_t sourceLength = forms->length(); Vector<WebFormElement> temp; temp.reserveCapacity(sourceLength); for (size_t i = 0; i < sourceLength; ++i) { Element* element = forms->item(i); // Strange but true, sometimes node can be 0. if (element && element->isHTMLElement()) temp.append(WebFormElement(toHTMLFormElement(element))); } results.assign(temp); }
HTMLElement* HTMLTableRowElement::insertCell(int index, ExceptionState& exceptionState) { HTMLCollection* children = cells(); int numCells = children ? children->length() : 0; if (index < -1 || index > numCells) { exceptionState.throwDOMException( IndexSizeError, "The value provided (" + String::number(index) + ") is outside the range [-1, " + String::number(numCells) + "]."); return nullptr; } HTMLTableCellElement* cell = HTMLTableCellElement::create(tdTag, document()); if (numCells == index || index == -1) appendChild(cell, exceptionState); else insertBefore(cell, children->item(index), exceptionState); return cell; }
void HTMLTableRowElement::deleteCell(int index, ExceptionState& exceptionState) { HTMLCollection* children = cells(); int numCells = children ? children->length() : 0; // 1. If index is less than −1 or greater than or equal to the number of // elements in the cells collection, then throw "IndexSizeError". if (index < -1 || index >= numCells) { exceptionState.throwDOMException( IndexSizeError, "The value provided (" + String::number(index) + ") is outside the range [0, " + String::number(numCells) + ")."); return; } // 2. If index is −1, remove the last element in the cells collection // from its parent, or do nothing if the cells collection is empty. if (index == -1) { if (numCells == 0) return; index = numCells - 1; } // 3. Remove the indexth element in the cells collection from its parent. Element* cell = children->item(index); HTMLElement::removeChild(cell, exceptionState); }
static v8::Handle<v8::Value> lengthAttrGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLCollection.length._get"); HTMLCollection* imp = V8HTMLCollection::toNative(info.Holder()); return v8::Integer::NewFromUnsigned(imp->length()); }