summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--cgitrc.5.txt15
-rw-r--r--filter.c3
-rw-r--r--filters/email-gravatar.lua2
-rwxr-xr-xfilters/email-gravatar.py2
-rw-r--r--ui-commit.c4
-rw-r--r--ui-log.c2
-rw-r--r--ui-refs.c6
-rw-r--r--ui-tag.c2
8 files changed, 21 insertions, 15 deletions
diff --git a/cgitrc.5.txt b/cgitrc.5.txt
index b7dc5a4..6a926aa 100644
--- a/cgitrc.5.txt
+++ b/cgitrc.5.txt
@@ -121,9 +121,9 @@ email-filter::
 	Specifies a command which will be invoked to format names and email
 	address of committers, authors, and taggers, as represented in various
 	places throughout the cgit interface. This command will receive an
-	email address as its only command line argument, and the text to
-	format on STDIN. It is to write the formatted text back out onto
-	STDOUT. Default value: none. See also: "FILTER API".
+	email address and an origin page string as its command line arguments,
+	and the text to format on STDIN. It is to write the formatted text back
+	out onto STDOUT. Default value: none. See also: "FILTER API".
 
 embedded::
 	Flag which, when set to "1", will make cgit generate a html fragment
@@ -620,10 +620,11 @@ commit filter::
 	expected on standard output.
 
 email filter::
-	This filter is given a single parameter: the email address of the
-	relevent user. The filter will then receive the text string to format
-	on standard input and is expected to write to standard output the
-	formatted text to be included in the page.
+	This filter is given two parameters: the email address of the relevent
+	author and a string indicating the originating page. The filter will
+	then receive the text string to format on standard input and is
+	expected to write to standard output the formatted text to be included
+	in the page.
 
 source filter::
 	This filter is given a single parameter: the filename of the source
diff --git a/filter.c b/filter.c
index 08ce7a5..aa36026 100644
--- a/filter.c
+++ b/filter.c
@@ -406,6 +406,9 @@ struct cgit_filter *cgit_new_filter(const char *cmd, filter_type filtertype)
 
 	switch (filtertype) {
 		case EMAIL:
+			argument_count = 2;
+			break;
+
 		case SOURCE:
 		case ABOUT:
 			argument_count = 1;
diff --git a/filters/email-gravatar.lua b/filters/email-gravatar.lua
index 8a53447..982e030 100644
--- a/filters/email-gravatar.lua
+++ b/filters/email-gravatar.lua
@@ -9,7 +9,7 @@
 
 require("crypto")
 
-function filter_open(email)
+function filter_open(email, page)
 	buffer = ""
 	md5 = crypto.digest("md5", email:sub(2, -2):lower())
 end
diff --git a/filters/email-gravatar.py b/filters/email-gravatar.py
index 4445615..f90b87d 100755
--- a/filters/email-gravatar.py
+++ b/filters/email-gravatar.py
@@ -27,6 +27,8 @@ if email[0] == '<':
 if email[-1] == '>':
         email = email[0:-1]
 
+page = sys.argv[2]
+
 md5 = hashlib.md5(email.encode()).hexdigest()
 text = sys.stdin.read().strip()
 
diff --git a/ui-commit.c b/ui-commit.c
index bd14ef0..c48bfe8 100644
--- a/ui-commit.c
+++ b/ui-commit.c
@@ -44,7 +44,7 @@ void cgit_print_commit(char *hex, const char *prefix)
 	cgit_print_diff_ctrls();
 	html("<table summary='commit info' class='commit-info'>\n");
 	html("<tr><th>author</th><td>");
-	cgit_open_filter(ctx.repo->email_filter, info->author_email);
+	cgit_open_filter(ctx.repo->email_filter, info->author_email, "commit");
 	html_txt(info->author);
 	if (!ctx.cfg.noplainemail) {
 		html(" ");
@@ -55,7 +55,7 @@ void cgit_print_commit(char *hex, const char *prefix)
 	cgit_print_date(info->author_date, FMT_LONGDATE, ctx.cfg.local_time);
 	html("</td></tr>\n");
 	html("<tr><th>committer</th><td>");
-	cgit_open_filter(ctx.repo->email_filter, info->committer_email);
+	cgit_open_filter(ctx.repo->email_filter, info->committer_email, "commit");
 	html_txt(info->committer);
 	if (!ctx.cfg.noplainemail) {
 		html(" ");
diff --git a/ui-log.c b/ui-log.c
index 957d887..499534c 100644
--- a/ui-log.c
+++ b/ui-log.c
@@ -168,7 +168,7 @@ static void print_commit(struct commit *commit, struct rev_info *revs)
 			 sha1_to_hex(commit->object.sha1), ctx.qry.vpath, 0);
 	show_commit_decorations(commit);
 	html("</td><td>");
-	cgit_open_filter(ctx.repo->email_filter, info->author_email);
+	cgit_open_filter(ctx.repo->email_filter, info->author_email, "log");
 	html_txt(info->author);
 	cgit_close_filter(ctx.repo->email_filter);
 
diff --git a/ui-refs.c b/ui-refs.c
index d125459..147b665 100644
--- a/ui-refs.c
+++ b/ui-refs.c
@@ -77,7 +77,7 @@ static int print_branch(struct refinfo *ref)
 	if (ref->object->type == OBJ_COMMIT) {
 		cgit_commit_link(info->subject, NULL, NULL, name, NULL, NULL, 0);
 		html("</td><td>");
-		cgit_open_filter(ctx.repo->email_filter, info->author_email);
+		cgit_open_filter(ctx.repo->email_filter, info->author_email, "refs");
 		html_txt(info->author);
 		cgit_close_filter(ctx.repo->email_filter);
 		html("</td><td colspan='2'>");
@@ -157,12 +157,12 @@ static int print_tag(struct refinfo *ref)
 	html("</td><td>");
 	if (info) {
 		if (info->tagger) {
-			cgit_open_filter(ctx.repo->email_filter, info->tagger_email);
+			cgit_open_filter(ctx.repo->email_filter, info->tagger_email, "refs");
 			html_txt(info->tagger);
 			cgit_close_filter(ctx.repo->email_filter);
 		}
 	} else if (ref->object->type == OBJ_COMMIT) {
-		cgit_open_filter(ctx.repo->email_filter, ref->commit->author_email);
+		cgit_open_filter(ctx.repo->email_filter, ref->commit->author_email, "refs");
 		html_txt(ref->commit->author);
 		cgit_close_filter(ctx.repo->email_filter);
 	}
diff --git a/ui-tag.c b/ui-tag.c
index adbdb90..c1d1738 100644
--- a/ui-tag.c
+++ b/ui-tag.c
@@ -77,7 +77,7 @@ void cgit_print_tag(char *revname)
 		}
 		if (info->tagger) {
 			html("<tr><td>tagged by</td><td>");
-			cgit_open_filter(ctx.repo->email_filter, info->tagger_email);
+			cgit_open_filter(ctx.repo->email_filter, info->tagger_email, "tag");
 			html_txt(info->tagger);
 			if (info->tagger_email && !ctx.cfg.noplainemail) {
 				html(" ");