diff --git a/src/document/html/parser/link.c b/src/document/html/parser/link.c
index d0bdfc168..f9d7fa8ec 100644
--- a/src/document/html/parser/link.c
+++ b/src/document/html/parser/link.c
@@ -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);
}
diff --git a/src/document/renderer.c b/src/document/renderer.c
index 1aca82c8b..9771178c2 100644
--- a/src/document/renderer.c
+++ b/src/document/renderer.c
@@ -208,6 +208,7 @@ process_snippets(struct ecmascript_interpreter *interpreter,
ecmascript_eval(interpreter, &code, NULL);
}
}
+ check_for_rerender(interpreter, "eval");
}
#endif
diff --git a/src/ecmascript/ecmascript.c b/src/ecmascript/ecmascript.c
index b73643626..1f305a965 100644
--- a/src/ecmascript/ecmascript.c
+++ b/src/ecmascript/ecmascript.c
@@ -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");
}
diff --git a/src/ecmascript/ecmascript.h b/src/ecmascript/ecmascript.h
index d1e57ed7d..a49c4919c 100644
--- a/src/ecmascript/ecmascript.h
+++ b/src/ecmascript/ecmascript.h
@@ -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;
diff --git a/src/ecmascript/spidermonkey.c b/src/ecmascript/spidermonkey.c
index 280800816..7740e08da 100644
--- a/src/ecmascript/spidermonkey.c
+++ b/src/ecmascript/spidermonkey.c
@@ -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;
}