surf-sitejs-20220214-94226b8.diff - sites - public wiki contents of suckless.org
 (HTM) git clone git://git.suckless.org/sites
 (DIR) Log
 (DIR) Files
 (DIR) Refs
       ---
       surf-sitejs-20220214-94226b8.diff (3338B)
       ---
            1 From 94226b8009dcb92a309148f73a39cbb6223ea34b Mon Sep 17 00:00:00 2001
            2 From: avalonwilliams <avalonwilliams@protonmail.com>
            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_EXTENDED)) {
           62 +                        scripts[i].file = g_strconcat(scriptdir, "/",
           63 +                                                                scripts[i].file, NULL);
           64 +                } else {
           65 +                        fprintf(stderr, "Could not compile regex: %s\n", scripts[i].regex);
           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, Client *c)
          102                  evalscript(c, "document.documentElement.style.overflow = '%s'",
          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