Introduction
Introduction Statistics Contact Development Disclaimer Help
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
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.