#include "V8NodeSet.h" #include "V8XPathResult.h" namespace Arabica { namespace DOM { v8::Persistent V8XPathResult::Tmpl; v8::Handle V8XPathResult::numberValueAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Number::New(privData->arabicaThis->asNumber()); } v8::Handle V8XPathResult::stringValueAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::String::New(privData->arabicaThis->asString().c_str()); } v8::Handle V8XPathResult::booleanValueAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Boolean::New(privData->arabicaThis->asBool()); } v8::Handle V8XPathResult::asNodeSetCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); Arabica::XPath::NodeSet* retVal = new Arabica::XPath::NodeSet(privData->arabicaThis->asNodeSet()); v8::Handle retCtor = V8NodeSet::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8NodeSet::V8NodeSetPrivate* retPrivData = new V8NodeSet::V8NodeSetPrivate(); retPrivData->dom = privData->dom; retPrivData->arabicaThis = retVal; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8NodeSet::jsDestructor); return retObj; } v8::Handle V8XPathResult::asBoolCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); bool retVal = privData->arabicaThis->asBool(); return v8::Boolean::New(retVal); } v8::Handle V8XPathResult::asStringCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); std::string retVal = privData->arabicaThis->asString(); return v8::String::New(retVal.c_str()); } v8::Handle V8XPathResult::asNumberCallback(const v8::Arguments& args) { v8::Local self = args.Holder(); V8XPathResultPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); double retVal = privData->arabicaThis->asNumber(); return v8::Number::New(retVal); } bool V8XPathResult::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }