From 6b505a48a23f77867dd9dc75a542ede6ce4ae955 Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 4 Jul 2026 10:53:44 +0530 Subject: Fix html transformation for about + syntax hl changes --- cgit/cgitrc | 32 +++++++++++++--- cgit/filters/about.sh | 5 +++ cgit/filters/html-transform.py | 83 ++++++++++++++++++++++++++++++++++++++++++ cgit/nginx.conf | 35 ++++++++++++++++++ cgit/static/cgit.css | 54 +++++++++++++++++++-------- 5 files changed, 189 insertions(+), 20 deletions(-) create mode 100755 cgit/filters/about.sh create mode 100755 cgit/filters/html-transform.py create mode 100644 cgit/nginx.conf (limited to 'cgit') diff --git a/cgit/cgitrc b/cgit/cgitrc index bed622c..935192c 100644 --- a/cgit/cgitrc +++ b/cgit/cgitrc @@ -5,10 +5,24 @@ root-readme=/usr/share/webapps/cgit/ediblemonad/README.md # Theme css=/ediblemonad/cgit.css logo=/ediblemonad/logo.png -head-include=/usr/share/webapps/cgit/ediblemonad/head.html +favicon=/favicon.ico +head-include=/usr/share/webapps/cgit/ediblemonad/header.html +# footer= TODO: override footer + +# TODO: submodule links +# module-link=/cgit/submodule/%s/commit?id=%s source-filter=/usr/lib/cgit/filters/syntax-highlighting.py -about-filter=/usr/lib/cgit/filters/about-formatting.sh +about-filter=/usr/lib/cgit/filters/ediblemonad/about.sh + +# Mimetypes for plain files +mimetype.gif=image/gif +mimetype.html=text/html +mimetype.jpg=image/jpeg +mimetype.jpeg=image/jpeg +mimetype.pdf=application/pdf +mimetype.png=image/png +mimetype.svg=image/svg+xml # Search for these files in the root of the default branch of repositories # for coming up with the about page: @@ -43,17 +57,25 @@ readme=:install # Cache cache-root=/var/cache/cgit -cache-size=2000 +cache-size=0 -enable-index-links=1 +enable-index-links=0 enable-index-owner=0 enable-remote-branches=1 enable-log-filecount=1 enable-log-linecount=1 +enable-tree-linenumbers=1 enable-git-config=1 +enable-commit-graph=1 +enable-follow-links=1 +enable-http-clone=1 +enable-html-serving=1 snapshots=tar.xz zip +remove-suffix=1 +repository-sort=age +# side-by-side-diffs=1 -robots=noindex, nofollow +robots=index, nofollow virtual-root=/ section-from-path=0 max-repo-count=50 diff --git a/cgit/filters/about.sh b/cgit/filters/about.sh new file mode 100755 index 0000000..e8554b0 --- /dev/null +++ b/cgit/filters/about.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env sh +# About content filter + +/usr/lib/cgit/filters/about-formatting.sh "$@" | /usr/lib/cgit/filters/ediblemonad/html-transform.py + diff --git a/cgit/filters/html-transform.py b/cgit/filters/html-transform.py new file mode 100755 index 0000000..9fc7aec --- /dev/null +++ b/cgit/filters/html-transform.py @@ -0,0 +1,83 @@ +#!/usr/bin/env python3 +# Rewrite image urls in about section + +import sys +from html.parser import HTMLParser +import html +from urllib.parse import urljoin, urlparse +import re + +def is_absolute_url(url): + if not url: return False + parsed = urlparse(url) + return bool(parsed.netloc or parsed.scheme) + +def is_relative_path(url): + if not url: return False + return not url.startswith("/") and not is_absolute_url(url) + +def linkify(text, make_link): + url_pattern = r'(?" + + def handle_starttag(self, tag, attrs): + self.output.append(self._build_tag(tag, attrs)) + + def handle_startendtag(self, tag, attrs): + self.output.append(self._build_tag(tag, attrs, self_closing=True)) + + def handle_endtag(self, tag): + self.output.append(f"") + + def handle_data(self, data): + data_with_links = linkify(data, + lambda url: self._build_tag("a", [('href', url)]) + html.escape(url) + "") + self.output.append(data_with_links) + + def handle_entityref(self, name): + self.output.append(f"&{name};") + + def handle_charref(self, name): + self.output.append(f"&#{name};") + + def handle_comment(self, data): + self.output.append(f"") + +html_in = sys.stdin.read() + +parser = LinkRewriter() +parser.feed(html_in) + +print(parser.get_html()) diff --git a/cgit/nginx.conf b/cgit/nginx.conf new file mode 100644 index 0000000..a850744 --- /dev/null +++ b/cgit/nginx.conf @@ -0,0 +1,35 @@ +server { + listen 80; + server_name localhost; + root /usr/share/webapps/cgit; + + location / { + try_files $uri @cgit; + } + + location ~* ^.+(favicon.ico|robots.txt) { + root /usr/share/webapps/cgit; + expires 30d; + } + + location @cgit { + include /etc/nginx/fastcgi_params; + fastcgi_param SCRIPT_FILENAME $document_root/cgit.cgi; + fastcgi_param PATH_INFO $uri; + fastcgi_param QUERY_STRING $args; + fastcgi_param HTTP_HOST $server_name; + fastcgi_pass unix:/var/run/fcgiwrap.sock; + } + + error_page 404 /404.html; + error_page 401 /401.html; + + error_page 500 502 503 504 /50x.html; + location = /50x.html { + root /usr/share/nginx/html; + } + + location ~ /\.ht { + deny all; + } +} diff --git a/cgit/static/cgit.css b/cgit/static/cgit.css index a57fa9a..8da6a9e 100644 --- a/cgit/static/cgit.css +++ b/cgit/static/cgit.css @@ -9,9 +9,12 @@ html, body { input[type=search], input[type=text], select { background-color: #111; - color: var(--color-accent); + color: #eee; border: 1px solid #333; } +select { + color: var(--color-accent); +} div#cgit button, div#cgit input[type=submit] { background-color: #111; @@ -978,6 +981,15 @@ div#cgit table.ssdiff td.space div { #cgit a.toclink { color: white !important; } +#cgit .markdown-body h1, +#cgit .markdown-body h2, +#cgit .markdown-body h3, +#cgit .markdown-body h4, +#cgit .markdown-body h5, +#cgit .markdown-body h6 { + /*border-bottom: 1px solid #222;*/ + border: none; +} #cgit .markdown-body pre { background: #111; border: 1px solid #222; @@ -989,20 +1001,40 @@ div#cgit table.ssdiff td.space div { background: #222; border: none; } +#cgit .markdown-body table tr, +#cgit .markdown-body table th, +#cgit .markdown-body table td { + background: transparent; + border: 1px solid #333; +} +#cgit .markdown-body table img { + display: block; + margin: 0 auto; +} -#cgit .markdown-body pre code > span { +#cgit .highlight pre span { background: transparent !important; } +#cgit .markdown-body hr { + background: none; + border-top: 1px solid #222; + height: 1rem; + margin: 1rem 1rem 0; +} /* BuiltIn */ -#cgit .highlight span.cp { +#cgit .highlight span[class^=c] { color: #006060; font-weight: bold; } -#cgit .highlight span.k, #cgit .highlight span.kr { +#cgit .highlight span[class^=k] { color: #006060; font-weight: bold; } +#cgit .highlight span[class^=b] { + color: #bbeeee; + font-weight: bold; +} /* Err */ #cgit .highlight span.err { @@ -1010,23 +1042,15 @@ div#cgit table.ssdiff td.space div { } /* Variables */ -#cgit .highlight span.n { - color: #eee; -} - -/* Func */ -#cgit .highlight span.nb { - color: #eee; -} -#cgit .highlight span.nf { +#cgit .highlight span[class^=n] { color: #eee; } /* Literal */ -#cgit .highlight span.mi, #cgit .highlight span.mf { /* Num */ +#cgit .highlight span[class^=m] { /* Num */ color: #607020; } -#cgit .highlight span.s { /* Str */ +#cgit .highlight span[class^=s] { /* Str */ color: #71d2ae; background-color: transparent; } -- cgit v1.3.1