summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPeter Hofmann <scm@uninformativ.de>2020-01-04 09:39:24 +0100
committerPeter Hofmann <scm@uninformativ.de>2020-02-22 09:55:32 +0100
commit50beec7bdc0732cf2f891f7362f5243ad7eec9f4 (patch)
tree0d8b70dee889fb9b84bba830cf8de369e8e717ec
parent96055b0c4d9018e7e64a7f3826350e9db1e4e9d7 (diff)
downloadlariza-50beec7bdc0732cf2f891f7362f5243ad7eec9f4.tar.gz
Introduce user-supplied JavaScript files
-rw-r--r--CHANGES5
-rw-r--r--browser.c33
-rw-r--r--man1/lariza.14
-rw-r--r--man1/lariza.usage.19
4 files changed, 51 insertions, 0 deletions
diff --git a/CHANGES b/CHANGES
index 362bc82..6efe050 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,5 +1,10 @@
Release history for lariza
+next
+ [Added]
+ - User-supplied JavaScript files can be put into
+ ~/.config/lariza/scripts.
+
v19.05 2019-05-05
[Fixed]
- We no longer use WebKit's deprecated JavaScript API.
diff --git a/browser.c b/browser.c
index 6d022e5..aae2faf 100644
--- a/browser.c
+++ b/browser.c
@@ -48,6 +48,7 @@ static gboolean menu_web_view(WebKitWebView *, WebKitContextMenu *, GdkEvent *,
WebKitHitTestResult *, gpointer);
static gboolean quit_if_nothing_active(void);
static gboolean remote_msg(GIOChannel *, GIOCondition, gpointer);
+static void run_user_scripts(WebKitWebView *);
static void search(gpointer, gint);
static void show_web_view(WebKitWebView *, gpointer);
static Window tabbed_launch(void);
@@ -372,6 +373,8 @@ changed_load_progress(GObject *obj, GParamSpec *pspec, gpointer data)
webkit_web_view_run_javascript(WEBKIT_WEB_VIEW(c->web_view),
grab_feeds, NULL,
grab_feeds_finished, c);
+
+ run_user_scripts(WEBKIT_WEB_VIEW(c->web_view));
}
gtk_entry_set_progress_fraction(GTK_ENTRY(c->location), p);
}
@@ -1128,6 +1131,36 @@ remote_msg(GIOChannel *channel, GIOCondition condition, gpointer data)
}
void
+run_user_scripts(WebKitWebView *web_view)
+{
+ gchar *base = NULL, *path = NULL, *contents = NULL;
+ const gchar *entry = NULL;
+ GDir *scriptdir = NULL;
+
+ base = g_build_filename(g_get_user_config_dir(), __NAME__, "scripts", NULL);
+ scriptdir = g_dir_open(base, 0, NULL);
+ if (scriptdir != NULL)
+ {
+ while ((entry = g_dir_read_name(scriptdir)) != NULL)
+ {
+ path = g_build_filename(base, entry, NULL);
+ if (g_str_has_suffix(path, ".js"))
+ {
+ if (g_file_get_contents(path, &contents, NULL, NULL))
+ {
+ webkit_web_view_run_javascript(web_view, contents, NULL, NULL, NULL);
+ g_free(contents);
+ }
+ }
+ g_free(path);
+ }
+ g_dir_close(scriptdir);
+ }
+
+ g_free(base);
+}
+
+void
search(gpointer data, gint direction)
{
struct Client *c = (struct Client *)data;
diff --git a/man1/lariza.1 b/man1/lariza.1
index 9c5a92f..cbd3783 100644
--- a/man1/lariza.1
+++ b/man1/lariza.1
@@ -101,6 +101,10 @@ Directory where trusted certificates are stored. See
Configuration file for keyword base searching. See
\fBlariza.usage\fP(1).
.TP
+\fI~/.config\:/lariza\:/scripts\fP
+Directory to store user-supplied JavaScript snippets. See
+\fBlariza.usage\fP(1).
+.TP
\fI~/.local\:/share\:/lariza\:/web_extensions\fP
Sets the directory where WebKit will look for web extensions. See
\fBlariza.usage\fP(1).
diff --git a/man1/lariza.usage.1 b/man1/lariza.usage.1
index 17279cc..fec4bdb 100644
--- a/man1/lariza.usage.1
+++ b/man1/lariza.usage.1
@@ -149,6 +149,15 @@ is where your search term will be placed.
.P
Lines starting with \fB#\fP are ignored.
.\" --------------------------------------------------------------------
+.SH "USER-SUPPLIED JAVASCRIPT FILES"
+After a page has been successfully loaded, the directory
+\fI~/.config\:/lariza\:/scripts\fP will be scanned and each file in it
+ending with \fB.js\fP will be run as a JavaScript file in the context of
+said page.
+.P
+During development, you will most likely want to run \fBlariza\fP with
+$\fBLARIZA_ENABLE_CONSOLE_TO_STDOUT\fP enabled.
+.\" --------------------------------------------------------------------
.SH "TRUSTED CERTIFICATES"
By default, \fBlariza\fP trusts whatever CAs are trusted by WebKit, i.e. by
your GnuTLS installation. If you wish to trust additional certificates,