JSValue* JSHTMLCollection::item(ExecState* exec, const ArgList& args) { bool ok; uint32_t index = args[0]->toString(exec).toUInt32(&ok, false); if (ok) return toJS(exec, impl()->item(index)); return getNamedItems(exec, impl(), Identifier(exec, args[0]->toString(exec))); }
JSValue JSHTMLCollection::item(ExecState* exec) { bool ok; uint32_t index = Identifier::toUInt32(exec->argument(0).toString(exec), ok); if (ok) return toJS(exec, globalObject(), impl()->item(index)); return getNamedItems(exec, this, Identifier(exec, exec->argument(0).toString(exec))); }
v8::Handle<v8::Value> V8HTMLFormControlsCollection::namedItemMethodCustom(const v8::Arguments& args) { HTMLFormControlsCollection* imp = V8HTMLFormControlsCollection::toNative(args.Holder()); v8::Handle<v8::Value> result = getNamedItems(imp, toWebCoreString(args[0]), args); if (result.IsEmpty()) return v8Null(args.GetIsolate()); return result; }
v8::Handle<v8::Value> V8HTMLCollection::namedItemCallback(const v8::Arguments& args) { INC_STATS("DOM.HTMLCollection.namedItem()"); HTMLCollection* imp = V8DOMWrapper::convertToNativeObject<HTMLCollection>(V8ClassIndex::HTMLCOLLECTION, args.Holder()); v8::Handle<v8::Value> result = getNamedItems(imp, toWebCoreString(args[0])); if (result.IsEmpty()) return v8::Undefined(); return result; }
v8::Handle<v8::Value> V8HTMLFormControlsCollection::namedItemCallback(const v8::Arguments& args) { INC_STATS("DOM.HTMLCollection.namedItem()"); HTMLFormControlsCollection* imp = V8HTMLFormControlsCollection::toNative(args.Holder()); v8::Handle<v8::Value> result = getNamedItems(imp, toWebCoreString(args[0]), args.Holder(), args.GetIsolate()); if (result.IsEmpty()) return v8::Undefined(args.GetIsolate()); return result; }
v8::Handle<v8::Value> V8HTMLFormControlsCollection::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLCollection.NamedPropertyGetter"); if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) return v8Undefined(); if (info.Holder()->HasRealNamedCallbackProperty(name)) return v8Undefined(); HTMLFormControlsCollection* imp = V8HTMLFormControlsCollection::toNative(info.Holder()); return getNamedItems(imp, toWebCoreAtomicString(name), info.Holder(), info.GetIsolate()); }
v8::Handle<v8::Value> V8HTMLCollection::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLCollection.NamedPropertyGetter"); if (!info.Holder()->GetRealNamedPropertyInPrototypeChain(name).IsEmpty()) return notHandledByInterceptor(); if (info.Holder()->HasRealNamedCallbackProperty(name)) return notHandledByInterceptor(); HTMLCollection* imp = V8HTMLCollection::toNative(info.Holder()); return getNamedItems(imp, v8StringToAtomicWebCoreString(name)); }
void V8HTMLFormControlsCollection::namedItemMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args) { V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, name, args[0]); HTMLFormControlsCollection* imp = V8HTMLFormControlsCollection::toNative(args.Holder()); v8::Handle<v8::Value> result = getNamedItems(imp, name, args); if (result.IsEmpty()) { v8SetReturnValueNull(args); return; } v8SetReturnValue(args, result); }
static v8::Handle<v8::Value> getItem(HTMLAllCollection* collection, v8::Handle<v8::Value> argument, v8::Handle<v8::Object> creationContext, v8::Isolate* isolate) { v8::Local<v8::Uint32> index = argument->ToArrayIndex(); if (index.IsEmpty()) { v8::Handle<v8::Value> result = getNamedItems(collection, toWebCoreString(argument->ToString()), creationContext, isolate); if (result.IsEmpty()) return v8::Undefined(); return result; } RefPtr<Node> result = collection->item(index->Uint32Value()); return toV8(result.release(), creationContext, isolate); }
static v8::Handle<v8::Value> getItem(HTMLAllCollection* collection, v8::Handle<v8::Value> argument) { v8::Local<v8::Uint32> index = argument->ToArrayIndex(); if (index.IsEmpty()) { v8::Handle<v8::Value> result = getNamedItems(collection, toWebCoreString(argument->ToString())); if (result.IsEmpty()) return v8::Undefined(); return result; } RefPtr<Node> result = collection->item(index->Uint32Value()); return V8DOMWrapper::convertNodeToV8Object(result.release()); }
static v8::Local<v8::Value> getItem(HTMLAllCollection* collection, v8::Local<v8::Value> argument, const CallbackInfo& info) { v8::Local<v8::Uint32> index; if (!argument->ToArrayIndex(info.GetIsolate()->GetCurrentContext()).ToLocal(&index)) { TOSTRING_DEFAULT(V8StringResource<>, name, argument, v8::Undefined(info.GetIsolate())); v8::Local<v8::Value> result = getNamedItems(collection, name, info); if (result.IsEmpty()) return v8::Undefined(info.GetIsolate()); return result; } RefPtrWillBeRawPtr<Element> result = collection->item(index->Value()); return toV8(result.release(), info.Holder(), info.GetIsolate()); }
static v8::Handle<v8::Value> getItem(HTMLAllCollection* collection, v8::Handle<v8::Value> argument, const CallbackInfo& info) { v8::Local<v8::Uint32> index = argument->ToArrayIndex(); if (index.IsEmpty()) { V8TRYCATCH_FOR_V8STRINGRESOURCE_RETURN(V8StringResource<>, name, argument, v8::Undefined(info.GetIsolate())); v8::Handle<v8::Value> result = getNamedItems(collection, name, info); if (result.IsEmpty()) return v8::Undefined(info.GetIsolate()); return result; } RefPtr<Element> result = collection->item(index->Uint32Value()); return toV8(result.release(), info.Holder(), info.GetIsolate()); }
v8::Handle<v8::Value> V8HTMLCollection::namedPropertyGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLCollection.NamedPropertyGetter"); // Search the prototype chain first. v8::Handle<v8::Value> value = info.Holder()->GetRealNamedPropertyInPrototypeChain(name); if (!value.IsEmpty()) return value; // Search local callback properties next to find IDL defined // properties. if (info.Holder()->HasRealNamedCallbackProperty(name)) return v8::Handle<v8::Value>(); // Finally, search the DOM structure. HTMLCollection* imp = V8HTMLCollection::toNative(info.Holder()); return getNamedItems(imp, v8StringToAtomicWebCoreString(name)); }
// HTMLCollections are strange objects, they support both get and call, // so that document.forms.item(0) and document.forms(0) both work. static JSValue JSC_HOST_CALL callHTMLCollection(ExecState* exec, JSObject* function, JSValue, const ArgList& args) { if (args.size() < 1) return jsUndefined(); // Do not use thisObj here. It can be the JSHTMLDocument, in the document.forms(i) case. JSHTMLCollection* jsCollection = static_cast<JSHTMLCollection*>(function); HTMLCollection* collection = jsCollection->impl(); // Also, do we need the TypeError test here ? if (args.size() == 1) { // Support for document.all(<index>) etc. bool ok; UString string = args.at(0).toString(exec); unsigned index = string.toUInt32(&ok, false); if (ok) return toJS(exec, jsCollection->globalObject(), collection->item(index)); // Support for document.images('<name>') etc. return getNamedItems(exec, jsCollection, Identifier(exec, string)); } // The second arg, if set, is the index of the item we want bool ok; UString string = args.at(0).toString(exec); unsigned index = args.at(1).toString(exec).toUInt32(&ok, false); if (ok) { String pstr = string; Node* node = collection->namedItem(pstr); while (node) { if (!index) return toJS(exec, jsCollection->globalObject(), node); node = collection->nextNamedItem(pstr); --index; } } return jsUndefined(); }
// HTMLCollections are strange objects, they support both get and call, // so that document.forms.item(0) and document.forms(0) both work. static EncodedJSValue JSC_HOST_CALL callHTMLCollection(ExecState* exec) { if (exec->argumentCount() < 1) return JSValue::encode(jsUndefined()); // Do not use thisObj here. It can be the JSHTMLDocument, in the document.forms(i) case. JSHTMLCollection* jsCollection = static_cast<JSHTMLCollection*>(exec->callee()); HTMLCollection* collection = jsCollection->impl(); // Also, do we need the TypeError test here ? if (exec->argumentCount() == 1) { // Support for document.all(<index>) etc. bool ok; UString string = exec->argument(0).toString(exec); unsigned index = Identifier::toUInt32(string, ok); if (ok) return JSValue::encode(toJS(exec, jsCollection->globalObject(), collection->item(index))); // Support for document.images('<name>') etc. return JSValue::encode(getNamedItems(exec, jsCollection, Identifier(exec, string))); } // The second arg, if set, is the index of the item we want bool ok; UString string = exec->argument(0).toString(exec); unsigned index = Identifier::toUInt32(exec->argument(1).toString(exec), ok); if (ok) { String pstr = ustringToString(string); Node* node = collection->namedItem(pstr); while (node) { if (!index) return JSValue::encode(toJS(exec, jsCollection->globalObject(), node)); node = collection->nextNamedItem(pstr); --index; } } return JSValue::encode(jsUndefined()); }
JSValue JSHTMLCollection::namedItem(ExecState* exec, const ArgList& args) { return getNamedItems(exec, this, Identifier(exec, args.at(0).toString(exec))); }
bool JSHTMLCollection::canGetItemsForName(ExecState* exec, HTMLCollection* thisObj, const Identifier& propertyName) { return !getNamedItems(exec, thisObj, propertyName)->isUndefined(); }
JSValue* JSHTMLCollection::namedItem(ExecState* exec, const ArgList& args) { return getNamedItems(exec, impl(), Identifier(exec, args[0]->toString(exec))); }
JSValue* JSHTMLCollection::nameGetter(ExecState* exec, const Identifier& propertyName, const PropertySlot& slot) { JSHTMLCollection* thisObj = static_cast<JSHTMLCollection*>(slot.slotBase()); return getNamedItems(exec, thisObj->impl(), propertyName); }
void V8HTMLOptionsCollection::namedItemMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args) { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(args.Holder()); getNamedItems(imp, toWebCoreString(args[0]), args); }
JSValue JSHTMLCollection::nameGetter(ExecState* exec, JSValue slotBase, const Identifier& propertyName) { JSHTMLCollection* thisObj = static_cast<JSHTMLCollection*>(asObject(slotBase)); return getNamedItems(exec, thisObj, propertyName); }
JSValue JSHTMLFormControlsCollection::namedItem(ExecState* exec) { JSValue value = getNamedItems(exec, this, Identifier(exec, exec->argument(0).toString(exec)->value(exec))); return value.isUndefined() ? jsNull() : value; }
JSValue JSHTMLFormControlsCollection::nameGetter(ExecState* exec, JSValue slotBase, PropertyName propertyName) { JSHTMLFormControlsCollection* thisObj = jsCast<JSHTMLFormControlsCollection*>(asObject(slotBase)); return getNamedItems(exec, thisObj, propertyName); }
JSValue JSHTMLCollection::namedItem(ExecState* exec) { return getNamedItems(exec, this, Identifier(exec, exec->argument(0).toString(exec))); }
EncodedJSValue JSHTMLFormControlsCollection::nameGetter(ExecState* exec, JSObject* slotBase, EncodedJSValue, PropertyName propertyName) { JSHTMLFormControlsCollection* thisObj = jsCast<JSHTMLFormControlsCollection*>(slotBase); return JSValue::encode(getNamedItems(exec, thisObj, propertyName)); }
void V8HTMLOptionsCollection::namedItemMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { V8TRYCATCH_FOR_V8STRINGRESOURCE_VOID(V8StringResource<>, name, info[0]); HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); getNamedItems(imp, name, info); }