📄 jsdomnode.cpp
字号:
}
break;
case JSVAR_nextSibling:
if (priv){
JSDOMNode *n = priv->getNextSibling();
*vp = (n ? __objectp_TO_JSVal(cx,n) : JSVAL_NULL);
}
break;
case JSVAR_attributes:
if (priv){
JSDOMNamedNodeMap *nm = priv->getAttributes();
*vp = (nm ? __objectp_TO_JSVal(cx,nm) : JSVAL_NULL);
}
break;
case JSVAR_ownerDocument:
if (priv){
JSDOMNode *n = priv->getOwnerDocument();
*vp = (n ? __objectp_TO_JSVal(cx,n) : JSVAL_NULL);
}
break;
case JSVAR_namespaceURI:
if (priv)
*vp = __STRING_TO_JSVAL(priv->getNamespaceURI());
break;
case JSVAR_prefix:
if (priv)
*vp = __STRING_TO_JSVAL(priv->getPrefix());
break;
case JSVAR_localName:
if (priv)
*vp = __STRING_TO_JSVAL(priv->getLocalName());
break;
}
}
}
catch(const DOMException &dome) {
return js_throw_dom_error(cx, obj, dome.code);
}
catch( ... ) {
return js_throw_error(cx, obj, "unknown exception" );
}
return JS_TRUE;
}
// JavaScript Function Table
JSFunctionSpec JSDOMNode::_JSFunctionSpec[] = {
{ "hasAttributes", JSFUNC_hasAttributes, 0, 0, 0 },
{ "hasChildNodes", JSFUNC_hasChildNodes, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
};
// JavaScript Function Wrappers
JSBool JSDOMNode::JSFUNC_hasAttributes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
JSDOMNode *p = (JSDOMNode*)JS_GetPrivate(cx, obj);
if (argc == 0) {
*rval = __bool_TO_JSVal(cx,p->hasAttributes());
return JS_TRUE;
}
return JS_FALSE;
}
JSBool JSDOMNode::JSFUNC_hasChildNodes(JSContext *cx, JSObject *obj, uintN argc, jsval *argv, jsval *rval) {
JSDOMNode *p = (JSDOMNode*)JS_GetPrivate(cx, obj);
if (argc == 0) {
*rval = __bool_TO_JSVal(cx,p->hasChildNodes());
return JS_TRUE;
}
return JS_FALSE;
}
JSDOMNode *JSDOMNode::createNode(DOMNode *node, JSDOMDocument *doc, JSDOMNode *ownerNode)
{
if (!node) return NULL;
JSDOMNode *jsnode = NULL;
int type = node->getNodeType();
switch( type )
{
case JSDOMNode::ELEMENT_NODE:
jsnode = new JSDOMElement( reinterpret_cast<DOMElement *>(node), doc);
break;
case JSDOMNode::ATTRIBUTE_NODE:
jsnode = new JSDOMAttr( reinterpret_cast<DOMAttr *>(node), doc, (JSDOMElement*) ownerNode );
break;
case JSDOMNode::TEXT_NODE:
jsnode = new JSDOMText( reinterpret_cast<DOMText *>(node), doc );
break;
case JSDOMNode::CDATA_SECTION_NODE:
jsnode = new JSDOMCDATA( reinterpret_cast<DOMCDATASection *>(node), doc );
break;
case JSDOMNode::ENTITY_REFERENCE_NODE:
jsnode = new JSDOMEntityReference( reinterpret_cast<DOMEntityReference *>(node), doc );
break;
case JSDOMNode::PROCESSING_INSTRUCTION_NODE:
jsnode = new JSDOMProcessingInstruction( reinterpret_cast<DOMProcessingInstruction *>(node), doc );
break;
case JSDOMNode::COMMENT_NODE:
jsnode = new JSDOMComment( reinterpret_cast<DOMComment *>(node), doc );
break;
case JSDOMNode::DOCUMENT_NODE:
jsnode = new JSDOMDocument( reinterpret_cast<DOMDocument *>(node));
break;
// !!! not it the VXML spec
//case JSDOMNode::ENTITY_NODE:
//case DOCUMENT_TYPE_NODE:
//case DOCUMENT_FRAGMENT_NODE:
//case NOTATION_NODE:
default:
jsnode = new JSDOMNode( node, doc );
break;
};
return jsnode;
}
JSDOMNode::JSDOMNode( DOMNode *node, JSDOMDocument *owner ) : _node(node), _owner(owner)
{
}
JSString* JSDOMNode::getNodeName()
{
if (_node == NULL) return NULL;
XMLChToVXIchar name(_node->getNodeName());
GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, name.c_str());
return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}
JSString* JSDOMNode::getNodeValue()
{
if (_node == NULL) return NULL;
XMLChToVXIchar value(_node->getNodeValue());
GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, value.c_str());
return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}
int JSDOMNode::getNodeType()
{
return ( _node ? _node->getNodeType() : 0 );
}
JSDOMNode* JSDOMNode::getParentNode()
{
return JSDOMNode::createNode(_node->getParentNode(),_owner);
}
JSDOMNodeList* JSDOMNode::getChildNodes()
{
return new JSDOMNodeList((_node ? _node->getChildNodes() : NULL), _owner);
}
JSDOMNode* JSDOMNode::getFirstChild()
{
return JSDOMNode::createNode(_node->getFirstChild(),_owner);
}
JSDOMNode* JSDOMNode::getLastChild()
{
return JSDOMNode::createNode(_node->getLastChild(),_owner);
}
JSDOMNode* JSDOMNode::getPreviousSibling()
{
return JSDOMNode::createNode(_node->getPreviousSibling(),_owner);
}
JSDOMNode* JSDOMNode::getNextSibling()
{
return JSDOMNode::createNode(_node->getNextSibling(),_owner);
}
JSDOMNamedNodeMap* JSDOMNode::getAttributes()
{
if (!_node) return NULL;
DOMNamedNodeMap *attrs = _node->getAttributes();
if (!attrs) return NULL;
return new JSDOMNamedNodeMap(attrs, this);
}
JSDOMDocument* JSDOMNode::getOwnerDocument()
{
/*DOMDocument *owner = _node->getOwnerDocument();
if (!owner) return NULL;
return new JSDOMDocument(_node->getOwnerDocument());*/
return _owner;
}
JSString* JSDOMNode::getNamespaceURI()
{
if (_node == NULL) return NULL;
const XMLCh *p = _node->getNamespaceURI();
if (!p) return NULL;
XMLChToVXIchar ns(_node->getNamespaceURI());
GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, ns.c_str());
return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}
JSString* JSDOMNode::getPrefix()
{
if (_node == NULL) return NULL;
const XMLCh *p = _node->getPrefix();
if (!p) return NULL;
XMLChToVXIchar prefix(p);
GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, prefix.c_str());
return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}
JSString* JSDOMNode::getLocalName()
{
if (_node == NULL) return NULL;
XMLChToVXIchar name(_node->getLocalName());
GET_JSCHAR_FROM_VXICHAR(tmpvalue, tmpvaluelen, name.c_str());
return JS_NewUCStringCopyZ(_JSinternal.c, tmpvalue);
}
bool JSDOMNode::hasChildNodes()
{
return ( _node ? _node->hasChildNodes() : false );
}
bool JSDOMNode::hasAttributes()
{
return ( _node ? _node->hasAttributes() : false );
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -