repo->source_filter = cgit_new_filter(value, SOURCE);
else if (!strcmp(name, "email-filter"))
repo->email_filter = cgit_new_filter(value, EMAIL);
+ else if (!strcmp(name, "owner-filter"))
+ repo->owner_filter = cgit_new_filter(value, OWNER);
}
}
ctx.cfg.commit_filter = cgit_new_filter(value, COMMIT);
else if (!strcmp(name, "email-filter"))
ctx.cfg.email_filter = cgit_new_filter(value, EMAIL);
+ else if (!strcmp(name, "owner-filter"))
+ ctx.cfg.owner_filter = cgit_new_filter(value, OWNER);
else if (!strcmp(name, "auth-filter"))
ctx.cfg.auth_filter = cgit_new_filter(value, AUTH);
else if (!strcmp(name, "embedded"))
cgit_fprintf_filter(repo->source_filter, f, "repo.source-filter=");
if (repo->email_filter && repo->email_filter != ctx.cfg.email_filter)
cgit_fprintf_filter(repo->email_filter, f, "repo.email-filter=");
+ if (repo->owner_filter && repo->owner_filter != ctx.cfg.owner_filter)
+ cgit_fprintf_filter(repo->owner_filter, f, "repo.owner-filter=");
if (repo->snapshots != ctx.cfg.snapshots) {
char *tmp = build_snapshot_setting(repo->snapshots);
fprintf(f, "repo.snapshots=%s\n", tmp ? tmp : "");
} diff_type;
typedef enum {
- ABOUT, COMMIT, SOURCE, EMAIL, AUTH
+ ABOUT, COMMIT, SOURCE, EMAIL, AUTH, OWNER
} filter_type;
struct cgit_filter {
struct cgit_filter *commit_filter;
struct cgit_filter *source_filter;
struct cgit_filter *email_filter;
+ struct cgit_filter *owner_filter;
struct string_list submodules;
};
struct cgit_filter *commit_filter;
struct cgit_filter *source_filter;
struct cgit_filter *email_filter;
+ struct cgit_filter *owner_filter;
struct cgit_filter *auth_filter;
};
calculated url of the repository index page will be used. Default
value: none.
+owner-filter::
+ Specifies a command which will be invoked to format the Owner
+ column of the main page. The command will get the owner on STDIN,
+ and the STDOUT from the command will be included verbatim in the
+ table. This can be used to link to additional context such as an
+ owners home page. When active this filter is used instead of the
+ default owner query url. Default value: none.
+ See also: "FILTER API".
+
max-atom-items::
Specifies the number of items to display in atom feeds view. Default
value: "10".
calculated url of the repository index page will be used. Default
value: global logo-link.
+repo.owner-filter::
+ Override the default owner-filter. Default value: none. See also:
+ "enable-filter-overrides". See also: "FILTER API".
+
repo.module-link::
Text which will be used as the formatstring for a hyperlink when a
submodule is printed in a directory listing. The arguments for the
expected to write to standard output the formatted text to be included
in the page.
+owner filter::
+ This filter is given no arguments. The owner text is avilable on
+ standard input and the filter is expected to write to standard
+ output. The output is included in the Owner column.
+
source filter::
This filter is given a single parameter: the filename of the source
file to filter. The filter can use the filename to determine (for
reap_filter(ctx.cfg.commit_filter);
reap_filter(ctx.cfg.source_filter);
reap_filter(ctx.cfg.email_filter);
+ reap_filter(ctx.cfg.owner_filter);
reap_filter(ctx.cfg.auth_filter);
for (i = 0; i < cgit_repolist.count; ++i) {
reap_filter(cgit_repolist.repos[i].about_filter);
reap_filter(cgit_repolist.repos[i].commit_filter);
reap_filter(cgit_repolist.repos[i].source_filter);
reap_filter(cgit_repolist.repos[i].email_filter);
+ reap_filter(cgit_repolist.repos[i].owner_filter);
}
}
argument_count = 2;
break;
+ case OWNER:
+ argument_count = 0;
+ break;
+
case SOURCE:
case ABOUT:
argument_count = 1;
--- /dev/null
+-- This script is an example of an owner-filter. It replaces the
+-- usual query link with one to a fictional homepage. This script may
+-- be used with the owner-filter or repo.owner-filter settings in
+-- cgitrc with the `lua:` prefix.
+
+function filter_open()
+ buffer = ""
+end
+
+function filter_close()
+ html(string.format("<a href=\"%s\">%s</a>", "http://wiki.example.com/about/" .. buffer, buffer))
+ return 0
+end
+
+function filter_write(str)
+ buffer = buffer .. str
+end
ret->commit_filter = ctx.cfg.commit_filter;
ret->source_filter = ctx.cfg.source_filter;
ret->email_filter = ctx.cfg.email_filter;
+ ret->owner_filter = ctx.cfg.owner_filter;
ret->clone_url = ctx.cfg.clone_url;
ret->submodules.strdup_strings = 1;
return ret;
html_link_close();
html("</td><td>");
if (ctx.cfg.enable_index_owner) {
- html("<a href='");
- html_attr(cgit_rooturl());
- html("?q=");
- html_url_arg(ctx.repo->owner);
- html("'>");
- html_txt(ctx.repo->owner);
- html("</a>");
+ if (ctx.repo->owner_filter) {
+ cgit_open_filter(ctx.repo->owner_filter);
+ html_txt(ctx.repo->owner);
+ cgit_close_filter(ctx.repo->owner_filter);
+ } else {
+ html("<a href='");
+ html_attr(cgit_rooturl());
+ html("?=");
+ html_url_arg(ctx.repo->owner);
+ html("'>");
+ html_txt(ctx.repo->owner);
+ html("</a>");
+ }
html("</td><td>");
}
print_modtime(ctx.repo);