v8::Handle<v8::Value> V8HTMLOptionsCollection::addCallback(const v8::Arguments& args) { INC_STATS("DOM.HTMLOptionsCollection.add()"); if (!V8HTMLOptionElement::HasInstance(args[0])) return setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate()); HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(args.Holder()); HTMLOptionElement* option = V8HTMLOptionElement::toNative(v8::Handle<v8::Object>(v8::Handle<v8::Object>::Cast(args[0]))); ExceptionCode ec = 0; if (args.Length() < 2) imp->add(option, ec); else { bool ok; v8::TryCatch try_catch; int index = toInt32(args[1], ok); if (try_catch.HasCaught()) return v8::Undefined(); if (!ok) ec = TYPE_MISMATCH_ERR; else imp->add(option, index, ec); } if (ec) return setDOMException(ec, args.GetIsolate()); return v8::Undefined(); }
v8::Handle<v8::Value> V8HTMLOptionsCollection::lengthAccessorGetter(v8::Local<v8::String> name, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOptionsCollection.length._get"); HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); int v = imp->length(); return v8Integer(v, info.GetIsolate()); }
v8::Handle<v8::Value> V8HTMLOptionsCollection::indexedPropertySetter(uint32_t index, v8::Local<v8::Value> value, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOptionsCollection.IndexedPropertySetter"); HTMLOptionsCollection* collection = V8HTMLOptionsCollection::toNative(info.Holder()); HTMLSelectElement* base = static_cast<HTMLSelectElement*>(collection->base()); return toOptionsCollectionSetter(index, value, base, info.GetIsolate()); }
v8::Handle<v8::Value> V8HTMLOptionsCollection::removeCallback(const v8::Arguments& args) { INC_STATS("DOM.HTMLOptionsCollection.remove()"); HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(args.Holder()); HTMLSelectElement* base = static_cast<HTMLSelectElement*>(imp->base()); return removeElement(base, args); }
void V8HTMLOptionsCollection::addMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args) { if (!V8HTMLOptionElement::HasInstance(args[0], args.GetIsolate(), worldType(args.GetIsolate()))) { setDOMException(TYPE_MISMATCH_ERR, args.GetIsolate()); return; } HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(args.Holder()); HTMLOptionElement* option = V8HTMLOptionElement::toNative(v8::Handle<v8::Object>(v8::Handle<v8::Object>::Cast(args[0]))); ExceptionCode ec = 0; if (args.Length() < 2) imp->add(option, ec); else { bool ok; V8TRYCATCH_VOID(int, index, toInt32(args[1], ok)); if (!ok) ec = TYPE_MISMATCH_ERR; else imp->add(option, index, ec); } if (!ec) return; setDOMException(ec, args.GetIsolate()); }
JSValue jsHTMLOptionsCollectionSelectedIndex(ExecState* exec, JSValue slotBase, const Identifier&) { JSHTMLOptionsCollection* castedThis = static_cast<JSHTMLOptionsCollection*>(asObject(slotBase)); UNUSED_PARAM(exec); HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(castedThis->impl()); JSValue result = jsNumber(imp->selectedIndex()); return result; }
v8::Handle<v8::Value> V8HTMLOptionsCollection::indexedPropertyGetter(uint32_t index, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOptionsCollection.IndexedPropertyGetter"); HTMLOptionsCollection* collection = V8HTMLOptionsCollection::toNative(info.Holder()); RefPtr<Node> result = collection->item(index); if (!result) return v8Undefined(); return toV8(result.release(), info.Holder()->CreationContext(), info.GetIsolate()); }
JSValue* JSHTMLOptionsCollection::getValueProperty(ExecState* exec, int token) const { switch (token) { case SelectedIndexAttrNum: { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); return jsNumber(exec, imp->selectedIndex()); } case LengthAttrNum: { return length(exec); } } return 0; }
void JSHTMLOptionsCollection::putValueProperty(ExecState* exec, int token, JSValue* value) { switch (token) { case SelectedIndexAttrNum: { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); imp->setSelectedIndex(value->toInt32(exec)); break; } case LengthAttrNum: { setLength(exec, value); break; } } }
JSValue JSHTMLOptionsCollection::add(ExecState* exec) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); HTMLOptionElement* option = toHTMLOptionElement(exec->argument(0)); ExceptionCode ec = 0; if (exec->argumentCount() < 2) imp->add(option, ec); else { int index = exec->argument(1).toInt32(exec); if (exec->hadException()) return jsUndefined(); imp->add(option, index, ec); } setDOMException(exec, ec); return jsUndefined(); }
void JSHTMLOptionsCollection::setLength(ExecState* exec, JSValue value) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); ExceptionCode ec = 0; unsigned newLength = 0; double lengthValue = value.toNumber(exec); if (!isnan(lengthValue) && !isinf(lengthValue)) { if (lengthValue < 0.0) ec = INDEX_SIZE_ERR; else if (lengthValue > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(lengthValue); } if (!ec) imp->setLength(newLength, ec); setDOMException(exec, ec); }
void V8HTMLOptionsCollection::lengthAttrSetterCustom(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); double v = value->NumberValue(); unsigned newLength = 0; ExceptionCode ec = 0; if (!std::isnan(v) && !std::isinf(v)) { if (v < 0.0) ec = INDEX_SIZE_ERR; else if (v > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(v); } if (!ec) imp->setLength(newLength, ec); setDOMException(ec, info.GetIsolate()); }
JSValue JSHTMLOptionsCollection::add(ExecState* exec, const ArgList& args) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); HTMLOptionElement* option = toHTMLOptionElement(args.at(0)); ExceptionCode ec = 0; if (args.size() < 2) imp->add(option, ec); else { bool ok; int index = args.at(1).toInt32(exec, ok); if (exec->hadException()) return jsUndefined(); if (!ok) ec = TYPE_MISMATCH_ERR; else imp->add(option, index, ec); } setDOMException(exec, ec); return jsUndefined(); }
JSValue JSHTMLOptionsCollection::add(ExecState* exec) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); HTMLOptionElement* option = toHTMLOptionElement(exec->argument(0)); ExceptionCode ec = 0; if (exec->argumentCount() < 2) imp->add(option, ec); else { bool ok; int index = finiteInt32Value(exec->argument(1), exec, ok); if (exec->hadException()) return jsUndefined(); if (!ok) ec = TYPE_MISMATCH_ERR; else imp->add(option, index, ec); } setDOMException(exec, ec); return jsUndefined(); }
int32_t HTMLOptionElement::Index() { static int32_t defaultIndex = 0; // Only select elements can contain a list of options. HTMLSelectElement* selectElement = GetSelect(); if (!selectElement) { return defaultIndex; } HTMLOptionsCollection* options = selectElement->GetOptions(); if (!options) { return defaultIndex; } int32_t index = defaultIndex; MOZ_ALWAYS_SUCCEEDS(options->GetOptionIndex(this, 0, true, &index)); return index; }
void V8HTMLOptionsCollection::lengthAttributeSetterCustom(v8::Local<v8::Value> value, const v8::PropertyCallbackInfo<void>& info) { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); double v = value->NumberValue(); unsigned newLength = 0; ExceptionState exceptionState(ExceptionState::SetterContext, "length", "HTMLOptionsCollection", info.Holder(), info.GetIsolate()); if (!std::isnan(v) && !std::isinf(v)) { if (v < 0.0) exceptionState.throwDOMException(IndexSizeError, "The value provided (" + String::number(v) + ") is negative. Lengths must be greater than or equal to 0."); else if (v > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(v); } if (exceptionState.throwIfNeeded()) return; imp->setLength(newLength, exceptionState); }
void V8HTMLOptionsCollection::lengthAccessorSetter(v8::Local<v8::String> name, v8::Local<v8::Value> value, const v8::AccessorInfo& info) { INC_STATS("DOM.HTMLOptionsCollection.length._set"); HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); double v = value->NumberValue(); unsigned newLength = 0; ExceptionCode ec = 0; if (!isnan(v) && !isinf(v)) { if (v < 0.0) ec = INDEX_SIZE_ERR; else if (v > static_cast<double>(UINT_MAX)) newLength = UINT_MAX; else newLength = static_cast<unsigned>(v); } if (!ec) imp->setLength(newLength, ec); setDOMException(ec, info.GetIsolate()); }
void V8HTMLOptionsCollection::addMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { ExceptionState exceptionState(ExceptionState::ExecutionContext, "add", "HTMLOptionsCollection", info.Holder(), info.GetIsolate()); if (!V8HTMLOptionElement::hasInstance(info[0], info.GetIsolate())) { exceptionState.throwTypeError("The element provided was not an HTMLOptionElement."); } else { HTMLOptionsCollection* impl = V8HTMLOptionsCollection::toNative(info.Holder()); HTMLOptionElement* option = V8HTMLOptionElement::toNative(v8::Handle<v8::Object>(v8::Handle<v8::Object>::Cast(info[0]))); if (info.Length() < 2) { impl->add(option, exceptionState); } else { int index = toInt32(info[1], exceptionState); if (exceptionState.throwIfNeeded()) return; impl->add(option, index, exceptionState); } } exceptionState.throwIfNeeded(); }
void V8HTMLOptionsCollection::addMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& info) { ExceptionState exceptionState(ExceptionState::ExecutionContext, "add", "HTMLOptionsCollection", info.Holder(), info.GetIsolate()); if (!V8HTMLOptionElement::hasInstance(info[0], info.GetIsolate(), worldType(info.GetIsolate()))) { exceptionState.throwTypeError("The element provided was not an HTMLOptionElement."); } else { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(info.Holder()); HTMLOptionElement* option = V8HTMLOptionElement::toNative(v8::Handle<v8::Object>(v8::Handle<v8::Object>::Cast(info[0]))); if (info.Length() < 2) { imp->add(option, exceptionState); } else { bool ok; V8TRYCATCH_VOID(int, index, toInt32(info[1], ok)); if (!ok) exceptionState.throwTypeError("The index provided could not be interpreted as an integer."); else imp->add(option, index, exceptionState); } } exceptionState.throwIfNeeded(); }
void setJSHTMLOptionsCollectionSelectedIndex(ExecState* exec, JSObject* thisObject, JSValue value) { JSHTMLOptionsCollection* castedThis = static_cast<JSHTMLOptionsCollection*>(thisObject); HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(castedThis->impl()); imp->setSelectedIndex(value.toInt32(exec)); }
JSValue JSHTMLOptionsCollection::remove(ExecState* exec, const ArgList& args) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); JSHTMLSelectElement* base = static_cast<JSHTMLSelectElement*>(asObject(toJS(exec, globalObject(), imp->base()))); return base->remove(exec, args); }
void JSHTMLOptionsCollection::indexSetter(ExecState* exec, unsigned index, JSValue value) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); HTMLSelectElement* base = static_cast<HTMLSelectElement*>(imp->base()); selectIndexSetter(base, exec, index, value); }
JSValue JSHTMLOptionsCollection::length(ExecState* exec) const { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); return jsNumber(exec, imp->length()); }
JSValue JSHTMLOptionsCollection::remove(ExecState* exec) { HTMLOptionsCollection* imp = static_cast<HTMLOptionsCollection*>(impl()); JSHTMLSelectElement* base = jsCast<JSHTMLSelectElement*>(asObject(toJS(exec, globalObject(), imp->ownerNode()))); return base->remove(exec); }
void V8HTMLOptionsCollection::removeMethodCustom(const v8::FunctionCallbackInfo<v8::Value>& args) { HTMLOptionsCollection* imp = V8HTMLOptionsCollection::toNative(args.Holder()); HTMLSelectElement* base = toHTMLSelectElement(imp->ownerNode()); removeElement(base, args); }