mirror of
https://github.com/rkd77/elinks.git
synced 2024-12-04 14:46:47 -05:00
DOM: Some methods of the Element interface defined.
This commit is contained in:
parent
11171beb2b
commit
774471b6d1
@ -5,17 +5,34 @@
|
|||||||
#include "elinks.h"
|
#include "elinks.h"
|
||||||
|
|
||||||
#include "document/dom/ecmascript/spidermonkey.h"
|
#include "document/dom/ecmascript/spidermonkey.h"
|
||||||
|
#include "document/dom/ecmascript/spidermonkey/Attr.h"
|
||||||
#include "document/dom/ecmascript/spidermonkey/Element.h"
|
#include "document/dom/ecmascript/spidermonkey/Element.h"
|
||||||
#include "document/dom/ecmascript/spidermonkey/Node.h"
|
#include "document/dom/ecmascript/spidermonkey/Node.h"
|
||||||
|
#include "dom/sgml/html/html.h"
|
||||||
|
#include "dom/string.h"
|
||||||
|
|
||||||
JSBool
|
JSBool
|
||||||
Element_getProperty(JSContext *ctx, JSObject *obj, jsval id, jsval *vp)
|
Element_getProperty(JSContext *ctx, JSObject *obj, jsval id, jsval *vp)
|
||||||
{
|
{
|
||||||
|
struct dom_node *node;
|
||||||
|
uint16_t type;
|
||||||
|
unsigned char *elem_name;
|
||||||
|
|
||||||
if (!JSVAL_IS_INT(id))
|
if (!JSVAL_IS_INT(id))
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL)))
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
node = JS_GetPrivate(ctx, obj);
|
||||||
|
if (!node)
|
||||||
|
return JS_TRUE;
|
||||||
switch (JSVAL_TO_INT(id)) {
|
switch (JSVAL_TO_INT(id)) {
|
||||||
case JSP_ELEMENT_TAG_NAME:
|
case JSP_ELEMENT_TAG_NAME:
|
||||||
/* Write me! */
|
type = node->data.element.type;
|
||||||
|
if (type > 0 && type < HTML_ELEMENTS) {
|
||||||
|
elem_name = sgml_html_info.elements[type].string.string;
|
||||||
|
string_to_jsval(ctx, vp, elem_name);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
case JSP_ELEMENT_SCHEMA_TYPE_INFO:
|
case JSP_ELEMENT_SCHEMA_TYPE_INFO:
|
||||||
/* Write me! */
|
/* Write me! */
|
||||||
@ -30,7 +47,15 @@ static JSBool
|
|||||||
Element_getAttribute(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
Element_getAttribute(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
/* Write me! */
|
unsigned char *attr;
|
||||||
|
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL))
|
||||||
|
|| argc != 1)
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
/* This will work only with HTML. --witekfl */
|
||||||
|
attr = jsval_to_string(ctx, &argv[0]);
|
||||||
|
JS_GetProperty(ctx, obj, attr, rval);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -38,7 +63,15 @@ static JSBool
|
|||||||
Element_setAttribute(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
Element_setAttribute(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
/* Write me! */
|
unsigned char *attr;
|
||||||
|
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL))
|
||||||
|
|| argc != 2)
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
/* This will work only with HTML. --witekfl */
|
||||||
|
attr = jsval_to_string(ctx, &argv[0]);
|
||||||
|
JS_SetProperty(ctx, obj, attr, &argv[1]);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -46,7 +79,14 @@ static JSBool
|
|||||||
Element_removeAttribute(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
Element_removeAttribute(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
/* Write me! */
|
unsigned char *attr;
|
||||||
|
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL))
|
||||||
|
|| argc != 1)
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
attr = jsval_to_string(ctx, &argv[0]);
|
||||||
|
JS_SetProperty(ctx, obj, attr, NULL); /* Special case. */
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -54,7 +94,32 @@ static JSBool
|
|||||||
Element_getAttributeNode(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
Element_getAttributeNode(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
/* Write me! */
|
struct dom_node *node, *searched;
|
||||||
|
struct dom_node_list *list;
|
||||||
|
struct dom_string name;
|
||||||
|
unsigned char *attr;
|
||||||
|
JSObject *ret = NULL;
|
||||||
|
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL))
|
||||||
|
|| argc != 1)
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
node = JS_GetPrivate(ctx, obj);
|
||||||
|
if (!node)
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
attr = jsval_to_string(ctx, &argv[0]);
|
||||||
|
if (!attr) {
|
||||||
|
undef_to_jsval(ctx, rval);
|
||||||
|
return JS_TRUE;
|
||||||
|
}
|
||||||
|
list = node->data.element.map;
|
||||||
|
name.string = attr;
|
||||||
|
name.length = strlen(attr);
|
||||||
|
searched = get_dom_node_map_entry(list, DOM_NODE_ATTRIBUTE, 0, &name);
|
||||||
|
if (searched)
|
||||||
|
ret = searched->ecmascript_obj;
|
||||||
|
object_to_jsval(ctx, rval, ret);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -62,7 +127,33 @@ static JSBool
|
|||||||
Element_setAttributeNode(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
Element_setAttributeNode(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
/* Write me! */
|
jsval v;
|
||||||
|
struct dom_node *node, *searched;
|
||||||
|
struct dom_node_list *list;
|
||||||
|
struct dom_string name;
|
||||||
|
JSObject *attr, *ret = NULL;
|
||||||
|
unsigned char *data;
|
||||||
|
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL))
|
||||||
|
|| argc != 1)
|
||||||
|
return JS_FALSE;
|
||||||
|
attr = JSVAL_TO_OBJECT(argv[0]);
|
||||||
|
if (!JS_InstanceOf(ctx, attr, (JSClass *)&Attr_class, NULL))
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
JS_GetProperty(ctx, attr, "name", &v);
|
||||||
|
data = jsval_to_string(ctx, &v);
|
||||||
|
if (data) {
|
||||||
|
name.string = data;
|
||||||
|
name.length = strlen(data);
|
||||||
|
list = node->data.element.map;
|
||||||
|
searched = get_dom_node_map_entry(list, DOM_NODE_ATTRIBUTE, 0, &name);
|
||||||
|
if (searched)
|
||||||
|
ret = searched->ecmascript_obj;
|
||||||
|
}
|
||||||
|
JS_GetProperty(ctx, attr, "value", &v);
|
||||||
|
Element_setAttribute(ctx, obj, 1, &v, NULL);
|
||||||
|
object_to_jsval(ctx, rval, ret);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -70,7 +161,34 @@ static JSBool
|
|||||||
Element_removeAttributeNode(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
Element_removeAttributeNode(JSContext *ctx, JSObject *obj, uintN argc, jsval *argv,
|
||||||
jsval *rval)
|
jsval *rval)
|
||||||
{
|
{
|
||||||
/* Write me! */
|
/* This is probably wrong! */
|
||||||
|
jsval v;
|
||||||
|
struct dom_node *node, *searched;
|
||||||
|
struct dom_node_list *list;
|
||||||
|
struct dom_string name;
|
||||||
|
JSObject *attr, *ret = NULL;
|
||||||
|
unsigned char *data;
|
||||||
|
|
||||||
|
if (!obj || (!JS_InstanceOf(ctx, obj, (JSClass *)&Element_class, NULL))
|
||||||
|
|| argc != 1)
|
||||||
|
return JS_FALSE;
|
||||||
|
attr = JSVAL_TO_OBJECT(argv[0]);
|
||||||
|
if (!JS_InstanceOf(ctx, attr, (JSClass *)&Attr_class, NULL))
|
||||||
|
return JS_FALSE;
|
||||||
|
|
||||||
|
JS_GetProperty(ctx, attr, "name", &v);
|
||||||
|
data = jsval_to_string(ctx, &v);
|
||||||
|
if (data) {
|
||||||
|
name.string = data;
|
||||||
|
name.length = strlen(data);
|
||||||
|
list = node->data.element.map;
|
||||||
|
searched = get_dom_node_map_entry(list, DOM_NODE_ATTRIBUTE, 0, &name);
|
||||||
|
if (searched)
|
||||||
|
ret = searched->ecmascript_obj;
|
||||||
|
}
|
||||||
|
undef_to_jsval(ctx, &v);
|
||||||
|
Element_setAttribute(ctx, obj, 1, &v, NULL);
|
||||||
|
object_to_jsval(ctx, rval, ret);
|
||||||
return JS_TRUE;
|
return JS_TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user