#include "V8Attr.h" #include "V8Element.h" #include "V8Node.h" namespace Arabica { namespace DOM { v8::Persistent V8Attr::Tmpl; v8::Handle V8Attr::nameAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8AttrPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::String::New(privData->arabicaThis->getName().c_str()); } v8::Handle V8Attr::specifiedAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8AttrPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::Boolean::New(privData->arabicaThis->getSpecified()); } v8::Handle V8Attr::valueAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8AttrPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); return v8::String::New(privData->arabicaThis->getValue().c_str()); } void V8Attr::valueAttrSetter(v8::Local property, v8::Local value, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8AttrPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); v8::String::AsciiValue localValue(value); privData->arabicaThis->setValue(*localValue); } v8::Handle V8Attr::ownerElementAttrGetter(v8::Local property, const v8::AccessorInfo& info) { v8::Local self = info.Holder(); V8AttrPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); Arabica::DOM::Element* arbaicaRet = new Arabica::DOM::Element(privData->arabicaThis->getOwnerElement()); v8::Handle arbaicaRetCtor = V8Element::getTmpl()->GetFunction(); v8::Persistent arbaicaRetObj = v8::Persistent::New(arbaicaRetCtor->NewInstance()); V8Element::V8ElementPrivate* retPrivData = new V8Element::V8ElementPrivate(); retPrivData->dom = privData->dom; retPrivData->arabicaThis = arbaicaRet; arbaicaRetObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); arbaicaRetObj.MakeWeak(0, V8Element::jsDestructor); return arbaicaRetObj; } bool V8Attr::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }