/* * Copyright 2012 Vincent Sanders * * 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 . */ /** \file * Interface to javascript engine functions. */ #ifndef NETSURF_JAVASCRIPT_JS_H_ #define NETSURF_JAVASCRIPT_JS_H_ #include "utils/errors.h" typedef struct jscontext jscontext; typedef struct jsobject jsobject; struct dom_event; struct dom_document; struct dom_node; struct dom_element; struct dom_string; /** * Initialise javascript interpreter */ void js_initialise(void); /** * finalise javascript interpreter */ void js_finalise(void); /** * Create a new javascript context. * * There is usually one context per browsing context (browser window) * * \param timeout elapsed wallclock time (in seconds) before \a callback is called * \param jsctx Updated to the created JS context * \return NSERROR_OK on success, appropriate error otherwise. */ nserror js_newcontext(int timeout, jscontext **jsctx); /** * Destroy a previously created context */ void js_destroycontext(jscontext *ctx); /** * Create a new javascript compartment * * This is called once for a page with javascript script tags on * it. It constructs a fresh global window object. */ jsobject *js_newcompartment(jscontext *ctx, void *win_priv, void *doc_priv); /** * execute some javascript in a context */ bool js_exec(jscontext *ctx, const uint8_t *txt, size_t txtlen, const char *name); /** * fire an event at a dom node */ bool js_fire_event(jscontext *ctx, const char *type, struct dom_document *doc, struct dom_node *target); bool js_dom_event_add_listener(jscontext *ctx, struct dom_document *document, struct dom_node *node, struct dom_string *event_type_dom, void *js_funcval); /*** New Events ***/ /** * Handle a new element being created. * * This is called once an element is inserted into the DOM document handled * by the context provided. The JS implementation must then scan the element * for on* attributes and register appropriate listeners for those handlers. */ void js_handle_new_element(jscontext *ctx, struct dom_element *node); /** * Handle an event propagation finished callback. * * This is called once an event finishes propagating, no matter how it * finishes. The intent here is that the JS context can perform any cleanups * it may need to perform before the DOM finishes and the event may end up * freed. */ void js_event_cleanup(jscontext *ctx, struct dom_event *evt); #endif /* NETSURF_JAVASCRIPT_JS_H_ */