surf-sitejs-20220214-94226b8.diff - sites - public wiki contents of suckless.org | |
git clone git://git.suckless.org/sites | |
Log | |
Files | |
Refs | |
--- | |
surf-sitejs-20220214-94226b8.diff (3338B) | |
--- | |
1 From 94226b8009dcb92a309148f73a39cbb6223ea34b Mon Sep 17 00:00:00 2001 | |
2 From: avalonwilliams <[email protected]> | |
3 Date: Mon, 14 Feb 2022 23:29:35 -0500 | |
4 Subject: [PATCH] Per-site JS script patch | |
5 | |
6 Allows configuration of different javascript files for different sites | |
7 (similar to stylesheets) | |
8 --- | |
9 config.def.h | 10 ++++++++++ | |
10 surf.c | 34 ++++++++++++++++++++++++++++++---- | |
11 2 files changed, 40 insertions(+), 4 deletions(-) | |
12 | |
13 diff --git a/config.def.h b/config.def.h | |
14 index 1355ba3..8ba093b 100644 | |
15 --- a/config.def.h | |
16 +++ b/config.def.h | |
17 @@ -6,6 +6,7 @@ static char *styledir = "~/.surf/styles/"; | |
18 static char *certdir = "~/.surf/certificates/"; | |
19 static char *cachedir = "~/.surf/cache/"; | |
20 static char *cookiefile = "~/.surf/cookies.txt"; | |
21 +static char *scriptdir = "~/.surf/scripts/"; | |
22 | |
23 /* Webkit default features */ | |
24 /* Highest priority value will be used. | |
25 @@ -121,6 +122,15 @@ static SiteSpecific certs[] = { | |
26 { "://suckless\\.org/", "suckless.org.crt" }, | |
27 }; | |
28 | |
29 +/* scripts */ | |
30 +/* | |
31 + * Run scripts on certain URLs, will inject more than one script | |
32 + */ | |
33 +static SiteSpecific scripts[] = { | |
34 + /* regexp script in $scriptdir */ | |
35 + { "://duckduckgo\\.com", "example.js" }, | |
36 +}; | |
37 + | |
38 #define MODKEY GDK_CONTROL_MASK | |
39 | |
40 /* hotkeys */ | |
41 diff --git a/surf.c b/surf.c | |
42 index 03d8242..3aa84a3 100644 | |
43 --- a/surf.c | |
44 +++ b/surf.c | |
45 @@ -168,7 +168,8 @@ static const char *getcert(const char *uri); | |
46 static void setcert(Client *c, const char *file); | |
47 static const char *getstyle(const char *uri); | |
48 static void setstyle(Client *c, const char *file); | |
49 -static void runscript(Client *c); | |
50 +static void runscript(Client *c, const char *file); | |
51 +static void runsitescripts(Client *c, const char *uri); | |
52 static void evalscript(Client *c, const char *jsstr, ...); | |
53 static void updatewinid(Client *c); | |
54 static void handleplumb(Client *c, const char *uri); | |
55 @@ -400,6 +401,17 @@ setup(void) | |
56 stylefile = buildfile(stylefile); | |
57 } | |
58 | |
59 + scriptdir = buildpath(scriptdir); | |
60 + for (i = 0; i < LENGTH(scripts); ++i) { | |
61 + if (!regcomp(&(scripts[i].re), scripts[i].regex, REG_EX… | |
62 + scripts[i].file = g_strconcat(scriptdir, "/", | |
63 + scripts… | |
64 + } else { | |
65 + fprintf(stderr, "Could not compile regex: %s\n"… | |
66 + scripts[i].regex = NULL; | |
67 + } | |
68 + } | |
69 + | |
70 for (i = 0; i < LENGTH(uriparams); ++i) { | |
71 if (regcomp(&(uriparams[i].re), uriparams[i].uri, | |
72 REG_EXTENDED)) { | |
73 @@ -951,12 +963,25 @@ setstyle(Client *c, const char *file) | |
74 } | |
75 | |
76 void | |
77 -runscript(Client *c) | |
78 +runsitescripts(Client *c, const char *uri) { | |
79 + gchar *script; | |
80 + gsize l; | |
81 + int i; | |
82 + | |
83 + for (i = 0; i < LENGTH(scripts); ++i) { | |
84 + if (scripts[i].regex && | |
85 + !regexec(&(scripts[i].re), uri, 0, NULL, 0)) | |
86 + runscript(c, scripts[i].file); | |
87 + } | |
88 +} | |
89 + | |
90 +void | |
91 +runscript(Client *c, const char *file) | |
92 { | |
93 gchar *script; | |
94 gsize l; | |
95 | |
96 - if (g_file_get_contents(scriptfile, &script, &l, NULL) && l) | |
97 + if (g_file_get_contents(file, &script, &l, NULL) && l) | |
98 evalscript(c, "%s", script); | |
99 g_free(script); | |
100 } | |
101 @@ -1536,7 +1561,8 @@ loadchanged(WebKitWebView *v, WebKitLoadEvent e, C… | |
102 evalscript(c, "document.documentElement.style.overflow … | |
103 enablescrollbars ? "auto" : "hidden"); | |
104 */ | |
105 - runscript(c); | |
106 + runsitescripts(c, uri); | |
107 + runscript(c, scriptfile); | |
108 break; | |
109 } | |
110 updatetitle(c); | |
111 -- | |
112 2.34.1 | |
113 |