mirror of
https://github.com/rkd77/elinks.git
synced 2024-10-01 03:36:26 -04:00
DOM, ecmascript: Export jsrt. It will be used by DOM.
Nothing special else. I have no inspiration to do more.
This commit is contained in:
parent
0668b4fd5c
commit
7101479366
@ -34,8 +34,12 @@
|
|||||||
#include "document/dom/ecmascript/spidermonkey/Text.h"
|
#include "document/dom/ecmascript/spidermonkey/Text.h"
|
||||||
#include "document/dom/ecmascript/spidermonkey/TypeInfo.h"
|
#include "document/dom/ecmascript/spidermonkey/TypeInfo.h"
|
||||||
#include "document/dom/ecmascript/spidermonkey/UserDataHandler.h"
|
#include "document/dom/ecmascript/spidermonkey/UserDataHandler.h"
|
||||||
|
#include "document/dom/ecmascript/spidermonkey/html/HTMLElement.h"
|
||||||
|
#include "document/dom/ecmascript/spidermonkey/html/html.h"
|
||||||
#include "dom/node.h"
|
#include "dom/node.h"
|
||||||
|
|
||||||
|
extern JSRuntime *jsrt;
|
||||||
|
|
||||||
void
|
void
|
||||||
done_dom_node_ecmascript_obj(struct dom_node *node)
|
done_dom_node_ecmascript_obj(struct dom_node *node)
|
||||||
{
|
{
|
||||||
@ -45,24 +49,10 @@ done_dom_node_ecmascript_obj(struct dom_node *node)
|
|||||||
|
|
||||||
assert(ctx && obj && JS_GetPrivate(ctx, obj) == node);
|
assert(ctx && obj && JS_GetPrivate(ctx, obj) == node);
|
||||||
JS_SetPrivate(ctx, obj, NULL);
|
JS_SetPrivate(ctx, obj, NULL);
|
||||||
|
JS_RemoveRoot(ctx, obj);
|
||||||
node->ecmascript_obj = NULL;
|
node->ecmascript_obj = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
JSObject *
|
|
||||||
make_new_object(JSContext *ctx, struct dom_node *node)
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
JSObject *obj = create_new_object[node->data.element.type](ctx);
|
|
||||||
|
|
||||||
if (obj) {
|
|
||||||
JS_SetPrivate(ctx, obj, node);
|
|
||||||
node->ecmascript_obj = obj;
|
|
||||||
}
|
|
||||||
return obj;
|
|
||||||
#endif
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
dom_add_attribute(struct dom_node *root, struct dom_node *node, struct dom_string *attr, struct dom_string *value)
|
dom_add_attribute(struct dom_node *root, struct dom_node *node, struct dom_string *attr, struct dom_string *value)
|
||||||
{
|
{
|
||||||
@ -73,7 +63,8 @@ dom_add_attribute(struct dom_node *root, struct dom_node *node, struct dom_strin
|
|||||||
unsigned char tmp;
|
unsigned char tmp;
|
||||||
|
|
||||||
if (!obj) {
|
if (!obj) {
|
||||||
obj = make_new_object(ctx, node);
|
make_dom_node_html_data(ctx, node);
|
||||||
|
obj = node->ecmascript_obj;
|
||||||
if (!obj) return;
|
if (!obj) return;
|
||||||
}
|
}
|
||||||
if (value) {
|
if (value) {
|
||||||
@ -87,3 +78,20 @@ dom_add_attribute(struct dom_node *root, struct dom_node *node, struct dom_strin
|
|||||||
JS_SetProperty(ctx, obj, attr->string, &vp);
|
JS_SetProperty(ctx, obj, attr->string, &vp);
|
||||||
attr->string[attr->length] = tmp;
|
attr->string[attr->length] = tmp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
dom_add_document(struct dom_node *root)
|
||||||
|
{
|
||||||
|
JSContext *ctx = JS_NewContext(jsrt, 8192);
|
||||||
|
struct html_objects *o;
|
||||||
|
|
||||||
|
if (!ctx)
|
||||||
|
return;
|
||||||
|
o = mem_calloc(1, sizeof(*o));
|
||||||
|
if (!o) {
|
||||||
|
JS_DestroyContext(ctx);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
JS_SetContextPrivate(ctx, o);
|
||||||
|
/* Write me! */
|
||||||
|
}
|
||||||
|
@ -115,9 +115,12 @@ const JSClass HTMLElement_class = {
|
|||||||
void
|
void
|
||||||
make_HTMLElement(JSContext *ctx, struct dom_node *node)
|
make_HTMLElement(JSContext *ctx, struct dom_node *node)
|
||||||
{
|
{
|
||||||
|
struct html_objects *o = JS_GetContextPrivate(ctx);
|
||||||
|
|
||||||
node->data.element.html_data = mem_calloc(1, sizeof(struct HTMLElement_struct));
|
node->data.element.html_data = mem_calloc(1, sizeof(struct HTMLElement_struct));
|
||||||
if (node->data.element.html_data) {
|
if (node->data.element.html_data) {
|
||||||
node->ecmascript_obj = JS_NewObject(ctx, (JSClass *)&HTMLElement_class, NULL, NULL);
|
node->ecmascript_obj = JS_NewObject(ctx, (JSClass *)&HTMLElement_class, o->Element_object, NULL);
|
||||||
|
o->HTMLElement_object = node->ecmascript_obj;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -20,6 +20,8 @@ struct HTMLElement_struct {
|
|||||||
};
|
};
|
||||||
|
|
||||||
struct html_objects { /* FIXME: Better name for this type. */
|
struct html_objects { /* FIXME: Better name for this type. */
|
||||||
|
JSObject *Node_object;
|
||||||
|
JSObject *Element_object;
|
||||||
JSObject *HTMLElement_object;
|
JSObject *HTMLElement_object;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -92,13 +92,11 @@ done_dom_node_html_data(struct dom_node *node)
|
|||||||
mem_free(data);
|
mem_free(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
void
|
void
|
||||||
make_dom_node_html_data(, struct dom_node *node)
|
make_dom_node_html_data(JSContext *ctx, struct dom_node *node)
|
||||||
{
|
{
|
||||||
int type = node->data.element.type;
|
int type = node->data.element.type;
|
||||||
|
|
||||||
if (func[type].make)
|
if (func[type].make)
|
||||||
func[type].make(ctx, node);
|
func[type].make(ctx, node);
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -1,12 +1,10 @@
|
|||||||
#ifndef EL__DOCUMENT_DOM_ECMASCRIPT_SPIDERMONKEY_HTML_HTML_H
|
#ifndef EL__DOCUMENT_DOM_ECMASCRIPT_SPIDERMONKEY_HTML_HTML_H
|
||||||
#define EL__DOCUMENT_DOM_ECMASCRIPT_SPIDERMONKEY_HTML_HTML_H
|
#define EL__DOCUMENT_DOM_ECMASCRIPT_SPIDERMONKEY_HTML_HTML_H
|
||||||
|
|
||||||
|
#include "ecmascript/spidermonkey/util.h"
|
||||||
struct dom_node;
|
struct dom_node;
|
||||||
|
|
||||||
void done_dom_node_html_data(struct dom_node *node);
|
void done_dom_node_html_data(struct dom_node *node);
|
||||||
|
|
||||||
#if 0
|
|
||||||
void make_dom_node_html_data(JSContext *ctx, struct dom_node *node);
|
void make_dom_node_html_data(JSContext *ctx, struct dom_node *node);
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
top_builddir=../..
|
top_builddir=../..
|
||||||
include $(top_builddir)/Makefile.config
|
include $(top_builddir)/Makefile.config
|
||||||
|
|
||||||
|
INCLUDES += $(SPIDERMONKEY_CFLAGS)
|
||||||
SUBDIRS = css sgml test
|
SUBDIRS = css sgml test
|
||||||
OBJS = configuration.o node.o select.o stack.o scanner.o
|
OBJS = configuration.o node.o select.o stack.o scanner.o
|
||||||
|
|
||||||
|
@ -261,6 +261,7 @@ struct dom_node {
|
|||||||
struct dom_node *parent;
|
struct dom_node *parent;
|
||||||
|
|
||||||
#ifdef CONFIG_ECMASCRIPT
|
#ifdef CONFIG_ECMASCRIPT
|
||||||
|
void *ctx;
|
||||||
/** The ECMAScript object related to this node.
|
/** The ECMAScript object related to this node.
|
||||||
* NULL when the object was not used yet. */
|
* NULL when the object was not used yet. */
|
||||||
void *ecmascript_obj;
|
void *ecmascript_obj;
|
||||||
|
@ -55,7 +55,7 @@
|
|||||||
|
|
||||||
/* TODO? Are there any which need to be implemented? */
|
/* TODO? Are there any which need to be implemented? */
|
||||||
|
|
||||||
static JSRuntime *jsrt;
|
JSRuntime *jsrt;
|
||||||
|
|
||||||
static void
|
static void
|
||||||
error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
|
error_reporter(JSContext *ctx, const char *message, JSErrorReport *report)
|
||||||
|
Loading…
Reference in New Issue
Block a user