mirror of
https://github.com/netsurf-browser/netsurf
synced 2024-12-24 04:56:50 +03:00
add binding for window class
This commit is contained in:
parent
b531318905
commit
ac286c4a95
@ -11,6 +11,7 @@
|
||||
S_JSAPI_BINDING:=
|
||||
|
||||
JSAPI_BINDING_htmldocument := javascript/jsapi/bindings/htmldocument.bnd
|
||||
JSAPI_BINDING_window := javascript/jsapi/bindings/window.bnd
|
||||
|
||||
# 1: input file
|
||||
# 2: output file
|
||||
@ -27,8 +28,8 @@ endef
|
||||
# Javascript sources
|
||||
ifeq ($(NETSURF_USE_JS),YES)
|
||||
|
||||
S_JSAPI = window.c navigator.c console.c htmlelement.c
|
||||
#htmldocument.c
|
||||
S_JSAPI = navigator.c console.c htmlelement.c
|
||||
#htmldocument.c window.c
|
||||
|
||||
S_JAVASCRIPT += content.c jsapi.c $(addprefix jsapi/,$(S_JSAPI))
|
||||
|
||||
|
@ -1,4 +1,4 @@
|
||||
/* test binding to generate htmldocument */
|
||||
/* Binding to generate htmldocument */
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
|
130
javascript/jsapi/bindings/window.bnd
Normal file
130
javascript/jsapi/bindings/window.bnd
Normal file
@ -0,0 +1,130 @@
|
||||
/* binding to generate window */
|
||||
|
||||
#include "dom.bnd"
|
||||
|
||||
webidlfile "html.idl";
|
||||
|
||||
hdrcomment "Part of NetSurf Project";
|
||||
|
||||
preamble %{
|
||||
|
||||
#include <dom/dom.h>
|
||||
|
||||
#include "utils/config.h"
|
||||
#include "utils/log.h"
|
||||
|
||||
#include "javascript/jsapi.h"
|
||||
#include "javascript/jsapi/binding.h"
|
||||
|
||||
%}
|
||||
|
||||
operation confirm %{
|
||||
warn_user(message, NULL);
|
||||
%}
|
||||
|
||||
operation alert %{
|
||||
warn_user(message, NULL);
|
||||
%}
|
||||
|
||||
operation prompt %{
|
||||
warn_user(message, NULL);
|
||||
%}
|
||||
|
||||
api init %{
|
||||
JSObject *user_proto;
|
||||
|
||||
prototype = JS_NewCompartmentAndGlobalObject(cx, &JSClass_Window, NULL);
|
||||
if (prototype == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/** @todo reconsider global object handling. future
|
||||
* editions of spidermonkey appear to be removing the
|
||||
* idea of a global so we probably need to handle
|
||||
* global object references internally
|
||||
*/
|
||||
|
||||
/* set the contexts global */
|
||||
JS_SetGlobalObject(cx, prototype);
|
||||
|
||||
/* Populate the global object with the standard globals, like
|
||||
* Object and Array.
|
||||
*/
|
||||
if (!JS_InitStandardClasses(cx, prototype)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* add functions to prototype */
|
||||
if (!JS_DefineFunctions(cx, prototype, jsclass_functions)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/* add properties to prototype */
|
||||
if (!JS_DefineProperties(cx, prototype, jsclass_properties))
|
||||
return NULL;
|
||||
|
||||
/* Initialises all the user javascript classes to make their
|
||||
* prototypes available.
|
||||
*/
|
||||
/** @todo should we be managing these prototype objects ourselves */
|
||||
user_proto = jsapi_InitClass_Document(cx, prototype);
|
||||
if (user_proto == NULL) {
|
||||
return NULL;
|
||||
}
|
||||
%}
|
||||
|
||||
api new %{
|
||||
/* @todo sort out windows that are not globals */
|
||||
assert(parent == NULL);
|
||||
|
||||
/* the window object is the global so its prototype *is* the instance */
|
||||
newobject = prototype;
|
||||
|
||||
/* instantiate the subclasses off the window global */
|
||||
private->document = jsapi_new_Document(cx,
|
||||
NULL,
|
||||
newobject,
|
||||
htmlc->document,
|
||||
htmlc);
|
||||
if (private->document == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
/*
|
||||
private->navigator_obj = jsapi_new_Navigator(cx, window);
|
||||
if (private->navigator_obj == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
*/
|
||||
/** @todo forms, history, location */
|
||||
|
||||
private->console = jsapi_new_Console(cx, newobject);
|
||||
if (private->console == NULL) {
|
||||
free(private);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
LOG(("Created new window object %p", newobject));
|
||||
%}
|
||||
|
||||
|
||||
binding window {
|
||||
type js_libdom; /* the binding type */
|
||||
|
||||
interface Window; /* Web IDL interface to generate */
|
||||
|
||||
/* private are parameters to constructor stored in private
|
||||
* context structure.
|
||||
*
|
||||
* internal are value stored in private context structure but not
|
||||
* passed to constructor.
|
||||
*/
|
||||
private "struct browser_window *" bw;
|
||||
private "struct html_content *" htmlc;
|
||||
internal "JSObject *" document;
|
||||
internal "JSObject *" navigator;
|
||||
internal "JSObject *" console;
|
||||
|
||||
}
|
Loading…
Reference in New Issue
Block a user