mirror of
https://github.com/rkd77/elinks.git
synced 2025-02-02 15:09:23 -05:00
SEE: Added setTimeout function.
This commit is contained in:
parent
50b6a61f31
commit
cc4d02b0ae
@ -130,6 +130,7 @@ ecmascript_get_interpreter(struct view_state *vs)
|
|||||||
#else
|
#else
|
||||||
spidermonkey_get_interpreter(interpreter);
|
spidermonkey_get_interpreter(interpreter);
|
||||||
#endif
|
#endif
|
||||||
|
init_string(&interpreter->code);
|
||||||
return interpreter;
|
return interpreter;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -143,6 +144,8 @@ ecmascript_put_interpreter(struct ecmascript_interpreter *interpreter)
|
|||||||
spidermonkey_put_interpreter(interpreter);
|
spidermonkey_put_interpreter(interpreter);
|
||||||
#endif
|
#endif
|
||||||
free_string_list(&interpreter->onload_snippets);
|
free_string_list(&interpreter->onload_snippets);
|
||||||
|
kill_timer(&interpreter->timeout);
|
||||||
|
done_string(&interpreter->code);
|
||||||
interpreter->vs->ecmascript = NULL;
|
interpreter->vs->ecmascript = NULL;
|
||||||
mem_free(interpreter);
|
mem_free(interpreter);
|
||||||
}
|
}
|
||||||
@ -297,6 +300,26 @@ ecmascript_set_action(unsigned char **action, unsigned char *string)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
ecmascript_timeout_handler(void *i)
|
||||||
|
{
|
||||||
|
struct ecmascript_interpreter *interpreter = i;
|
||||||
|
|
||||||
|
ecmascript_eval(interpreter, &interpreter->code, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ecmascript_set_timeout(struct ecmascript_interpreter *interpreter, unsigned char *code, int timeout)
|
||||||
|
{
|
||||||
|
assert(interpreter);
|
||||||
|
if (!code) return;
|
||||||
|
done_string(&interpreter->code);
|
||||||
|
init_string(&interpreter->code);
|
||||||
|
add_to_string(&interpreter->code, code);
|
||||||
|
mem_free(code);
|
||||||
|
install_timer(&interpreter->timeout, timeout, ecmascript_timeout_handler, interpreter);
|
||||||
|
}
|
||||||
|
|
||||||
static struct module *ecmascript_modules[] = {
|
static struct module *ecmascript_modules[] = {
|
||||||
#ifdef CONFIG_ECMASCRIPT_SEE
|
#ifdef CONFIG_ECMASCRIPT_SEE
|
||||||
&see_module,
|
&see_module,
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
* plasm displays for everyone. */
|
* plasm displays for everyone. */
|
||||||
|
|
||||||
#include "main/module.h"
|
#include "main/module.h"
|
||||||
|
#include "main/timer.h"
|
||||||
#include "util/time.h"
|
#include "util/time.h"
|
||||||
|
|
||||||
struct string;
|
struct string;
|
||||||
@ -20,6 +21,11 @@ struct ecmascript_interpreter {
|
|||||||
void *backend_data;
|
void *backend_data;
|
||||||
/* Used by document.write() */
|
/* Used by document.write() */
|
||||||
struct string *ret;
|
struct string *ret;
|
||||||
|
|
||||||
|
/* The code evaluated by setTimeout() */
|
||||||
|
struct string code;
|
||||||
|
timer_id_T timeout;
|
||||||
|
|
||||||
time_t exec_start;
|
time_t exec_start;
|
||||||
|
|
||||||
/* This is a cross-rerenderings accumulator of
|
/* This is a cross-rerenderings accumulator of
|
||||||
@ -75,6 +81,8 @@ void ecmascript_timeout_dialog(struct terminal *term, int max_exec_time);
|
|||||||
|
|
||||||
void ecmascript_set_action(unsigned char **action, unsigned char *string);
|
void ecmascript_set_action(unsigned char **action, unsigned char *string);
|
||||||
|
|
||||||
|
void ecmascript_set_timeout(struct ecmascript_interpreter *interpreter, unsigned char *code, int timeout);
|
||||||
|
|
||||||
extern struct module ecmascript_module;
|
extern struct module ecmascript_module;
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -68,6 +68,22 @@ see_done(struct module *xxx)
|
|||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
js_setTimeout(struct SEE_interpreter *interp, struct SEE_object *self,
|
||||||
|
struct SEE_object *thisobj, int argc, struct SEE_value **argv,
|
||||||
|
struct SEE_value *res)
|
||||||
|
{
|
||||||
|
struct ecmascript_interpreter *ei;
|
||||||
|
unsigned char *code;
|
||||||
|
int timeout;
|
||||||
|
|
||||||
|
if (argc != 2) return;
|
||||||
|
ei = ((struct global_object *)interp)->interpreter;
|
||||||
|
code = SEE_value_to_unsigned_char(interp, argv[0]);
|
||||||
|
timeout = SEE_ToInt32(interp, argv[1]);
|
||||||
|
ecmascript_set_timeout(ei, code, timeout);
|
||||||
|
}
|
||||||
|
|
||||||
void *
|
void *
|
||||||
see_get_interpreter(struct ecmascript_interpreter *interpreter)
|
see_get_interpreter(struct ecmascript_interpreter *interpreter)
|
||||||
{
|
{
|
||||||
@ -77,6 +93,8 @@ see_get_interpreter(struct ecmascript_interpreter *interpreter)
|
|||||||
interpreter->backend_data = g;
|
interpreter->backend_data = g;
|
||||||
g->max_exec_time = get_opt_int("ecmascript.max_exec_time");
|
g->max_exec_time = get_opt_int("ecmascript.max_exec_time");
|
||||||
g->exec_start = time(NULL);
|
g->exec_start = time(NULL);
|
||||||
|
/* used by setTimeout */
|
||||||
|
g->interpreter = interpreter;
|
||||||
SEE_interpreter_init(interp);
|
SEE_interpreter_init(interp);
|
||||||
init_js_window_object(interpreter);
|
init_js_window_object(interpreter);
|
||||||
init_js_menubar_object(interpreter);
|
init_js_menubar_object(interpreter);
|
||||||
@ -86,6 +104,7 @@ see_get_interpreter(struct ecmascript_interpreter *interpreter)
|
|||||||
init_js_location_object(interpreter);
|
init_js_location_object(interpreter);
|
||||||
init_js_document_object(interpreter);
|
init_js_document_object(interpreter);
|
||||||
init_js_forms_object(interpreter);
|
init_js_forms_object(interpreter);
|
||||||
|
SEE_CFUNCTION_PUTA(interp, interp->Global, "setTimeout", js_setTimeout, 2, 0);
|
||||||
return interp;
|
return interp;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
|
|
||||||
struct SEE_object;
|
struct SEE_object;
|
||||||
struct SEE_interpreter;
|
struct SEE_interpreter;
|
||||||
|
struct ecmascript_interpreter;
|
||||||
struct string;
|
struct string;
|
||||||
struct view_state;
|
struct view_state;
|
||||||
|
|
||||||
@ -16,6 +17,8 @@ struct js_window_object {
|
|||||||
|
|
||||||
struct global_object {
|
struct global_object {
|
||||||
struct SEE_interpreter interp;
|
struct SEE_interpreter interp;
|
||||||
|
/* used by setTimeout */
|
||||||
|
struct ecmascript_interpreter *interpreter;
|
||||||
struct js_window_object *win;
|
struct js_window_object *win;
|
||||||
struct string *ret;
|
struct string *ret;
|
||||||
int exec_start;
|
int exec_start;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user