mirror of
https://github.com/rkd77/elinks.git
synced 2025-09-21 19:46:23 -04:00
[js] moved check_for_rerender to ecmascript.c
This commit is contained in:
@@ -492,6 +492,7 @@ html_iframe_do(char *a, char *object_src,
|
|||||||
html_context->options->framename, html_context);
|
html_context->options->framename, html_context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
char *url2 = join_urls(html_context->base_href, url);
|
char *url2 = join_urls(html_context->base_href, url);
|
||||||
|
|
||||||
uri = get_uri(url2, URI_BASE);
|
uri = get_uri(url2, URI_BASE);
|
||||||
@@ -501,7 +502,7 @@ html_iframe_do(char *a, char *object_src,
|
|||||||
done_uri(uri);
|
done_uri(uri);
|
||||||
mem_free(url2);
|
mem_free(url2);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
mem_free(name);
|
mem_free(name);
|
||||||
mem_free(url);
|
mem_free(url);
|
||||||
}
|
}
|
||||||
|
@@ -208,6 +208,7 @@ process_snippets(struct ecmascript_interpreter *interpreter,
|
|||||||
ecmascript_eval(interpreter, &code, NULL);
|
ecmascript_eval(interpreter, &code, NULL);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
check_for_rerender(interpreter, "eval");
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@@ -12,11 +12,15 @@
|
|||||||
#include "config/home.h"
|
#include "config/home.h"
|
||||||
#include "config/options.h"
|
#include "config/options.h"
|
||||||
#include "document/document.h"
|
#include "document/document.h"
|
||||||
|
#include "document/renderer.h"
|
||||||
#include "document/view.h"
|
#include "document/view.h"
|
||||||
|
#include "document/xml/renderer.h"
|
||||||
|
#include "document/xml/renderer2.h"
|
||||||
#include "ecmascript/ecmascript.h"
|
#include "ecmascript/ecmascript.h"
|
||||||
#include "ecmascript/spidermonkey.h"
|
#include "ecmascript/spidermonkey.h"
|
||||||
#include "intl/gettext/libintl.h"
|
#include "intl/gettext/libintl.h"
|
||||||
#include "main/module.h"
|
#include "main/module.h"
|
||||||
|
#include "main/select.h"
|
||||||
#include "main/timer.h"
|
#include "main/timer.h"
|
||||||
#include "osdep/osdep.h"
|
#include "osdep/osdep.h"
|
||||||
#include "protocol/protocol.h"
|
#include "protocol/protocol.h"
|
||||||
@@ -240,6 +244,47 @@ ecmascript_get_interpreter_count(void)
|
|||||||
return interpreter_count;
|
return interpreter_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
delayed_reload(void *data)
|
||||||
|
{
|
||||||
|
struct delayed_rel *rel = data;
|
||||||
|
|
||||||
|
assert(rel);
|
||||||
|
reset_document(rel->document);
|
||||||
|
render_xhtml_document(rel->cached, rel->document, NULL);
|
||||||
|
sort_links(rel->document);
|
||||||
|
//draw_formatted(rel->ses, 0);
|
||||||
|
mem_free(rel);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text)
|
||||||
|
{
|
||||||
|
if (interpreter->changed) {
|
||||||
|
struct document_view *doc_view = interpreter->vs->doc_view;
|
||||||
|
struct document *document = doc_view->document;
|
||||||
|
struct session *ses = doc_view->session;
|
||||||
|
struct cache_entry *cached = document->cached;
|
||||||
|
struct fragment *f = get_cache_fragment(cached);
|
||||||
|
|
||||||
|
//fprintf(stderr, "%s\n", text);
|
||||||
|
|
||||||
|
if (document->dom) {
|
||||||
|
interpreter->changed = false;
|
||||||
|
|
||||||
|
struct delayed_rel *rel = mem_calloc(1, sizeof(*rel));
|
||||||
|
|
||||||
|
if (rel) {
|
||||||
|
rel->cached = cached;
|
||||||
|
rel->document = document;
|
||||||
|
rel->ses = ses;
|
||||||
|
object_lock(document);
|
||||||
|
register_bottom_half(delayed_reload, rel);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ecmascript_eval(struct ecmascript_interpreter *interpreter,
|
ecmascript_eval(struct ecmascript_interpreter *interpreter,
|
||||||
struct string *code, struct string *ret)
|
struct string *code, struct string *ret)
|
||||||
@@ -277,6 +322,9 @@ ecmascript_eval_stringback(struct ecmascript_interpreter *interpreter,
|
|||||||
interpreter->backend_nesting++;
|
interpreter->backend_nesting++;
|
||||||
result = spidermonkey_eval_stringback(interpreter, code);
|
result = spidermonkey_eval_stringback(interpreter, code);
|
||||||
interpreter->backend_nesting--;
|
interpreter->backend_nesting--;
|
||||||
|
|
||||||
|
check_for_rerender(interpreter, "stringback");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -292,6 +340,9 @@ ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter,
|
|||||||
interpreter->backend_nesting++;
|
interpreter->backend_nesting++;
|
||||||
result = spidermonkey_eval_boolback(interpreter, code);
|
result = spidermonkey_eval_boolback(interpreter, code);
|
||||||
interpreter->backend_nesting--;
|
interpreter->backend_nesting--;
|
||||||
|
|
||||||
|
check_for_rerender(interpreter, "boolback");
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -438,6 +489,7 @@ ecmascript_timeout_handler(void *i)
|
|||||||
/* The expired timer ID has now been erased. */
|
/* The expired timer ID has now been erased. */
|
||||||
|
|
||||||
ecmascript_eval(interpreter, &interpreter->code, NULL);
|
ecmascript_eval(interpreter, &interpreter->code, NULL);
|
||||||
|
check_for_rerender(interpreter, "handler");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Timer callback for @interpreter->vs->doc_view->document->timeout.
|
/* Timer callback for @interpreter->vs->doc_view->document->timeout.
|
||||||
@@ -455,6 +507,7 @@ ecmascript_timeout_handler2(void *i)
|
|||||||
/* The expired timer ID has now been erased. */
|
/* The expired timer ID has now been erased. */
|
||||||
|
|
||||||
ecmascript_call_function(interpreter, interpreter->fun, NULL);
|
ecmascript_call_function(interpreter, interpreter->fun, NULL);
|
||||||
|
check_for_rerender(interpreter, "handler2");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -111,6 +111,8 @@ void ecmascript_set_timeout2(struct ecmascript_interpreter *interpreter, JS::Han
|
|||||||
|
|
||||||
int get_ecmascript_enable(struct ecmascript_interpreter *interpreter);
|
int get_ecmascript_enable(struct ecmascript_interpreter *interpreter);
|
||||||
|
|
||||||
|
void check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text);
|
||||||
|
|
||||||
extern char *console_log_filename;
|
extern char *console_log_filename;
|
||||||
|
|
||||||
extern char *local_storage_filename;
|
extern char *local_storage_filename;
|
||||||
|
@@ -362,7 +362,6 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
|
|||||||
goto release_and_fail;
|
goto release_and_fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
JS_SetCompartmentPrivate(js::GetContextCompartment(ctx), interpreter);
|
JS_SetCompartmentPrivate(js::GetContextCompartment(ctx), interpreter);
|
||||||
|
|
||||||
return ctx;
|
return ctx;
|
||||||
@@ -426,7 +425,6 @@ spidermonkey_check_for_exception(JSContext *ctx) {
|
|||||||
* on each site with javascript enabled */
|
* on each site with javascript enabled */
|
||||||
JS_ClearPendingException(ctx);
|
JS_ClearPendingException(ctx);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -439,47 +437,6 @@ free_document(void *doc)
|
|||||||
delete docu;
|
delete docu;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
delayed_reload(void *data)
|
|
||||||
{
|
|
||||||
struct delayed_rel *rel = data;
|
|
||||||
|
|
||||||
assert(rel);
|
|
||||||
reset_document(rel->document);
|
|
||||||
render_xhtml_document(rel->cached, rel->document, NULL);
|
|
||||||
sort_links(rel->document);
|
|
||||||
draw_formatted(rel->ses, 0);
|
|
||||||
mem_free(rel);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
check_for_rerender(struct ecmascript_interpreter *interpreter, const char* text)
|
|
||||||
{
|
|
||||||
if (interpreter->changed) {
|
|
||||||
struct document_view *doc_view = interpreter->vs->doc_view;
|
|
||||||
struct document *document = doc_view->document;
|
|
||||||
struct session *ses = doc_view->session;
|
|
||||||
struct cache_entry *cached = document->cached;
|
|
||||||
struct fragment *f = get_cache_fragment(cached);
|
|
||||||
|
|
||||||
//fprintf(stderr, "%s\n", text);
|
|
||||||
|
|
||||||
if (document->dom) {
|
|
||||||
interpreter->changed = false;
|
|
||||||
|
|
||||||
struct delayed_rel *rel = mem_calloc(1, sizeof(*rel));
|
|
||||||
|
|
||||||
if (rel) {
|
|
||||||
rel->cached = cached;
|
|
||||||
rel->document = document;
|
|
||||||
rel->ses = ses;
|
|
||||||
object_lock(document);
|
|
||||||
register_bottom_half(delayed_reload, rel);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
spidermonkey_eval(struct ecmascript_interpreter *interpreter,
|
spidermonkey_eval(struct ecmascript_interpreter *interpreter,
|
||||||
struct string *code, struct string *ret)
|
struct string *code, struct string *ret)
|
||||||
@@ -509,8 +466,6 @@ spidermonkey_eval(struct ecmascript_interpreter *interpreter,
|
|||||||
done_heartbeat(interpreter->heartbeat);
|
done_heartbeat(interpreter->heartbeat);
|
||||||
JS_LeaveCompartment(ctx, comp);
|
JS_LeaveCompartment(ctx, comp);
|
||||||
JS_EndRequest(ctx);
|
JS_EndRequest(ctx);
|
||||||
|
|
||||||
check_for_rerender(interpreter, "eval");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
@@ -537,8 +492,6 @@ spidermonkey_call_function(struct ecmascript_interpreter *interpreter,
|
|||||||
done_heartbeat(interpreter->heartbeat);
|
done_heartbeat(interpreter->heartbeat);
|
||||||
JS_LeaveCompartment(ctx, comp);
|
JS_LeaveCompartment(ctx, comp);
|
||||||
JS_EndRequest(ctx);
|
JS_EndRequest(ctx);
|
||||||
|
|
||||||
check_for_rerender(interpreter, "call function");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -584,12 +537,9 @@ spidermonkey_eval_stringback(struct ecmascript_interpreter *interpreter,
|
|||||||
JS_LeaveCompartment(ctx, comp);
|
JS_LeaveCompartment(ctx, comp);
|
||||||
JS_EndRequest(ctx);
|
JS_EndRequest(ctx);
|
||||||
|
|
||||||
check_for_rerender(interpreter, "eval stringback");
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
|
spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
|
||||||
struct string *code)
|
struct string *code)
|
||||||
@@ -638,8 +588,6 @@ spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
|
|||||||
JS_LeaveCompartment(ctx, comp);
|
JS_LeaveCompartment(ctx, comp);
|
||||||
JS_EndRequest(ctx);
|
JS_EndRequest(ctx);
|
||||||
|
|
||||||
check_for_rerender(interpreter, "eval boolback");
|
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user