#include "V8NodeSet.h" #include "V8Element.h" #include "V8Node.h" namespace Arabica { namespace DOM { v8::Handle V8NodeSet::indexedPropertyCustomGetter(uint32_t index, const v8::AccessorInfo &info) { v8::Local self = info.Holder(); V8NodeSetPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); if (privData->arabicaThis->size() >= index) { switch((*privData->arabicaThis)[index].getNodeType()) { case Node_base::ELEMENT_NODE: { Arabica::DOM::Element* retVal = new Arabica::DOM::Element((*privData->arabicaThis)[index]); v8::Handle retCtor = V8Element::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8Element::V8ElementPrivate* retPrivData = new V8Element::V8ElementPrivate(); retPrivData->dom = privData->dom; retPrivData->arabicaThis = retVal; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8Element::jsDestructor); return retObj; } default: { Arabica::DOM::Node* retVal = new Arabica::DOM::Node((*privData->arabicaThis)[index]); 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; } } } return v8::Undefined(); } } }