summaryrefslogtreecommitdiff
path: root/javascript/jsapi
diff options
context:
space:
mode:
authorVincent Sanders <vince@kyllikki.org>2012-10-29 20:09:29 +0000
committerVincent Sanders <vince@kyllikki.org>2012-10-29 20:10:39 +0000
commitac286c4a95f280fb9546f80f0e256543faa8354a (patch)
tree4bbc85a064095dda0b3a10d9d8814c59be7d7be2 /javascript/jsapi
parentb5313189058a15cf3a30709875fd4ced1d3a6927 (diff)
downloadnetsurf-ac286c4a95f280fb9546f80f0e256543faa8354a.tar.gz
netsurf-ac286c4a95f280fb9546f80f0e256543faa8354a.tar.bz2
add binding for window class
Diffstat (limited to 'javascript/jsapi')
-rw-r--r--javascript/jsapi/bindings/htmldocument.bnd2
-rw-r--r--javascript/jsapi/bindings/window.bnd130
2 files changed, 131 insertions, 1 deletions
diff --git a/javascript/jsapi/bindings/htmldocument.bnd b/javascript/jsapi/bindings/htmldocument.bnd
index 44f8ee6aa..c90114162 100644
--- a/javascript/jsapi/bindings/htmldocument.bnd
+++ b/javascript/jsapi/bindings/htmldocument.bnd
@@ -1,4 +1,4 @@
-/* test binding to generate htmldocument */
+/* Binding to generate htmldocument */
#include "dom.bnd"
diff --git a/javascript/jsapi/bindings/window.bnd b/javascript/jsapi/bindings/window.bnd
new file mode 100644
index 000000000..c56838530
--- /dev/null
+++ b/javascript/jsapi/bindings/window.bnd
@@ -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;
+
+}