1
0
mirror of https://github.com/rkd77/elinks.git synced 2025-02-02 15:09:23 -05:00

[js] moved check_for_rerender to ecmascript.c

This commit is contained in:
Witold Filipczyk 2021-07-20 10:05:58 +02:00
parent 221f246d4c
commit 927b8fc1a6
5 changed files with 58 additions and 53 deletions

View File

@ -492,6 +492,7 @@ html_iframe_do(char *a, char *object_src,
html_context->options->framename, html_context);
}
#if 0
char *url2 = join_urls(html_context->base_href, url);
uri = get_uri(url2, URI_BASE);
@ -501,7 +502,7 @@ html_iframe_do(char *a, char *object_src,
done_uri(uri);
mem_free(url2);
}
#endif
mem_free(name);
mem_free(url);
}

View File

@ -208,6 +208,7 @@ process_snippets(struct ecmascript_interpreter *interpreter,
ecmascript_eval(interpreter, &code, NULL);
}
}
check_for_rerender(interpreter, "eval");
}
#endif

View File

@ -12,11 +12,15 @@
#include "config/home.h"
#include "config/options.h"
#include "document/document.h"
#include "document/renderer.h"
#include "document/view.h"
#include "document/xml/renderer.h"
#include "document/xml/renderer2.h"
#include "ecmascript/ecmascript.h"
#include "ecmascript/spidermonkey.h"
#include "intl/gettext/libintl.h"
#include "main/module.h"
#include "main/select.h"
#include "main/timer.h"
#include "osdep/osdep.h"
#include "protocol/protocol.h"
@ -240,6 +244,47 @@ ecmascript_get_interpreter_count(void)
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
ecmascript_eval(struct ecmascript_interpreter *interpreter,
struct string *code, struct string *ret)
@ -277,6 +322,9 @@ ecmascript_eval_stringback(struct ecmascript_interpreter *interpreter,
interpreter->backend_nesting++;
result = spidermonkey_eval_stringback(interpreter, code);
interpreter->backend_nesting--;
check_for_rerender(interpreter, "stringback");
return result;
}
@ -292,6 +340,9 @@ ecmascript_eval_boolback(struct ecmascript_interpreter *interpreter,
interpreter->backend_nesting++;
result = spidermonkey_eval_boolback(interpreter, code);
interpreter->backend_nesting--;
check_for_rerender(interpreter, "boolback");
return result;
}
@ -438,6 +489,7 @@ ecmascript_timeout_handler(void *i)
/* The expired timer ID has now been erased. */
ecmascript_eval(interpreter, &interpreter->code, NULL);
check_for_rerender(interpreter, "handler");
}
/* 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. */
ecmascript_call_function(interpreter, interpreter->fun, NULL);
check_for_rerender(interpreter, "handler2");
}

View File

@ -111,6 +111,8 @@ void ecmascript_set_timeout2(struct ecmascript_interpreter *interpreter, JS::Han
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 *local_storage_filename;

View File

@ -362,7 +362,6 @@ spidermonkey_get_interpreter(struct ecmascript_interpreter *interpreter)
goto release_and_fail;
}
JS_SetCompartmentPrivate(js::GetContextCompartment(ctx), interpreter);
return ctx;
@ -426,7 +425,6 @@ spidermonkey_check_for_exception(JSContext *ctx) {
* on each site with javascript enabled */
JS_ClearPendingException(ctx);
}
}
void
@ -439,47 +437,6 @@ free_document(void *doc)
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
spidermonkey_eval(struct ecmascript_interpreter *interpreter,
struct string *code, struct string *ret)
@ -509,8 +466,6 @@ spidermonkey_eval(struct ecmascript_interpreter *interpreter,
done_heartbeat(interpreter->heartbeat);
JS_LeaveCompartment(ctx, comp);
JS_EndRequest(ctx);
check_for_rerender(interpreter, "eval");
}
void
@ -537,8 +492,6 @@ spidermonkey_call_function(struct ecmascript_interpreter *interpreter,
done_heartbeat(interpreter->heartbeat);
JS_LeaveCompartment(ctx, comp);
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_EndRequest(ctx);
check_for_rerender(interpreter, "eval stringback");
return result;
}
int
spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
struct string *code)
@ -638,8 +588,6 @@ spidermonkey_eval_boolback(struct ecmascript_interpreter *interpreter,
JS_LeaveCompartment(ctx, comp);
JS_EndRequest(ctx);
check_for_rerender(interpreter, "eval boolback");
return result;
}