From ec4d91c210f53899b00079b91d6604bf42cd7d8f Mon Sep 17 00:00:00 2001 From: Shane Jaroch Date: Thu, 15 Jan 2026 12:53:42 -0500 Subject: [PATCH] update; format python/html --- Makefile | 1 + etc/gitweb.conf | 2 +- etc/nginx/conf.d/git-http.conf | 47 +- scripts/gen_services_map.py | 100 ++ .../gitweb-simplefrontend/assets/fix-logo.css | 8 + scripts/gitweb-simplefrontend/indextext.html | 2 +- scripts/gitweb-simplefrontend/services.html | 76 ++ .../gitweb-simplefrontend/theme/gitweb.css | 975 ++++++++++-------- 8 files changed, 770 insertions(+), 441 deletions(-) create mode 100644 scripts/gen_services_map.py create mode 100644 scripts/gitweb-simplefrontend/assets/fix-logo.css create mode 100644 scripts/gitweb-simplefrontend/services.html diff --git a/Makefile b/Makefile index c5d341b..de4d8ce 100644 --- a/Makefile +++ b/Makefile @@ -43,6 +43,7 @@ VPS := $(VPS_USER)@$(VPS_HOST) .PHONY: stage/nginx stage/nginx: ##H @Remote Stage files on the remote VPS @echo "Staging files on $(VPS_HOST)..." + python3 scripts/gen_services_map.py ssh $(VPS) 'rm -rf ~/.nginx-staging && mkdir -p ~/.nginx-staging/etc/nginx/conf.d ~/.nginx-staging/scripts/gitweb-simplefrontend' scp -q -r etc/nginx/conf.d/*.conf $(VPS):~/.nginx-staging/etc/nginx/conf.d/ scp -q etc/gitweb.conf $(VPS):~/.nginx-staging/etc/gitweb.conf diff --git a/etc/gitweb.conf b/etc/gitweb.conf index c85dd93..5e8313d 100644 --- a/etc/gitweb.conf +++ b/etc/gitweb.conf @@ -21,7 +21,7 @@ $favicon = "/v1/static/git-favicon.png"; if ($version eq 'v2') { $site_name = "Nutra Git (v2)"; $home_text = "indextext.html"; - @stylesheets = ("/v2/theme/gitweb.css"); + @stylesheets = ("/v2/theme/gitweb.css", "/v2/assets/fix-logo.css"); $javascript = "/v2/static/gitweb.js"; $logo = "/v2/assets/git-favicon.png"; $favicon = "/v2/assets/git-favicon.png"; diff --git a/etc/nginx/conf.d/git-http.conf b/etc/nginx/conf.d/git-http.conf index a81fa14..1f872e2 100644 --- a/etc/nginx/conf.d/git-http.conf +++ b/etc/nginx/conf.d/git-http.conf @@ -22,6 +22,14 @@ server { # Common Git Root set $git_root /srv/git; + # ---------------------------------------------------------------------- + # Site Map + # ---------------------------------------------------------------------- + location = /services { + alias /srv/git/services.html; + default_type text/html; + } + # ---------------------------------------------------------------------- # Root Redirect -> v1 # ---------------------------------------------------------------------- @@ -96,39 +104,18 @@ server { } # ---------------------------------------------------------------------- - # Version 3: Current Implementation (Full Custom) + # Version 3: Gitea (Proxy to localhost:3000) # ---------------------------------------------------------------------- - - # Custom Theme/Assets Aliases for v3 - location ^~ /v3/theme/ { - alias /srv/git/theme/; - } - location ^~ /v3/assets/ { - alias /srv/git/assets/; - } - location ^~ /v3/static/ { - alias /usr/share/gitweb/static/; - } - - # Git Smart HTTP Backend (v3) - location ~ ^/v3/git(/.*)$ { - include /etc/nginx/fastcgi_params; - fastcgi_param SCRIPT_FILENAME /usr/lib/git-core/git-http-backend; - fastcgi_param GIT_PROJECT_ROOT $git_root; - fastcgi_param GIT_HTTP_EXPORT_ALL "1"; - fastcgi_param PATH_INFO $1; - fastcgi_param REMOTE_USER $remote_user; - fastcgi_pass unix:/var/run/fcgiwrap.socket; + location = /admin { + return 302 /v3/admin; } - # Gitweb UI (v3) - location ~ ^/v3(/.*)?$ { - include /etc/nginx/fastcgi_params; - fastcgi_param SCRIPT_FILENAME /usr/share/gitweb/gitweb.cgi; - fastcgi_param PATH_INFO $1; - fastcgi_param GITWEB_CONFIG /etc/gitweb.conf; - fastcgi_param GITWEB_VERSION "v3"; - fastcgi_pass unix:/var/run/fcgiwrap.socket; + location /v3/ { + proxy_pass http://localhost:3000/; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; } } diff --git a/scripts/gen_services_map.py b/scripts/gen_services_map.py new file mode 100644 index 0000000..39067a1 --- /dev/null +++ b/scripts/gen_services_map.py @@ -0,0 +1,100 @@ +#!/usr/bin/env python3 +import re +import os +from pathlib import Path + +# Paths relative to repo root +REPO_ROOT = Path(__file__).parent.parent +NGINX_CONF = REPO_ROOT / "etc/nginx/conf.d/git-http.conf" +OUTPUT_HTML = REPO_ROOT / "scripts/gitweb-simplefrontend/services.html" + +HTML_TEMPLATE = """ + + + NutraTech Git Services + + + +

Git Services Map

+

Generated automatically from Nginx configuration.

+ + {services_html} + + +""" + + +def parse_nginx_config(): + services = [] + + if not NGINX_CONF.exists(): + print(f"Error: Could not find config at {NGINX_CONF}") + return [] + + # Regex to find "Version X: Description" lines + # Matches: # Version 1: Original Gitweb (Standard) + version_pattern = re.compile(r"^\s*#\s*Version\s+(\w+):\s*(.+)$", re.MULTILINE) + + with open(NGINX_CONF, "r") as f: + content = f.read() + + matches = version_pattern.findall(content) + for version_id, description in matches: + # Clean up version ID (e.g., '1' -> 'v1') + if not version_id.startswith("v"): + vid = f"v{version_id}" + else: + vid = version_id + + services.append( + {"id": vid, "url": f"/{vid}", "description": description.strip()} + ) + + return services + + +def generate_html(services): + services_html = "" + + for s in services: + services_html += f""" +
+

{s['url']}

+
{s['description']}
+
""" + + return HTML_TEMPLATE.format(services_html=services_html) + + +def main(): + print(f"Reading config from: {NGINX_CONF}") + services = parse_nginx_config() + + if not services: + print("No services found!") + return + + print(f"Found {len(services)} services: {[s['id'] for s in services]}") + + html_content = generate_html(services) + + os.makedirs(OUTPUT_HTML.parent, exist_ok=True) + with open(OUTPUT_HTML, "w") as f: + f.write(html_content) + + print(f"Generated site map at: {OUTPUT_HTML}") + + +if __name__ == "__main__": + main() diff --git a/scripts/gitweb-simplefrontend/assets/fix-logo.css b/scripts/gitweb-simplefrontend/assets/fix-logo.css new file mode 100644 index 0000000..13dc9bd --- /dev/null +++ b/scripts/gitweb-simplefrontend/assets/fix-logo.css @@ -0,0 +1,8 @@ +/* Fix Logo Aspect Ratio (Gitweb defaults to 72x27, squashing square icons) */ +img.logo { + width: auto !important; + height: 32px !important; + position: relative !important; + top: -4px !important; /* Force it up */ + vertical-align: middle !important; +} diff --git a/scripts/gitweb-simplefrontend/indextext.html b/scripts/gitweb-simplefrontend/indextext.html index f510657..b9b9bbb 100644 --- a/scripts/gitweb-simplefrontend/indextext.html +++ b/scripts/gitweb-simplefrontend/indextext.html @@ -1,4 +1,4 @@ -
+

Welcome to NutraTech Git

Please browse our repositories below.

diff --git a/scripts/gitweb-simplefrontend/services.html b/scripts/gitweb-simplefrontend/services.html new file mode 100644 index 0000000..bb3a59a --- /dev/null +++ b/scripts/gitweb-simplefrontend/services.html @@ -0,0 +1,76 @@ + + + + NutraTech Git Services + + + +

Git Services Map

+

Generated automatically from Nginx configuration.

+ +
+

/v1

+
Original Gitweb (Standard)
+
+
+

/v2

+
Simple Frontend (Theme only)
+
+
+

/v3

+
Gitea (Proxy to localhost:3000)
+
+ + diff --git a/scripts/gitweb-simplefrontend/theme/gitweb.css b/scripts/gitweb-simplefrontend/theme/gitweb.css index 65458de..e6e0cb4 100644 --- a/scripts/gitweb-simplefrontend/theme/gitweb.css +++ b/scripts/gitweb-simplefrontend/theme/gitweb.css @@ -4,223 +4,320 @@ /* Based on http://meyerweb.com/eric/tools/css/reset/ */ /* v1.0 | 20080212 */ -html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, -blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, -font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, b, -u, i, center, dl, dt, dd, ol, ul, li, fieldset, form, label, legend, table, -caption, tbody, tfoot, thead, tr, th, td { - margin: 0; - padding: 0; - border: 0; - outline: 0; - font-size: 100%; - vertical-align: baseline; - background: transparent; +html, +body, +div, +span, +applet, +object, +iframe, +h1, +h2, +h3, +h4, +h5, +h6, +p, +blockquote, +pre, +a, +abbr, +acronym, +address, +big, +cite, +code, +del, +dfn, +em, +font, +img, +ins, +kbd, +q, +s, +samp, +small, +strike, +strong, +sub, +sup, +tt, +var, +b, +u, +i, +center, +dl, +dt, +dd, +ol, +ul, +li, +fieldset, +form, +label, +legend, +table, +caption, +tbody, +tfoot, +thead, +tr, +th, +td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-size: 100%; + vertical-align: baseline; + background: transparent; +} + +ol, +ul { + list-style: none; +} + +blockquote, +q { + quotes: none; +} + +blockquote:before, +blockquote:after, +q:before, +q:after { + content: ""; + content: none; +} + +:focus { + outline: 0; +} + +ins { + text-decoration: none; +} + +del { + text-decoration: line-through; } -ol, ul { list-style: none; } - -blockquote, q { quotes: none; } - -blockquote:before, blockquote:after, -q:before, q:after { - content: ''; - content: none; -} - -:focus { outline: 0; } - -ins { text-decoration: none; } - -del { text-decoration: line-through; } - table { - border-collapse: collapse; - border-spacing: 0; + border-collapse: collapse; + border-spacing: 0; } -a { outline: none; } +a { + outline: none; +} /* General ---------------------------------------------------------------------------- */ html { - position: relative; - min-height: 100%; + position: relative; + min-height: 100%; } body { - font: 13px Helvetica,arial,freesans,clean,sans-serif; - line-height: 1.4; - margin: 0 0 105px; - background-color: #fff; - color: #000000; + font: + 13px Helvetica, + arial, + freesans, + clean, + sans-serif; + line-height: 1.4; + margin: 0 0 105px; + background-color: #fff; + color: #000000; } /* Monospaced Fonts */ -.sha1, .mode, .diff_tree .list, .pre, .diff, .patchset { - font-family: 'Consolas','Bitstream Vera Sans Mono',monospace; +.sha1, +.mode, +.diff_tree .list, +.pre, +.diff, +.patchset { + font-family: "Consolas", "Bitstream Vera Sans Mono", monospace; } -a:link, a:visited { - color: #4183C4; - text-decoration: none; +a:link, +a:visited { + color: #4183c4; + text-decoration: none; } a:hover { - text-decoration: underline; + text-decoration: underline; } -td.list a[href*='tree'], td.list a[href*='blob'] { - padding-left: 20px; - display: block; - float: left; - height: 16px; - line-height: 16px; +td.list a[href*="tree"], +td.list a[href*="blob"] { + padding-left: 20px; + display: block; + float: left; + height: 16px; + line-height: 16px; } -td.list a[href*='tree'] { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABq0lEQVQ4y8WTu4oUQRSGv+rtGVuxhwVFdFEEE2c3d0HYTEMTn8DEVxADQTDUF9DMwMxQMBMx8AEWzRQ3cBHd9TI91+2urjq/QbczY2IygSep4nD+79yqnCRWsYQVbWVACvDh5ZXdrLe15dwyT1TjT/sxFFeB6i+VA2B6+cb7kAI4Jf0LO087zjlQI8Y5Qvnj0sHug321XoC1bk+K9eHk6+s7wPMUgKAS88eqb4+Jfg2SHs7lZBvX2Nh+2EUCDGSAcMnJsx9f7NxfAGqXyDzRd5EJO/pMPT1gcviGTnYOVIN5pAAE8v7dLrKL8xnglFk4ws9Afko9HpH3b5Gd2mwb/lOBmgrSdYhJugDUCenxM6xv3p4HCsP8F0LxCsUhCkMURihOyM7fg0osASTFEpu9a4LjGIUCqwcoDiEUrX+E4hRUQb20RiokC1j9vckUhygU7X3QZh7NAVKYL7YBeMkRUfjVCotF2XGIwnghtrJpMywB5G0QZj9P1JNujuWJ1AHLQadRrACPkuZ0SSSWpeStWgDK6tHek5vbiOs48n++XQHurcf0rFng//6NvwG+iB9/4duaTgAAAABJRU5ErkJgggo=) center left no-repeat; +td.list a[href*="tree"] { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAABq0lEQVQ4y8WTu4oUQRSGv+rtGVuxhwVFdFEEE2c3d0HYTEMTn8DEVxADQTDUF9DMwMxQMBMx8AEWzRQ3cBHd9TI91+2urjq/QbczY2IygSep4nD+79yqnCRWsYQVbWVACvDh5ZXdrLe15dwyT1TjT/sxFFeB6i+VA2B6+cb7kAI4Jf0LO087zjlQI8Y5Qvnj0sHug321XoC1bk+K9eHk6+s7wPMUgKAS88eqb4+Jfg2SHs7lZBvX2Nh+2EUCDGSAcMnJsx9f7NxfAGqXyDzRd5EJO/pMPT1gcviGTnYOVIN5pAAE8v7dLrKL8xnglFk4ws9Afko9HpH3b5Gd2mwb/lOBmgrSdYhJugDUCenxM6xv3p4HCsP8F0LxCsUhCkMURihOyM7fg0osASTFEpu9a4LjGIUCqwcoDiEUrX+E4hRUQb20RiokC1j9vckUhygU7X3QZh7NAVKYL7YBeMkRUfjVCotF2XGIwnghtrJpMywB5G0QZj9P1JNujuWJ1AHLQadRrACPkuZ0SSSWpeStWgDK6tHek5vbiOs48n++XQHurcf0rFng//6NvwG+iB9/4duaTgAAAABJRU5ErkJgggo=) + center left no-repeat; } -td.list a[href*='blob'] { - background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQoFQXBMW5TQRgGwNnHnoE0QbiCjoIooUmTU3AuS1BwIoTSUdJBigg3GCWOg9/++zHTop078wIAsPMrE4SL5/1aIyMjIyMjz/m0tbFECFdrPeaQQw75mz/5nZH7fN7aWILmauSYfznmmIfss8vIUx7zZWsTTXM5vpWvTk5Wq9VHQP/gtgOLa0Qpw940vAQdaG6thpOhlOkG0AEuAVGmEkAH+G4YSikxXQM6wDsAMRFAB/ihDNNUmN4DOsAbBAEAdICfpmmaAt4COoj2GgCASbIkZh1NAACznhQt2itnFgAAlF3u/gMDtJXPzQxoswAAAABJRU5ErkJgggo=) center left no-repeat; +td.list a[href*="blob"] { + background: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQoFQXBMW5TQRgGwNnHnoE0QbiCjoIooUmTU3AuS1BwIoTSUdJBigg3GCWOg9/++zHTop078wIAsPMrE4SL5/1aIyMjIyMjz/m0tbFECFdrPeaQQw75mz/5nZH7fN7aWILmauSYfznmmIfss8vIUx7zZWsTTXM5vpWvTk5Wq9VHQP/gtgOLa0Qpw940vAQdaG6thpOhlOkG0AEuAVGmEkAH+G4YSikxXQM6wDsAMRFAB/ihDNNUmN4DOsAbBAEAdICfpmmaAt4COoj2GgCASbIkZh1NAACznhQt2itnFgAAlF3u/gMDtJXPzQxoswAAAABJRU5ErkJgggo=) + center left no-repeat; } i { - font-style: normal; + font-style: normal; } -td, th { - padding: 5px; +td, +th { + padding: 5px; } .page_nav br { - display: none; + display: none; } #generating_info { - font-size: 10px; - color: #aaa; - text-align: center; + font-size: 10px; + color: #aaa; + text-align: center; } -#generating_time, #generating_cmd { - font-weight: bold; +#generating_time, +#generating_cmd { + font-weight: bold; } /* Page Header ---------------------------------------------------------------------------- */ .page_header { - height: 50px; - line-height: 50px; - position: relative; - padding: 0 27px; - margin-bottom: 20px; - font-size: 20px; - font-family: Helvetica, Arial, Freesans, Clean, sans-serif; - background: #FFFFFF; /* old browsers */ - background: -moz-linear-gradient(top, #FFFFFF 0%, #F5F5F5 100%); /* firefox */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#FFFFFF), color-stop(100%,#F5F5F5)); /* webkit */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#F5F5F5',GradientType=0 ); /* ie */ - background: -o-linear-gradient(top, #FFFFFF 0%, #F5F5F5 100%); - border-bottom: 1px solid #dfdfdf; -} - -.page_header a:link, .page_header a:visited { - color: #4183C4; - text-decoration: none; - padding: 3px; - font-weight: bold; + height: 50px; + line-height: 50px; + position: relative; + padding: 0 27px; + margin-bottom: 20px; + font-size: 20px; + font-family: Helvetica, Arial, Freesans, Clean, sans-serif; + background: #ffffff; /* old browsers */ + background: -moz-linear-gradient(top, #ffffff 0%, #f5f5f5 100%); /* firefox */ + background: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0%, #ffffff), + color-stop(100%, #f5f5f5) + ); /* webkit */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#FFFFFF', endColorstr='#F5F5F5',GradientType=0 ); /* ie */ + background: -o-linear-gradient(top, #ffffff 0%, #f5f5f5 100%); + border-bottom: 1px solid #dfdfdf; +} + +.page_header a:link, +.page_header a:visited { + color: #4183c4; + text-decoration: none; + padding: 3px; + font-weight: bold; } .page_header a:hover { - font-weight: bold; - padding: 3px; - text-decoration: underline; + font-weight: bold; + padding: 3px; + text-decoration: underline; } .page_header a:first-child { - background: transparent; + background: transparent; } .page_header img.logo { - position: relative; - top: 7px; - margin-right: 5px; + position: relative; + top: 7px; + margin-right: 5px; } /* Page Footer ---------------------------------------------------------------------------- */ .page_footer { - position: absolute; - left: 0; - bottom: 0; - width: 100%; - height: 80px; - line-height: 80px; - margin-top: 15px; - background: #f1f1f1; - border-top: 2px solid #ddd; - border-bottom: 1px solid #ddd; + position: absolute; + left: 0; + bottom: 0; + width: 100%; + height: 80px; + line-height: 80px; + margin-top: 15px; + background: #f1f1f1; + border-top: 2px solid #ddd; + border-bottom: 1px solid #ddd; } .page_footer_text { - color: #666; - display: inline; - float: left; - margin-left: 25px; - width: 80%; - overflow: hidden; - white-space: nowrap; - text-overflow: ellipsis; + color: #666; + display: inline; + float: left; + margin-left: 25px; + width: 80%; + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; } a.rss_logo { - float: right; - padding: 3px 1px; - width: 35px; - line-height: 10px; - border: 1px solid; - border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e; - color: #ffffff; - background-color: #ff6600; - font-weight: bold; - font-family: sans-serif; - font-size: 80%; - text-align: center; - text-decoration: none; - margin-top: 30px; - margin-left: 5px; + float: right; + padding: 3px 1px; + width: 35px; + line-height: 10px; + border: 1px solid; + border-color: #fcc7a5 #7d3302 #3e1a01 #ff954e; + color: #ffffff; + background-color: #ff6600; + font-weight: bold; + font-family: sans-serif; + font-size: 80%; + text-align: center; + text-decoration: none; + margin-top: 30px; + margin-left: 5px; } a.rss_logo:hover { - background-color: #ee5500; + background-color: #ee5500; } .rss_logo { - margin-right: 25px; - background: yellow; + margin-right: 25px; + background: yellow; } .rss_logo:last-child { - margin-right: 5px; + margin-right: 5px; } /* Index include ---------------------------------------------------------------------------- */ .index_include { - width: 95%; - margin: 0 auto 15px; - background: -moz-linear-gradient(center top , #FFFFFF 0%, #F5F5F5 100%) repeat scroll 0 0 transparent; - border: 1px solid #DFDFDF; - padding: 8px; - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; + width: 95%; + margin: 0 auto 15px; + background: -moz-linear-gradient(center top, #ffffff 0%, #f5f5f5 100%) repeat scroll 0 0 + transparent; + border: 1px solid #dfdfdf; + padding: 8px; + -webkit-box-sizing: border-box; + -moz-box-sizing: border-box; + box-sizing: border-box; } /* Elements @@ -231,328 +328,346 @@ a.rss_logo:hover { .tree, .commit_search, .history { - width: 95%; - margin: 0 auto 15px auto; - border: 1px solid #d8d8d8; - -moz-box-shadow: 0 0 3px rgba(0,0,0,0.2); - -webkit-box-shadow: 0 0 3px rgba(0,0,0,0.2); - box-shadow: 0 0 3px rgba(0,0,0,0.2); + width: 95%; + margin: 0 auto 15px auto; + border: 1px solid #d8d8d8; + -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); + -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); + box-shadow: 0 0 3px rgba(0, 0, 0, 0.2); } .project_list th, .shortlog th, .tree th, .commit_search th { - color: #afafaf; - font-weight: normal; + color: #afafaf; + font-weight: normal; } .project_list th { - font-weight: bold; + font-weight: bold; } .project_list tr, .shortlog tr, .tree tr, .commit_search tr { - background: #eaeaea; - height: 2.5em; - text-align: left; - color: #545454; -} - -.project_list tr.dark, .project_list tr.light, -.shortlog tr.dark, .shortlog tr.light, -.tree tr.dark, .tree tr.light, -.commit_search tr.dark, .commit_search tr.light, -.history tr.dark, .history tr.light, -.heads tr.dark, .heads tr.light { - background: #F9F9F9; /* old browsers */ - background: -moz-linear-gradient(top, #F9F9F9 0%, #EFEFEF 100%); /* firefox */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#F9F9F9), color-stop(100%,#EFEFEF)); /* webkit */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F9F9F9', endColorstr='#EFEFEF',GradientType=0 ); /* ie */ - background: -o-linear-gradient(top, #F9F9F9 0%, #EFEFEF 100%); - height: 2.5em; - border-bottom: 1px solid #e1e1e1; + background: #eaeaea; + height: 2.5em; + text-align: left; + color: #545454; +} + +.project_list tr.dark, +.project_list tr.light, +.shortlog tr.dark, +.shortlog tr.light, +.tree tr.dark, +.tree tr.light, +.commit_search tr.dark, +.commit_search tr.light, +.history tr.dark, +.history tr.light, +.heads tr.dark, +.heads tr.light { + background: #f9f9f9; /* old browsers */ + background: -moz-linear-gradient(top, #f9f9f9 0%, #efefef 100%); /* firefox */ + background: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0%, #f9f9f9), + color-stop(100%, #efefef) + ); /* webkit */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#F9F9F9', endColorstr='#EFEFEF',GradientType=0 ); /* ie */ + background: -o-linear-gradient(top, #f9f9f9 0%, #efefef 100%); + height: 2.5em; + border-bottom: 1px solid #e1e1e1; } th .header { - background: transparent; - border: 0; - padding: 0; - font-weight: bold; + background: transparent; + border: 0; + padding: 0; + font-weight: bold; } .tree { - width: 100%; - margin: 0; + width: 100%; + margin: 0; } .projsearch { - position: absolute; - right: 4%; - top: 15px; + position: absolute; + right: 4%; + top: 15px; } .projsearch a { - display: none; + display: none; } .commit_search { - background: #eaeaea; + background: #eaeaea; } .page_nav, .list_head, .page_path, .search { - width: 94%; - background: #eaeaea; - color: #545454; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; + width: 94%; + background: #eaeaea; + color: #545454; + border: 1px solid #d8d8d8; + padding: 5px; + margin: 0 auto 15px auto; } .history { - background: #eaeaea; + background: #eaeaea; } .title { - margin: 0 auto 15px auto; - padding: 5px; - width: 95%; + margin: 0 auto 15px auto; + padding: 5px; + width: 95%; } .readme { - background: #eaf2f5; - border: 1px solid #bedce7; - -moz-box-sizing: border-box; - -webkit-box-sizing: border-box; - box-sizing: border-box; - margin: 0 auto 15px auto; - padding: 15px; - width: 95%; + background: #eaf2f5; + border: 1px solid #bedce7; + -moz-box-sizing: border-box; + -webkit-box-sizing: border-box; + box-sizing: border-box; + margin: 0 auto 15px auto; + padding: 15px; + width: 95%; } .readme h1 { - display: block; - font-size: 2em; - font-weight: bold; - margin-bottom: 0.67em; - margin-top: 0; + display: block; + font-size: 2em; + font-weight: bold; + margin-bottom: 0.67em; + margin-top: 0; } .readme h2 { - font-size: 1.5em; - font-weight: bold; - margin-bottom: 0.83em; + font-size: 1.5em; + font-weight: bold; + margin-bottom: 0.83em; } - .readme h3 { - font-size: 1.17em; - font-weight: bold; - margin-bottom: 1em; + font-size: 1.17em; + font-weight: bold; + margin-bottom: 1em; } .readme p { - margin-bottom: 1em; + margin-bottom: 1em; } .readme ul { - list-style: disc; - margin-bottom: 1em; - margin-left: 1.5em; + list-style: disc; + margin-bottom: 1em; + margin-left: 1.5em; } .readme ul ul { - margin-bottom: 0; + margin-bottom: 0; } .readme ol { - list-style: decimal; - margin-bottom: 1em; - margin-left: 1.5em; + list-style: decimal; + margin-bottom: 1em; + margin-left: 1.5em; } .readme ol ol { - margin-bottom: 0; + margin-bottom: 0; } .readme pre { - font-family: monospace; - margin: 1em 0; - white-space: pre; + font-family: monospace; + margin: 1em 0; + white-space: pre; } -.readme tt, .readme code, .readme kbd, .readme samp { - font-family: monospace; +.readme tt, +.readme code, +.readme kbd, +.readme samp { + font-family: monospace; } .readme blockquote { - margin: 1em; + margin: 1em; } .projects_list, .tags { - width: 95%; - background: #f0f0f0; - color: #545454; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; + width: 95%; + background: #f0f0f0; + color: #545454; + border: 1px solid #d8d8d8; + padding: 5px; + margin: 0 auto 15px auto; } .heads { - width: 95%; - color: #545454; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; + width: 95%; + color: #545454; + border: 1px solid #d8d8d8; + padding: 5px; + margin: 0 auto 15px auto; } .header { - width: 94%; - margin: 0 auto 15px auto; - background: #eaf2f5; - border: 1px solid #bedce7; - padding: 5px; + width: 94%; + margin: 0 auto 15px auto; + background: #eaf2f5; + border: 1px solid #bedce7; + padding: 5px; } .header .age { - float: left; - color: #000; - font-weight: bold; - width: 10em; + float: left; + color: #000; + font-weight: bold; + width: 10em; } .title_text { - width: 94%; - background: #eaf2f5; - border: 1px solid #bedce7; - padding: 5px; - margin: 0 auto 0 auto; + width: 94%; + background: #eaf2f5; + border: 1px solid #bedce7; + padding: 5px; + margin: 0 auto 0 auto; } .log_body { - width: 94%; - background: #eaf2f5; - border: 1px solid #bedce7; - border-top: 0; - padding: 5px; - margin: 0 auto 15px auto; + width: 94%; + background: #eaf2f5; + border: 1px solid #bedce7; + border-top: 0; + padding: 5px; + margin: 0 auto 15px auto; } .page_body { - line-height: 1.4em; - width: 94%; - background: #f8f8f8; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 15px auto 15px auto; + line-height: 1.4em; + width: 94%; + background: #f8f8f8; + border: 1px solid #d8d8d8; + padding: 5px; + margin: 15px auto 15px auto; } .diff_tree { - width: 95%; - background: #f0f0f0; - border: 1px solid #d8d8d8; - padding: 5px; - margin: 0 auto 15px auto; + width: 95%; + background: #f0f0f0; + border: 1px solid #d8d8d8; + padding: 5px; + margin: 0 auto 15px auto; } .page_body > .list_head { - width: 98.5%; + width: 98.5%; } .page_body > .diff_tree { - width: 99.5%; + width: 99.5%; } .patch > .header { - width: 99%; + width: 99%; } .author .avatar, .author_date .avatar { - position: relative; - top: 3px; + position: relative; + top: 3px; } .object_header .avatar { - border: 1px solid #D8D8D8; - float: right; + border: 1px solid #d8d8d8; + float: right; } .object_header td, .object_header th { - vertical-align: top; + vertical-align: top; } /* Refs ---------------------------------------------------------------------------- */ span.refs span { - color: #707070; - display: inline-block; - margin: 0; - background-color: #eee; - border: 1px solid #ccc; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; + color: #707070; + display: inline-block; + margin: 0; + background-color: #eee; + border: 1px solid #ccc; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; } span.refs span.ref { - color: #707070; - display: inline-block; - margin: 0; - background-color: #c4c4ff; - border: 1px solid #7878ff; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUnpolg7AAAAHJQTFRFAAAAVVWqZmbMVVXVYGDgbW3td3fuc3PzdHT0cHD1d3f6dHT6dnb7dHT7dnb8dnb8dnb9d3f9dnb+eHj+d3f+eHj+d3f+d3f+d3f+eHj+d3f+eHj+d3f+eHj+d3f+d3f+eHj+d3f+d3f+d3f+eHj/////V9oQhQAAACR0Uk5TAAIEBQcNDhMVGCotNTZAT217i5CgobvExtjZ4eLr7vP09ff7uqQ6cgAAAAFiS0dEJcMByQ8AAABUSURBVBjTpc43AoAwDENRh95bgNBM1f3PyOpslD++RSJ61YgH5M2IbIkn4GocSR1MZVBL4t2n4FgkbaxI8Sqph041WknZCWAIrcmEUbpf3lNe0N9u59YFYHnZ78gAAAAASUVORK5CYII=); - background-repeat: no-repeat; - padding-left: 18px; + color: #707070; + display: inline-block; + margin: 0; + background-color: #c4c4ff; + border: 1px solid #7878ff; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUnpolg7AAAAHJQTFRFAAAAVVWqZmbMVVXVYGDgbW3td3fuc3PzdHT0cHD1d3f6dHT6dnb7dHT7dnb8dnb8dnb9d3f9dnb+eHj+d3f+eHj+d3f+d3f+d3f+eHj+d3f+eHj+d3f+eHj+d3f+d3f+eHj+d3f+d3f+d3f+eHj/////V9oQhQAAACR0Uk5TAAIEBQcNDhMVGCotNTZAT217i5CgobvExtjZ4eLr7vP09ff7uqQ6cgAAAAFiS0dEJcMByQ8AAABUSURBVBjTpc43AoAwDENRh95bgNBM1f3PyOpslD++RSJ61YgH5M2IbIkn4GocSR1MZVBL4t2n4FgkbaxI8Sqph041WknZCWAIrcmEUbpf3lNe0N9u59YFYHnZ78gAAAAASUVORK5CYII=); + background-repeat: no-repeat; + padding-left: 18px; } span.refs span.tag { - color: #707070; - display: inline-block; - margin: 0; - background-color: #ffffab; - border: 1px solid #d9d93b; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUZZ+h9RwAAAGZQTFRFAAAAtrYkwMBAwMBAx8c4yso11NQ71NQ51dU52Ng71tY519c719c719c62Ng719c719c62Ng72dk62Ng62Ng72Ng72dk62Ng72Ng62dk62dk72dk62Ng62dk72Ng72Ng72dk7////ou/AnQAAACB0Uk5TAAYHCxESLjRCWWlqa4uNkpissbrO19jc3ufs8vf6/f7atAU2AAAAAWJLR0QhxGwNFgAAAF1JREFUGFeNy0cOgCAABVGw94rY5d//lC7omhhn+ZIh5Gf1xPk0Zi5dAABROIQjSU/fsAXhDkCUljAv8jW2wlQpaixpo4Nj+dtatVpjkSJjLNaizRVpvhBCu/4h391jzw1lU12Z7wAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - padding-left: 18px; + color: #707070; + display: inline-block; + margin: 0; + background-color: #ffffab; + border: 1px solid #d9d93b; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAMAAABhEH5lAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSUZZ+h9RwAAAGZQTFRFAAAAtrYkwMBAwMBAx8c4yso11NQ71NQ51dU52Ng71tY519c719c719c62Ng719c719c62Ng72dk62Ng62Ng72Ng72dk62Ng72Ng62dk62dk72dk62Ng62dk72Ng72Ng72dk7////ou/AnQAAACB0Uk5TAAYHCxESLjRCWWlqa4uNkpissbrO19jc3ufs8vf6/f7atAU2AAAAAWJLR0QhxGwNFgAAAF1JREFUGFeNy0cOgCAABVGw94rY5d//lC7omhhn+ZIh5Gf1xPk0Zi5dAABROIQjSU/fsAXhDkCUljAv8jW2wlQpaixpo4Nj+dtatVpjkSJjLNaizRVpvhBCu/4h391jzw1lU12Z7wAAAABJRU5ErkJggg==); + background-repeat: no-repeat; + padding-left: 18px; } span.refs span.head { - color: #707070; - display: inline-block; - margin: 0; - background-color: #c4ffc4; - border: 1px solid #78ff78; - border-radius: 3px; - height: 18px; - padding: 0 6px; - text-overflow: ellipsis; - background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSYDsafX/gAAAUpJREFUOMvVkjFLA0EQhd/s7l06MSCihbV/wC5/QBDEIFYWprRIIQQJFqKFQi4kUbBQsFSwtrUQLQULUTBFLCzVIgimCXe7z0q5yIWcqfRVwzDzMTNvgL8mSUqWw3JOtFQJdsIwLDYyjdYgkEmkazl2oVtQWk36nn8AYBYASmFpxmizGtnoqO7Vb+M9KglEkASdpWU872nvVCiPRpuTnz2JIHGyqX3d0kZfR1G0Ht+g/do+FIhOBbLW3n/FNb/28D0puZ+dyL44ur1UoH5yzt2JyIj6UGdDgwrPhYzSagNEszJaeU/lWlylbmnaeGZZICsAppxzi6nt73HK85oQCMknOuarpno+FIjglVjZDXaCS2yDv3rIHlCb88FY0BlUl3hs7ektkhckb5DFWhoz+n12zr7ZPLpYUqLm0oBMn8NUzLhpAgjpWMS/1CcSJ3ykD7Rk1QAAAABJRU5ErkJggg==); - background-repeat: no-repeat; - padding-left: 18px; + color: #707070; + display: inline-block; + margin: 0; + background-color: #c4ffc4; + border: 1px solid #78ff78; + border-radius: 3px; + height: 18px; + padding: 0 6px; + text-overflow: ellipsis; + background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAYAAABWzo5XAAAABmJLR0QA/wD/AP+gvaeTAAAACXBIWXMAAAsTAAALEwEAmpwYAAAAB3RJTUUH3gIKFSYDsafX/gAAAUpJREFUOMvVkjFLA0EQhd/s7l06MSCihbV/wC5/QBDEIFYWprRIIQQJFqKFQi4kUbBQsFSwtrUQLQULUTBFLCzVIgimCXe7z0q5yIWcqfRVwzDzMTNvgL8mSUqWw3JOtFQJdsIwLDYyjdYgkEmkazl2oVtQWk36nn8AYBYASmFpxmizGtnoqO7Vb+M9KglEkASdpWU872nvVCiPRpuTnz2JIHGyqX3d0kZfR1G0Ht+g/do+FIhOBbLW3n/FNb/28D0puZ+dyL44ur1UoH5yzt2JyIj6UGdDgwrPhYzSagNEszJaeU/lWlylbmnaeGZZICsAppxzi6nt73HK85oQCMknOuarpno+FIjglVjZDXaCS2yDv3rIHlCb88FY0BlUl3hs7ektkhckb5DFWhoz+n12zr7ZPLpYUqLm0oBMn8NUzLhpAgjpWMS/1CcSJ3ykD7Rk1QAAAABJRU5ErkJggg==); + background-repeat: no-repeat; + padding-left: 18px; } span.refs a { - color: #4e4e4e; - font: 11px "Bitstream Vera Sans Mono", "DejaVu Sans Mono", Monaco, monospace; - line-height: 18px; + color: #4e4e4e; + font: + 11px "Bitstream Vera Sans Mono", + "DejaVu Sans Mono", + Monaco, + monospace; + line-height: 18px; } /* Diffs @@ -560,89 +675,95 @@ span.refs a { div.diff.to_file a.path, div.diff.to_file { - color: #007000; + color: #007000; } div.diff.from_file a.path, div.diff.from_file { - color: #aa0000; + color: #aa0000; } .patch .header { - margin: 0; + margin: 0; } .patchset { - overflow-x: auto; - overflow-y: hidden; + overflow-x: auto; + overflow-y: hidden; } .chunk_header { - background: #eaf2f5; - color: #999; + background: #eaf2f5; + color: #999; } .rem { - background: #ffdddd; + background: #ffdddd; } .rem .marked { - background: #ffaaaa; + background: #ffaaaa; } .add { - background: #ddffdd; + background: #ddffdd; } .add .marked { - background: #7dff7d; + background: #7dff7d; } .extended_header { - width: 99.5%; + width: 99.5%; } div.chunk_block { - overflow: hidden; + overflow: hidden; } div.chunk_block div.old { - float: left; - width: 50%; - overflow: hidden; - border-right: 5px solid #EAF2F5; + float: left; + width: 50%; + overflow: hidden; + border-right: 5px solid #eaf2f5; } div.chunk_block.rem, div.chunk_block.add { - background: transparent; + background: transparent; } div.chunk_block div.old .add, div.chunk_block div.old .rem { - padding-right: 3px; + padding-right: 3px; } div.chunk_block div.new .add, div.chunk_block div.new .rem { - padding-left: 3px; + padding-left: 3px; } div.chunk_block div.new { - margin-left: 50%; - width: 50%; - border-left: 5px solid #EAF2F5; + margin-left: 50%; + width: 50%; + border-left: 5px solid #eaf2f5; } /* Category ---------------------------------------------------------------------------- */ td.category { - background: #E6F1F6; /* old browsers */ - background: -moz-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); /* firefox */ - background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#C8D8E7), color-stop(100%,#E6F1F3)); /* webkit */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C8D8E7', endColorstr='#E6F1F3',GradientType=0 ); /* ie */ - background: -o-linear-gradient(top, #C8D8E7 0%, #E6F1F3 100%); - font-weight: bold; - border-bottom: 1px solid #D1D1D1; - border-top: 1px solid #D1D1D1; + background: #e6f1f6; /* old browsers */ + background: -moz-linear-gradient(top, #c8d8e7 0%, #e6f1f3 100%); /* firefox */ + background: -webkit-gradient( + linear, + left top, + left bottom, + color-stop(0%, #c8d8e7), + color-stop(100%, #e6f1f3) + ); /* webkit */ + filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#C8D8E7', endColorstr='#E6F1F3',GradientType=0 ); /* ie */ + background: -o-linear-gradient(top, #c8d8e7 0%, #e6f1f3 100%); + font-weight: bold; + border-bottom: 1px solid #d1d1d1; + border-top: 1px solid #d1d1d1; } /* Age @@ -650,115 +771,151 @@ td.category { /* noage: "No commits" */ .project_list td.noage { - color: #cdcdcd; + color: #cdcdcd; } /* age2: 60*60*24*2 <= age */ -.project_list td.age2, .blame td.age2 { - color: #545454; +.project_list td.age2, +.blame td.age2 { + color: #545454; } /* age1: 60*60*2 <= age < 60*60*24*2 */ .project_list td.age1 { - color: #009900; + color: #009900; } /* age0: age < 60*60*2 */ .project_list td.age0 { - color: #009900; - font-weight: bold; + color: #009900; + font-weight: bold; } /* File status ---------------------------------------------------------------------------- */ .diff_tree span.file_status.new { - color: #008000; + color: #008000; } table.diff_tree span.file_status.deleted { - color: #c00000; + color: #c00000; } table.diff_tree span.file_status.moved, table.diff_tree span.file_status.mode_chnge { - color: #545454; + color: #545454; } table.diff_tree span.file_status.copied { - color: #70a070; + color: #70a070; } span.cntrl { - border: dashed #aaaaaa; - border-width: 1px; - padding: 0px 2px 0px 2px; - margin: 0px 2px 0px 2px; + border: dashed #aaaaaa; + border-width: 1px; + padding: 0px 2px 0px 2px; + margin: 0px 2px 0px 2px; } span.match { - background: #aaffaa; - color: #000; + background: #aaffaa; + color: #000; } td.error { - color: red; - background: yellow; + color: red; + background: yellow; } /* blob view */ -td.pre, div.pre, div.diff { - white-space: pre-wrap; +td.pre, +div.pre, +div.diff { + white-space: pre-wrap; } /* JavaScript-based timezone manipulation */ -.popup { /* timezone selection UI */ - position: absolute; - /* "top: 0; right: 0;" would be better, if not for bugs in browsers */ - top: 0; left: 0; - border: 1px solid #d8d8d8; - padding: 2px; - background-color: #f0f0f0; - font-style: normal; - color: #545454; - cursor: auto; -} - -.close-button { /* close timezone selection UI without selecting */ - /* float doesn't work within absolutely positioned container, +.popup { + /* timezone selection UI */ + position: absolute; + /* "top: 0; right: 0;" would be better, if not for bugs in browsers */ + top: 0; + left: 0; + border: 1px solid #d8d8d8; + padding: 2px; + background-color: #f0f0f0; + font-style: normal; + color: #545454; + cursor: auto; +} + +.close-button { + /* close timezone selection UI without selecting */ + /* float doesn't work within absolutely positioned container, * if width of container is not set explicitly */ - /* float: right; */ - position: absolute; - top: 0px; right: 0px; - border: 1px solid #ffaaaa; - margin: 1px 1px 1px 1px; - padding-bottom: 2px; - width: 12px; - height: 10px; - font-size: 9px; - font-weight: bold; - text-align: center; - background-color: #ffdddd; - cursor: pointer; + /* float: right; */ + position: absolute; + top: 0px; + right: 0px; + border: 1px solid #ffaaaa; + margin: 1px 1px 1px 1px; + padding-bottom: 2px; + width: 12px; + height: 10px; + font-size: 9px; + font-weight: bold; + text-align: center; + background-color: #ffdddd; + cursor: pointer; } /* Style definition generated by highlight 2.4.5, http://www.andre-simon.de/ */ /* Highlighting theme definition: */ -.num { color:#6ecf36; } -.esc { color:#ff00ff; } -.str { color:#ff00d3; background-color: #edc9ec } -.dstr { color:#818100; } -.slc { color:#838183; font-style:italic; } -.com { color:#838183; font-style:italic; } -.dir { color:#008200; } -.sym { color:#000000; } -.line { color:#555555; } -.kwa { color:#666666; font-weight:bold; } -.kwb { color:#6b3099; } -.kwc { color:#d4663d; } -.kwd { color:#2928ff; } - +.num { + color: #6ecf36; +} +.esc { + color: #ff00ff; +} +.str { + color: #ff00d3; + background-color: #edc9ec; +} +.dstr { + color: #818100; +} +.slc { + color: #838183; + font-style: italic; +} +.com { + color: #838183; + font-style: italic; +} +.dir { + color: #008200; +} +.sym { + color: #000000; +} +.line { + color: #555555; +} +.kwa { + color: #666666; + font-weight: bold; +} +.kwb { + color: #6b3099; +} +.kwc { + color: #d4663d; +} +.kwd { + color: #2928ff; +} -- 2.52.0