Send patches - preferably formatted by git format-patch - to patches at archlinux32 dot org.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2024-09-14 13:18:14 +0200
committerAndreas Baumann <mail@andreasbaumann.cc>2024-09-14 13:18:14 +0200
commite9a7c61175caf1e7fca688fe69443b509335a2af (patch)
tree31bf3798fdf650ffd1aa46ff7306897da436ed02
parentc6b8602075156e9997d0504fc861f11cd60ab613 (diff)
generating first statistics page with M4
-rwxr-xr-xbin/check9
-rwxr-xr-xbin/genhtml15
-rwxr-xr-xbin/setup8
-rwxr-xr-xbin/update4
-rw-r--r--conf/default.conf3
-rw-r--r--html/static/archnav32.pngbin0 -> 5508 bytes
-rw-r--r--html/static/archweb.css876
-rw-r--r--html/static/favicon.icobin0 -> 501 bytes
-rw-r--r--templates/footer.m431
-rw-r--r--templates/header.m426
-rw-r--r--templates/summary.m417
-rw-r--r--templates/table.m4 (renamed from templates/main.m4)9
12 files changed, 990 insertions, 8 deletions
diff --git a/bin/check b/bin/check
index 43a047c..f711bc6 100755
--- a/bin/check
+++ b/bin/check
@@ -21,15 +21,18 @@ nof_checked_out_packages=`find "${packages_dir}" -type f -name PKGBUILD | wc -l`
echo "${nof_packages} packages in state repo"
echo "${nof_checked_out_packages} packages are checked out"
-exit 0
+> "${data_dir}/stats"
+echo "packages_state\t${nof_packages}" >> "${data_dir}/stats"
+echo "packages_repos\t${nof_checked_out_packages}" >> "${data_dir}/stats"
# find duplicate entries in state repo
+> "${data_dir}/duplicates"
for duplicate in `find "${state_dir}"/{core,extra}-{any,x86_64} -type f | \
rev | cut -f 1 -d / | rev | sort | uniq -D | uniq`; do
for packages in `ls ${state_dir}/{core,extra}-{any,x86_64}/$duplicate 2>/dev/null`; do
for instance in `echo $packages | rev | cut -f 1,2 -d / | rev`; do
- echo -n "${instance} "
- cat "${state_dir}/$instance"
+ echo -n "${instance} " >> "${data_dir}/duplicates"
+ cat "${state_dir}/$instance" >> "${data_dir}/duplicates"
done
done
done
diff --git a/bin/genhtml b/bin/genhtml
new file mode 100755
index 0000000..8593727
--- /dev/null
+++ b/bin/genhtml
@@ -0,0 +1,15 @@
+#!/bin/oksh
+
+BASE="${0%/*}/.."
+. "${BASE}/conf/default.conf"
+
+if test ! -d "${html_dir}"; then
+ echo "no html output diretory found.. call setup first."
+ exit 1
+fi
+
+FILES="summary"
+
+for file in $FILES; do
+ m4 -I "${templates_dir}" -P < "${templates_dir}/${file}.m4" > "${html_dir}/${file}.html"
+done
diff --git a/bin/setup b/bin/setup
index f1e252c..150e168 100755
--- a/bin/setup
+++ b/bin/setup
@@ -22,6 +22,7 @@ else
echo "package directory exists"
fi
+
for repo in core extra; do
for arch in any x86_64; do
if test ! -d "${packages_dir}/${repo}-${arch}"; then
@@ -33,4 +34,11 @@ for repo in core extra; do
done
done
+if test ! -d "${data_dir}"; then
+ echo "creating directory for storing data.."
+ mkdir -p "${data_dir}"
+else
+ echo "data directory exists"
+fi
+
# TODO: AUR directory
diff --git a/bin/update b/bin/update
index 31333dc..7be65a1 100755
--- a/bin/update
+++ b/bin/update
@@ -13,8 +13,12 @@ if test ! -d "${packages_dir}"; then
exit 1
fi
+echo "Updating main state git repo.."
+
git -C "${state_dir}" pull
+echo "Checking statistics.."
+
find "${state_dir}"/{core,extra}-{any,x86_64} -type f > /tmp/update_packages.$$
nof_packages=`cat /tmp/update_packages.$$ | wc -l`
diff --git a/conf/default.conf b/conf/default.conf
index bd1be9b..c8dd762 100644
--- a/conf/default.conf
+++ b/conf/default.conf
@@ -10,3 +10,6 @@ fi
script_dir="${base_dir}/scripts"
state_dir="${base_dir}/state"
packages_dir="${base_dir}/packages"
+data_dir="${base_dir}/data"
+templates_dir="${base_dir}/templates"
+html_dir="${base_dir}/html"
diff --git a/html/static/archnav32.png b/html/static/archnav32.png
new file mode 100644
index 0000000..a7fd0d8
--- /dev/null
+++ b/html/static/archnav32.png
Binary files differ
diff --git a/html/static/archweb.css b/html/static/archweb.css
new file mode 100644
index 0000000..d717851
--- /dev/null
+++ b/html/static/archweb.css
@@ -0,0 +1,876 @@
+#archnavbar{
+ height:40px!important;
+ padding:10px 15px!important;
+ background:#333!important;
+ border-bottom:5px #08c solid!important
+}
+#archnavbarlogo{
+ float:left!important;
+ margin:0!important;
+ padding:0!important;
+ height:40px!important;
+ width:230px!important;
+ background:url(archnav32.png) no-repeat!important
+}
+#archnavbarlogo h1{
+ margin:0!important;
+ padding:0!important;
+ text-indent:-9999px!important
+}
+#archnavbarlogo a{
+ display:block!important;
+ height:40px!important;
+ width:230px!important
+}
+#archnavbarlist{
+ display:inline!important;
+ float:right!important;
+ list-style:none!important;
+ margin:0!important;
+ padding:0!important
+}
+#archnavbarlist li{
+ float:left!important;
+ font-size:14px!important;
+ font-family:sans-serif!important;
+ line-height:45px!important;
+ padding-right:15px!important;
+ padding-left:15px!important
+}
+#archnavbarlist li a{
+ color:#999;
+ font-weight:bold!important;
+ text-decoration:none!important
+}
+#archnavbarlist li a:hover{
+ color:white!important;
+ text-decoration:underline!important
+}
+*{
+ margin:0;
+ padding:0;
+ line-height:1.4
+}
+body{
+ min-width:650px;
+ background:#f6f9fc;
+ color:#222;
+ font:normal 100% sans-serif;
+ text-align:center
+}
+p{
+ margin:.33em 0 1em
+}
+ol, ul{
+ margin-bottom:1em;
+ padding-left:2em
+}
+ul{
+ list-style:square
+}
+code{
+ font:1.2em monospace;
+ background:#ffd;
+ padding:.15em .25em
+}
+pre{
+ font:1.2em monospace;
+ border:1px solid #bdb;
+ background:#dfd;
+ padding:.5em;
+ margin:1em
+}
+pre code{
+ display:block;
+ background:none;
+ overflow:auto
+}
+blockquote{
+ margin:1.5em 2em
+}
+input{
+ vertical-align:middle
+}
+select[multiple]{
+ padding:1px 0
+}
+select[multiple] option{
+ padding:0 .5em 0 .3em
+}
+input[type=submit]{
+ padding:0 .6em
+}
+.clear{
+ clear:both
+}
+.hide{
+ display:none
+}
+hr{
+ border:none;
+ border-top:1px solid #888
+}
+img{
+ border:0
+}
+#content{
+ font-size:.812em
+}
+a{
+ text-decoration:none
+}
+a:link, th a:visited{
+ color:#07b
+}
+ a:visited{
+ color:#666
+}
+ a:hover{
+ text-decoration:underline;
+ color:#666
+}
+ a:active{
+ color:#e90
+}
+ a.headerlink{
+ visibility:hidden;
+ padding-left:.5em
+}
+ h3:hover>a.headerlink{
+ visibility:visible
+}
+ h2{
+ font-size:1.5em;
+ margin-bottom:.5em;
+ border-bottom:1px solid #888
+}
+ h3{
+ font-size:1.25em;
+ margin-top:.5em
+}
+ h4{
+ font-size:1.15em;
+ margin-top:1em
+}
+ h5{
+ font-size:1em;
+ margin-top:1em
+}
+ #content{
+ width:95%;
+ margin:0 auto;
+ text-align:left
+}
+ #content-left-wrapper{
+ float:left;
+ width:100%
+}
+ #content-left{
+ margin:0 340px 0 0
+}
+ #content-right{
+ float:left;
+ width:300px;
+ margin-left:-300px
+}
+ div.box{
+ margin-bottom:1.5em;
+ padding:.65em;
+ background:#ecf2f5;
+ border:1px solid #bcd
+}
+ #footer{
+ clear:both;
+ margin:2em 0 1em
+}
+ #footer p{
+ margin:0;
+ text-align:center;
+ font-size:.85em
+}
+ div.center, table.center, img.center{
+ width:auto;
+ margin-left:auto;
+ margin-right:auto
+}
+ p.center, td.center, th.center{
+ text-align:center
+}
+ table{
+ width:100%;
+ border-collapse:collapse
+}
+ table .wrap{
+ white-space:normal
+}
+ th, td{
+ white-space:nowrap;
+ text-align:left
+}
+ th{
+ vertical-align:middle;
+ font-weight:bold
+}
+ td{
+ vertical-align:top
+}
+ table.pretty1{
+ width:auto;
+ margin-top:.25em;
+ margin-bottom:.5em;
+ border-collapse:collapse;
+ border:1px solid #bcd
+}
+ .pretty1 th{
+ padding:.35em;
+ background:#e4eeff;
+ border:1px solid #bcd
+}
+ .pretty1 td{
+ padding:.35em;
+ border:1px dotted #bcd
+}
+ table.pretty2{
+ width:auto;
+ margin-top:.25em;
+ margin-bottom:.5em;
+ border-collapse:collapse;
+ border:1px solid #bbb
+}
+ .pretty2 th{
+ padding:.35em;
+ background:#eee;
+ border:1px solid #bbb
+}
+ .pretty2 td{
+ padding:.35em;
+ border:1px dotted #bbb
+}
+ table.compact{
+ width:auto
+}
+ .compact td{
+ padding:.25em 0 .25em 1.5em
+}
+ dl{
+ clear:both
+}
+ dl dt, dl dd{
+ margin-bottom:4px;
+ padding:8px 0 4px;
+ font-weight:bold;
+ border-top:1px dotted #bbb
+}
+ dl dt{
+ color:#333;
+ float:left;
+ padding-right:15px
+}
+ form p{
+ margin:.5em 0
+}
+ fieldset{
+ border:0
+}
+ label{
+ width:12em;
+ vertical-align:top;
+ display:inline-block;
+ font-weight:bold
+}
+ input[type=text], input[type=password], textarea{
+ padding:.10em
+}
+ form.general-form label, form.general-form .form-help{
+ width:10em;
+ vertical-align:top;
+ display:inline-block
+}
+ form.general-form input[type=text], form.general-form textarea{
+ width:45%
+}
+ #archdev-navbar{
+ margin:1.5em 0
+}
+ #archdev-navbar ul{
+ list-style:none;
+ margin:-0.5em 0;
+ padding:0
+}
+ #archdev-navbar li{
+ display:inline;
+ margin:0;
+ padding:0;
+ font-size:.9em
+}
+ #archdev-navbar li a{
+ padding:0 .5em;
+ color:#07b
+}
+ #sys-message{
+ width:35em;
+ text-align:center;
+ margin:1em auto;
+ padding:.5em;
+ background:#fff;
+ border:1px solid #f00
+}
+ #sys-message p{
+ margin:0
+}
+ ul.errorlist{
+ color:red
+}
+ form ul.errorlist{
+ margin:.5em 0
+}
+ table th.tablesorter-header{
+ padding-right:20px;
+ background-image:url(data:image/gif;
+ base64, R0lGODlhFQAJAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAkAAAIXjI+AywnaYnhUMoqt3gZXPmVg94yJVQAAOw==);
+ background-repeat:no-repeat;
+ background-position:center right;
+ cursor:pointer
+}
+ table thead th.tablesorter-headerAsc{
+ background-color:#e4eeff;
+ background-image:url(data:image/gif;
+ base64, R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjI8Bya2wnINUMopZAQA7)
+}
+ table thead th.tablesorter-headerDesc{
+ background-color:#e4eeff;
+ background-image:url(data:image/gif;
+ base64, R0lGODlhFQAEAIAAACMtMP///yH5BAEAAAEALAAAAAAVAAQAAAINjB+gC+jP2ptn0WskLQA7)
+}
+ table thead th.sorter-false{
+ background-image:none;
+ cursor:default
+}
+ #intro p.readmore{
+ margin:-0.5em 0 0 0;
+ font-size:.9em;
+ text-align:right
+}
+ #news{
+ margin-top:1.5em
+}
+ #news h3{
+ float:left;
+ padding-bottom:.5em
+}
+ #news div{
+ margin-bottom:1em
+}
+ #news div p{
+ margin-bottom:.5em
+}
+ #news .more{
+ font-weight:normal
+}
+ #news .rss-icon{
+ float:right;
+ margin-top:1em
+}
+ #news h4{
+ clear:both;
+ font-size:1em;
+ margin-top:1.5em;
+ border-bottom:1px dotted #bbb
+}
+ #news .timestamp{
+ float:right;
+ font-size:.85em;
+ margin:-1.8em .5em 0 0
+}
+ #news h3 a{
+ display:block;
+ background:#1794D1;
+ font-size:15px;
+ padding:2px 10px;
+ color:white
+}
+ #news a:active{
+ color:white
+}
+ h3 span.arrow{
+ display:block;
+ width:0;
+ height:0;
+ border-left:6px solid transparent;
+ border-right:6px solid transparent;
+ border-top:6px solid #1794D1;
+ margin:0 auto;
+ font-size:0;
+ line-height:0
+}
+ #pkgsearch{
+ padding:1em .75em;
+ background:#3ad;
+ color:#fff;
+ border:1px solid #08b
+}
+ #pkgsearch label{
+ width:auto;
+ padding:.1em 0
+}
+ #pkgsearch input{
+ width:10em;
+ float:right;
+ font-size:1em;
+ color:#000;
+ background:#fff;
+ border:1px solid #09c
+}
+ .pkgsearch-typeahead{
+ position:absolute;
+ top:100%;
+ left:0;
+ z-index:1000;
+ display:none;
+ float:left;
+ padding:.15em .1em;
+ margin:0;
+ min-width:10em;
+ font-size:.812em;
+ text-align:left;
+ list-style:none;
+ background-color:#f6f9fc;
+ border:1px solid #09c
+}
+ .pkgsearch-typeahead li a{
+ color:#000
+}
+ .pkgsearch-typeahead li.active a{
+ color:#07b
+}
+ #pkg-updates h3{
+ margin:0 0 .3em
+}
+ #pkg-updates .more{
+ font-weight:normal
+}
+ #pkg-updates .rss-icon{
+ float:right;
+ margin:-2em 0 0 0
+}
+ #pkg-updates table{
+ margin:0
+}
+ #pkg-updates td.pkg-name{
+ white-space:normal
+}
+ #pkg-updates td.pkg-arch{
+ text-align:right
+}
+ #pkg-updates span.testing{
+ font-style:italic
+}
+ #pkg-updates span.staging{
+ font-style:italic;
+ color:#ff8040
+}
+ #nav-sidebar ul{
+ list-style:none;
+ margin:.5em 0 .5em 1em;
+ padding:0
+}
+ #arch-sponsors img{
+ padding:.3em 0
+}
+ div.widget{
+ margin-bottom:1.5em
+}
+ #konami{
+ position:fixed;
+ top:0;
+ left:0;
+ width:100%;
+ height:100%;
+ text-align:center;
+ opacity:.6
+}
+ #rss-feeds .rss{
+ padding-right:20px;
+ background:url(rss.c5ebdc5318d6.png) top right no-repeat
+}
+ #artwork img.inverted{
+ background:#333;
+ padding:0
+}
+ #artwork div.imagelist img{
+ display:inline;
+ margin:.75em
+}
+ .news-nav{
+ float:right;
+ margin-top:-2.2em
+}
+ .news-nav .prev, .news-nav .next{
+ margin:0 1em
+}
+ div.news-article .article-info{
+ margin:0;
+ color:#999
+}
+ #newsform{
+ width:60em
+}
+ #newsform input[type=text], #newsform textarea{
+ width:75%
+}
+ .todolist-nav{
+ float:right;
+ margin-top:-2.2em
+}
+ .todolist-nav .prev, .todolist-nav .next{
+ margin:0 1em
+}
+ #donor-list ul{
+ width:100%
+}
+ #donor-list li{
+ float:left;
+ width:25%;
+ min-width:20em
+}
+ #arch-downloads h3{
+ border-bottom:1px dotted #bbb
+}
+ table.results{
+ font-size:.846em;
+ border-top:1px dotted #999;
+ border-bottom:1px dotted #999
+}
+ .results th{
+ padding:.5em 1em .25em .25em;
+ border-bottom:1px solid #999;
+ white-space:nowrap;
+ background-color:#fff
+}
+ .results td{
+ padding:.3em 1em .3em 3px
+}
+ .results tr.odd{
+ background:#fff
+}
+ .results tr.even{
+ background:#e4eeff
+}
+ .results .flagged{
+ color:red
+}
+ .results tr.empty td{
+ text-align:center
+}
+ #pkglist-about{
+ margin-top:1.5em
+}
+ .pkglist-stats{
+ font-size:.85em
+}
+ #pkglist-results .pkglist-nav{
+ float:right;
+ margin-top:-2.2em
+}
+ .pkglist-nav .prev{
+ margin-right:1em
+}
+ .pkglist-nav .next{
+ margin-right:1em
+}
+ .filter-criteria{
+ margin-bottom:1em
+}
+ .filter-criteria h3{
+ font-size:1em;
+ margin-top:0
+}
+ .filter-criteria div{
+ float:left;
+ margin-right:1.65em;
+ font-size:.85em
+}
+ .filter-criteria legend{
+ display:none
+}
+ .filter-criteria label{
+ width:auto;
+ display:block;
+ font-weight:normal
+}
+ #pkgdetails #detailslinks{
+ float:right
+}
+ #pkgdetails #detailslinks h4{
+ margin-top:0;
+ margin-bottom:.25em
+}
+ #pkgdetails #detailslinks ul{
+ list-style:none;
+ padding:0;
+ margin-bottom:0;
+ font-size:.846em
+}
+ #pkgdetails #detailslinks>div{
+ padding:.5em;
+ margin-bottom:1em;
+ background:#eee;
+ border:1px solid #bbb
+}
+ #pkgdetails #actionlist .flagged{
+ color:red;
+ font-size:.9em;
+ font-style:italic
+}
+ #pkgdetails #pkginfo{
+ width:auto
+}
+ #pkgdetails #pkginfo td{
+ padding:.25em 0 .25em 1.5em
+}
+ #pkgdetails #pkginfo .userdata{
+ font-size:.85em;
+ padding:.5em
+}
+ #flag-pkg-form label{
+ width:10em
+}
+ #flag-pkg-form textarea, #flag-pkg-form input[type=text]{
+ width:45%
+}
+ #pkgdetails #metadata{
+ clear:both
+}
+ #pkgdetails #metadata h3{
+ background:#555;
+ color:#fff;
+ font-size:1em;
+ margin-bottom:.5em;
+ padding:.2em .35em
+}
+ #pkgdetails #metadata ul{
+ list-style:none;
+ margin:0;
+ padding:0
+}
+ #pkgdetails #metadata li{
+ padding-left:.5em
+}
+ #pkgdetails #metadata p{
+ padding-left:.5em
+}
+ #pkgdetails #metadata .message{
+ font-style:italic
+}
+ #pkgdetails #metadata br{
+ clear:both
+}
+ #pkgdetails #pkgdeps{
+ float:left;
+ width:48%;
+ margin-right:2%
+}
+ #pkgdetails #metadata .virtual-dep, #pkgdetails #metadata .testing-dep, #pkgdetails #metadata .staging-dep, #pkgdetails #metadata .opt-dep, #pkgdetails #metadata .make-dep, #pkgdetails #metadata .link-dep, #pkgdetails #metadata .check-dep, #pkgdetails #metadata .dep-desc{
+ font-style:italic
+}
+ #pkgdetails #pkgreqs{
+ float:left;
+ width:50%
+}
+ #pkgdetails #pkgfiles{
+ clear:left;
+ padding-top:1em
+}
+ #pkgfilelist li.d{
+ color:#666
+}
+ #pkgfilelist li.f{
+}
+ table td.country{
+ white-space:normal
+}
+ #list-generator div ul{
+ list-style:none;
+ display:inline;
+ padding-left:0
+}
+ #list-generator div ul li{
+ display:inline
+}
+ .visualize-mirror .axis path, .visualize-mirror .axis line{
+ fill:none;
+ stroke:#000;
+ stroke-width:3px;
+ shape-rendering:crispEdges
+}
+ .visualize-mirror .url-dot{
+ stroke:#000
+}
+ .visualize-mirror .url-line{
+ fill:none;
+ stroke-width:1.5px
+}
+ #arch-bio-toc{
+ width:75%;
+ margin:0 auto;
+ text-align:center
+}
+ #arch-bio-toc a{
+ white-space:nowrap
+}
+ .arch-bio-entry{
+ width:75%;
+ min-width:640px;
+ margin:0 auto
+}
+ .arch-bio-entry td.pic{
+ vertical-align:top;
+ padding-right:15px;
+ padding-top:2.25em
+}
+ .arch-bio-entry td.pic img{
+ padding:4px;
+ border:1px solid #ccc
+}
+ .arch-bio-entry td h3{
+ border-bottom:1px dotted #ccc;
+ margin-bottom:.5em
+}
+ .arch-bio-entry table.bio{
+ margin-bottom:2em
+}
+ .arch-bio-entry table.bio th{
+ color:#666;
+ font-weight:normal;
+ text-align:right;
+ padding-right:.5em;
+ vertical-align:top;
+ white-space:nowrap
+}
+ .arch-bio-entry table.bio td{
+ width:100%;
+ padding-bottom:.25em;
+ white-space:normal
+}
+ #dev-login{
+ width:auto
+}
+ #dash-pkg-notify{
+ text-align:right;
+ padding:1em 0 0;
+ margin-top:1em;
+ font-size:.85em;
+ border-top:1px dotted #bbb
+}
+ #dash-pkg-notify label{
+ width:auto;
+ font-weight:normal
+}
+ #dash-pkg-notify input{
+ vertical-align:middle;
+ margin:0 .25em
+}
+ #dash-pkg-notify input[type=submit]{
+ margin-top:-0.25em
+}
+ #dash-pkg-notify p{
+ margin:0
+}
+ table.dash-stats .key{
+ width:50%
+}
+ ul.admin-actions{
+ float:right;
+ list-style:none;
+ margin-top:-2.5em
+}
+ ul.admin-actions li{
+ display:inline;
+ padding-left:1.5em
+}
+ .todo-table .complete, .signoff-yes, #key-status .signed-yes, #releng-result .success-yes, #release-list .available-yes{
+ color:green
+}
+ .todo-table .incomplete, .signoff-no, #key-status .signed-no, #releng-result .success-no, #release-list .available-no{
+ color:red
+}
+ .todo-table .inprogress, .signoff-bad{
+ color:darkorange
+}
+ .todo-info{
+ color:#999;
+ border-bottom:1px dotted #bbb
+}
+ .todo-description{
+ margin-top:1em;
+ padding-left:2em;
+ max-width:900px
+}
+ .todo-pkgbases{
+ border-top:1px dotted #bbb
+}
+ .todo-list h4{
+ margin-top:0;
+ margin-bottom:.4em
+}
+ #dev-signoffs tr:hover{
+ background:#ffd
+}
+ ul.signoff-list{
+ list-style:none;
+ margin:0;
+ padding:0
+}
+ .signoff-yes{
+ font-weight:bold
+}
+ .signoff-disabled{
+ color:gray
+}
+ #releng-feedback label{
+ width:auto;
+ display:inline;
+ font-weight:normal
+}
+ #releng-feedback ul{
+ padding-left:1em
+}
+ #releng-feedback li{
+ list-style:none
+}
+ #releng-feedback ul+.helptext{
+ position:relative;
+ top:-0.9em
+}
+ #archnavbar.anb-home ul li#anb-home a,
+ #archnavbar.anb-stats ul li#anb-stats a,
+ #archnavbar.anb-packages ul li#anb-packages a,
+ #archnavbar.anb-download ul li#anb-download a{
+ color:white!important
+}
+ .visualize-buttons{
+ margin:.5em .33em
+}
+ .visualize-buttons button.active{
+ depressed:true
+}
+ .visualize-chart{
+ position:relative;
+ height:500px;
+ margin:.33em
+}
+ #visualize-archrepo .treemap-cell{
+ border:solid 1px white;
+ overflow:hidden;
+ position:absolute
+}
+ #visualize-archrepo .treemap-cell span{
+ padding:3px;
+ font-size:.85em;
+ line-height:1em
+}
+ #visualize-keys svg{
+ width:100%;
+ height:100%
+}
+
diff --git a/html/static/favicon.ico b/html/static/favicon.ico
new file mode 100644
index 0000000..8ef6f13
--- /dev/null
+++ b/html/static/favicon.ico
Binary files differ
diff --git a/templates/footer.m4 b/templates/footer.m4
new file mode 100644
index 0000000..b026089
--- /dev/null
+++ b/templates/footer.m4
@@ -0,0 +1,31 @@
+m4_define(`_FOOTER',
+`
+ <div id="footer">
+ <p>
+ Copyright &#169; 2002-2019 <a href="mailto:jvinet@zeroflux.org" title="Contact Judd Vinet">Judd Vinet</a> and <a href="mailto:aaron@archlinux.org" title="Contact Aaron Griffin">Aaron Griffin</a>.
+ Copyright &#169; 2018-2022 <a href="mailto:arch@eckner.net" title="Contact Erich Eckner">Erich Eckner</a>.
+ Copyright &#169; 2024 <a href="mailto:mail@andreasbaumann.cc" title="Contact Andreas Baumann">Andreas Baumann</a>.
+ </p>
+ <p>
+ The Arch Linux&#174; name and logo are recognized <a href="https://wiki.archlinux.org/index.php/DeveloperWiki:TrademarkPolicy" title="Arch Linux Trademark Policy">trademarks</a>. Some rights reserved.
+ </p>
+ <p>
+ The registered trademark Linux&#174;; is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds, owner of the mark on a world-wide basis.
+ </p>
+ </div>
+ </div>
+ <script type="application/ld+json">
+ {
+ "@context": "http://schema.org",
+ "@type": "WebSite",
+ "url": "/",
+ "potentialAction": {
+ "@type": "SearchAction",
+ "target": "/?q={search_term}",
+ "query-input": "required name=search_term"
+ }
+ }
+ </script>
+ </body>
+</html>
+')
diff --git a/templates/header.m4 b/templates/header.m4
new file mode 100644
index 0000000..45335e1
--- /dev/null
+++ b/templates/header.m4
@@ -0,0 +1,26 @@
+m4_define(`_HEADER',
+`<!DOCTYPE html>
+<html lang="en">
+ <head>
+ <meta charset="utf-8" />
+ <title>Arch Linux 32 - $1</title>
+ <link rel="stylesheet" type="text/css" href="/static/archweb.css" media="screen, projection" />
+ <link rel="icon" type="image/x-icon" href="/static/favicon.ico" />
+ <link rel="shortcut icon" type="image/x-icon" href="/static/favicon.ico" />
+ </head>
+ <body class="">
+ <div id="archnavbar" class="$2">
+ <div id="archnavbarlogo">
+ <h1><a href="/" title="Return to the main page">Arch Linux</a></h1>
+ </div>
+ <div id="archnavbarmenu">
+ <ul id="archnavbarlist">
+ <li id="anb-home"><a href="https://www.archlinux32.org/">Home</a></li>
+ <li id="anb-stats"><a href="http://euronuc.lan/summary.html">Statistics</a></li>
+ <li id="anb-packages"><a href="https://www.archlinux32.org/packages">Packages</a></li>
+ <li id="anb-arch-linux-official"><a href="https://www.archlinux.org/">Arch Linux Official</a></li>
+ </ul>
+ </div>
+ </div>
+ <div id="content">
+')
diff --git a/templates/summary.m4 b/templates/summary.m4
new file mode 100644
index 0000000..23c3b1c
--- /dev/null
+++ b/templates/summary.m4
@@ -0,0 +1,17 @@
+m4_include(header.m4)
+m4_include(footer.m4)
+
+_HEADER(`Archlinux32 Consistency Checker',`anb-stats')
+
+<h2>Statistics</h2>
+Generated on m4_esyscmd(date)
+<pre>
+m4_esyscmd(cat ../data/stats)
+</pre>
+<h2>Duplicate States in State Repo</h2>
+<pre>
+m4_esyscmd(cat ../data/duplicates)
+</pre>
+
+_FOOTER()
+
diff --git a/templates/main.m4 b/templates/table.m4
index 604a8da..4913ad7 100644
--- a/templates/main.m4
+++ b/templates/table.m4
@@ -6,7 +6,6 @@
<link rel="stylesheet" type="text/css" href="/static/archweb.css" media="screen, projection" />
<link rel="icon" type="image/x-icon" href="/static/favicon.ico" />
<link rel="shortcut icon" type="image/x-icon" href="/static/favicon.ico" />
- <link rel="stylesheet" type="text/css" href="/static/flags/fam.47411010d402.css" media="screen, projection" />
</head>
<body class="">
<div id="archnavbar" class="anb-packages">
@@ -632,14 +631,14 @@
</div>
<div id="footer">
<p>
- Copyright © 2002-2019 <a href="mailto:jvinet@zeroflux.org" title="Contact Judd Vinet">Judd Vinet</a> and <a href="mailto:aaron@archlinux.org" title="Contact Aaron Griffin">Aaron Griffin</a>.
- Copyright © 2018-2022 <a href="mailto:arch@eckner.net" title="Contact Erich Eckner">Erich Eckner</a>.
+ Copyright &#169; 2002-2019 <a href="mailto:jvinet@zeroflux.org" title="Contact Judd Vinet">Judd Vinet</a> and <a href="mailto:aaron@archlinux.org" title="Contact Aaron Griffin">Aaron Griffin</a>.
+ Copyright &#169; 2018-2024 <a href="mailto:arch@eckner.net" title="Contact Erich Eckner">Erich Eckner</a>.
</p>
<p>
- The Arch Linux name and logo are recognized <a href="https://wiki.archlinux.org/index.php/DeveloperWiki:TrademarkPolicy" title="Arch Linux Trademark Policy">trademarks</a>. Some rights reserved.
+ The Arch Linux&#174; name and logo are recognized <a href="https://wiki.archlinux.org/index.php/DeveloperWiki:TrademarkPolicy" title="Arch Linux Trademark Policy">trademarks</a>. Some rights reserved.
</p>
<p>
- The registered trademark Linux® is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds, owner of the mark on a world-wide basis.
+ The registered trademark Linux&tm; is used pursuant to a sublicense from LMI, the exclusive licensee of Linus Torvalds, owner of the mark on a world-wide basis.
</p>
</div>
</div>