summaryrefslogtreecommitdiff
path: root/javascript/jsapi/element.c
blob: 11d8b1a1481e0a62e8142f069482b46113b42120 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
 * Copyright 2012 Vincent Sanders <vince@netsurf-browser.org>
 *
 * This file is part of NetSurf, http://www.netsurf-browser.org/
 *
 * NetSurf is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 *
 * NetSurf is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include <dom/dom.h>


#include "javascript/jsapi.h"
#include "utils/config.h"
#include "render/html_internal.h"
#include "utils/log.h"

static void jsfinalize_element(JSContext *cx, JSObject *obj);

typedef struct {
	struct html_content *htmlc;
	struct dom_element *dom_element;
} elementp;

static JSClass jsclass_element =
{
        "element", 
	JSCLASS_HAS_PRIVATE, 
	JS_PropertyStub, 
	JS_PropertyStub, 
	JS_PropertyStub, 
	JS_StrictPropertyStub,
        JS_EnumerateStub, 
	JS_ResolveStub, 
	JS_ConvertStub, 
	jsfinalize_element, 
	JSCLASS_NO_OPTIONAL_MEMBERS
};

static void jsfinalize_element(JSContext *cx, JSObject *obj)
{
	elementp *element;
	element = JS_GetInstancePrivate(cx, obj, &jsclass_element, NULL);
	if (element != NULL) {
		free(element);
	}
}



static JSFunctionSpec jsfunctions_element[] = {
	JSAPI_FS_END
};


JSObject *
jsapi_new_element(JSContext *cx, 
		  JSObject *parent, 
		  struct html_content *htmlc, 
		  struct dom_element *domelement)
{
	/* create element object and return it*/
	JSObject *jselement;
	elementp *element;

	element = malloc(sizeof(element));
	if (element == NULL) {
		return NULL;
	}
	element->htmlc = htmlc;
	element->dom_element = domelement;

	jselement = JS_InitClass(cx, 
			   parent, 
			   NULL, 
			   &jsclass_element, 
			   NULL, 
			   0, 
			   NULL, 
			   jsfunctions_element, 
			   NULL, 
			   NULL);
	if (jselement == NULL) {
		free(element);
		return NULL;
	}

	LOG(("setting element private to %p", element));
	/* private pointer to browsing context */
	if (JS_SetPrivate(cx, jselement, element) != JS_TRUE) {
		LOG(("failed to set content"));
		free(element);
		return NULL;
	}

	return jselement;
}