#include "V8Node.h" #include "V8NodeList.h" namespace Arabica { namespace DOM { v8::Persistent V8NodeList::Tmpl; v8::Handle V8NodeList::lengthAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); struct V8NodeListPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Integer::New(privData->arabicaThis->getLength()); } v8::Handle V8NodeList::itemCallback(const v8::Arguments& args) { if (args.Length() < 1) throw V8Exception("Wrong number of arguments in item"); v8::Local self = args.Holder(); struct V8NodeListPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); unsigned long localIndex = args[0]->ToNumber()->Uint32Value(); Arabica::DOM::Node* retVal = new Arabica::DOM::Node(privData->arabicaThis->item(localIndex)); v8::Handle retCtor = V8Node::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8Node::V8NodePrivate* retPrivData = new V8Node::V8NodePrivate(); retPrivData->dom = privData->dom; retPrivData->arabicaThis = retVal; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8Node::jsDestructor); return retObj; } bool V8NodeList::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }