#include "V8DOMImplementation.h" #include "V8Document.h" #include "V8DocumentType.h" namespace Arabica { namespace DOM { v8::Persistent V8DOMImplementation::Tmpl; v8::Handle V8DOMImplementation::hasFeatureCallback(const v8::Arguments& args) { if (args.Length() < 2) throw V8Exception("Wrong number of arguments in hasFeature"); v8::Local self = args.Holder(); struct V8DOMImplementationPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); v8::String::AsciiValue localFeature(args[0]); v8::String::AsciiValue localVersion(args[1]); bool retVal = privData->arabicaThis->hasFeature(*localFeature, *localVersion); return v8::Boolean::New(retVal); } v8::Handle V8DOMImplementation::createDocumentTypeCallback(const v8::Arguments& args) { if (args.Length() < 3) throw V8Exception("Wrong number of arguments in createDocumentType"); v8::Local self = args.Holder(); struct V8DOMImplementationPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); v8::String::AsciiValue localQualifiedName(args[0]); v8::String::AsciiValue localPublicId(args[1]); v8::String::AsciiValue localSystemId(args[2]); Arabica::DOM::DocumentType* retVal = new Arabica::DOM::DocumentType(privData->arabicaThis->createDocumentType(*localQualifiedName, *localPublicId, *localSystemId)); v8::Handle retCtor = V8DocumentType::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8DocumentType::V8DocumentTypePrivate* retPrivData = new V8DocumentType::V8DocumentTypePrivate(); retPrivData->dom = privData->dom; retPrivData->arabicaThis = retVal; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8DocumentType::jsDestructor); return retObj; } v8::Handle V8DOMImplementation::createDocumentCallback(const v8::Arguments& args) { if (args.Length() < 3) throw V8Exception("Wrong number of arguments in createDocument"); if (!(V8DocumentType::hasInstance(args[2]))) throw V8Exception("Parameter mismatch while calling createDocument"); v8::Local self = args.Holder(); struct V8DOMImplementationPrivate* privData = V8DOM::toClassPtr(self->GetInternalField(0)); v8::String::AsciiValue localNamespaceURI(args[0]); v8::String::AsciiValue localQualifiedName(args[1]); Arabica::DOM::DocumentType* localDoctype = V8DOM::toClassPtr(args[2]->ToObject()->GetInternalField(0))->arabicaThis; Arabica::DOM::Document* retVal = new Arabica::DOM::Document(privData->arabicaThis->createDocument(*localNamespaceURI, *localQualifiedName, *localDoctype)); v8::Handle retCtor = V8Document::getTmpl()->GetFunction(); v8::Persistent retObj = v8::Persistent::New(retCtor->NewInstance()); struct V8Document::V8DocumentPrivate* retPrivData = new V8Document::V8DocumentPrivate(); retPrivData->dom = privData->dom; retPrivData->arabicaThis = retVal; retObj->SetInternalField(0, V8DOM::toExternal(retPrivData)); retObj.MakeWeak(0, V8Document::jsDestructor); return retObj; } bool V8DOMImplementation::hasInstance(v8::Handle value) { return getTmpl()->HasInstance(value); } } }