tazpkg rev 728
pkgs.cgi: empty "cat" shows list of categories; introduce "tag": list packages by tag, or list of all tags if empty
list packages by tag not shows installed/blocked at the moment; "tag cloud" will be soon
list packages by tag not shows installed/blocked at the moment; "tag cloud" will be soon
author | Aleksej Bobylev <al.bobylev@gmail.com> |
---|---|
date | Sat Dec 27 16:02:32 2014 +0200 (2014-12-27) |
parents | f32370a20712 |
children | 96e9dcccb7af |
files | tazpanel/pkgs.cgi |
line diff
1.1 --- a/tazpanel/pkgs.cgi Fri Dec 26 15:14:01 2014 +0200 1.2 +++ b/tazpanel/pkgs.cgi Sat Dec 27 16:02:32 2014 +0200 1.3 @@ -306,21 +306,23 @@ 1.4 # Print links to the pages 1.5 1.6 pager() { 1.7 - awk -F'"' -vpage="$page" -vcached="$1" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="cat=$category&repo=$repo&page=" ' 1.8 + awk -F'"' -vpage="$page" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="?cat=$category&repo=$repo&page=" ' 1.9 BEGIN{ 1.10 num_pages = int(num_lines / 100) + (num_lines % 100 != 0) 1.11 if (num_pages != 1) printf "<p>%s", text 1.12 } 1.13 { 1.14 if (num_pages == 1) exit 1.15 - p = int(NR/100) + 1 1.16 - 1.17 - if (NR%100 == 1) printf "<a class=\"pages%s\" href=\"?%s%s\" title=\"%s\n···\n", p==page?" current":"", url, p, $6 1.18 - if (NR%100 == 0) printf "%s\">%s</a> ", $6, p - 1 1.19 + r = NR % 100 1.20 + if (r == 1) { 1.21 + p = int(NR / 100) + 1 1.22 + printf "<a class=\"pages%s\" href=\"%s%s\" title=\"%s\n···\n", p==page?" current":"", url, p, $6 1.23 + } else if (r == 0) 1.24 + printf "%s\">%s</a> ", $6, int(NR / 100) 1.25 } 1.26 END{ 1.27 if (num_pages == 1) exit 1.28 - if (NR%100 != 0) printf "%s\">%s</a>", $6, p 1.29 + if (r != 0) printf "%s\">%s</a>", $6, int(NR / 100) + 1 1.30 print "</p>" 1.31 }' $1 1.32 } 1.33 @@ -332,7 +334,7 @@ 1.34 if [ -n "$1" ]; then 1.35 echo -n "<tr><td><b>$2</b></td><td>" 1.36 echo $1 | tr ' ' $'\n' | awk -vt="$3" '{ 1.37 - printf "<a href=\"%s%s\">%s</a> ", t?("?"t"="):"", gensub(/\+/, "%2B", "g", $1), $1 1.38 + printf "<a href=\"?%s=%s\">%s</a> ", t, gensub(/\+/, "%2B", "g", $1), $1 1.39 }' 1.40 echo "</td></tr>" 1.41 fi 1.42 @@ -453,18 +455,39 @@ 1.43 1.44 *\ cat\ *) 1.45 # 1.46 - # List all available packages by category on mirror. Listing all 1.47 - # packages is too resource intensive and not useful. 1.48 + # List all available packages by category on mirror. 1.49 # 1.50 cd $PKGS_DB 1.51 repo=$(GET repo) 1.52 category=$(GET cat) 1.53 - [ -z "$category" ] && category="base-system" 1.54 search_form 1.55 sidebar | sed "s/active_$category/active/;s/repo_$repo/active/" 1.56 - LOADING_MSG="$(_ 'Listing packages...')" 1.57 - loading_msg 1.58 - cat << EOT 1.59 + if [ -z "$category" ] || [ "$category" == 'cat' ]; then 1.60 + cat << EOT 1.61 +<h2>$(_ 'Categories list')</h2> 1.62 +<table class="zebra outbox"> 1.63 +<thead> 1.64 +<tr><td>$(_ 'Category')</td><td>$(_ 'Repository')</td><td>$(_ 'Installed')</td></tr> 1.65 +</thead><tbody> 1.66 +EOT 1.67 + { 1.68 + awk -F$'\t' '{print $3}' $PKGS_DB/packages.info | sort | uniq -c 1.69 + awk -F$'\t' '{print $3}' $PKGS_DB/installed.info | sed 's|.*|& i|' | sort | uniq -c 1.70 + } | sort -k2,2 | awk ' 1.71 + { 1.72 + c [$2] = "." 1.73 + if ($3) { i[$2] = $1; } else { m[$2] = $1; } 1.74 + } 1.75 + END { 1.76 + for (n in c) print n, m[n], i[n] 1.77 + }' | sort | awk '{ 1.78 + printf "<tr><td><a href=\"?cat=%s\">%s</a></td><td>%d</td><td>%d</td></tr>", $1, $1, $2, $3 1.79 + }' 1.80 + echo '</tbody></table>' 1.81 + else 1.82 + LOADING_MSG="$(_ 'Listing packages...')" 1.83 + loading_msg 1.84 + cat << EOT 1.85 <h2>$(_ 'Category: %s' $category)</h2> 1.86 1.87 <form method='get' action='$SCRIPT_NAME'> 1.88 @@ -482,35 +505,35 @@ 1.89 </div> 1.90 </div> 1.91 EOT 1.92 - for i in $(repo_list ""); do 1.93 - if [ "$repo" != "Public" ]; then 1.94 - Repo_Name="$(repo_name $i)" 1.95 - cat << EOT 1.96 + for i in $(repo_list ""); do 1.97 + if [ "$repo" != "Public" ]; then 1.98 + Repo_Name="$(repo_name $i)" 1.99 + cat << EOT 1.100 <h3>$(_ 'Repository: %s' $Repo_Name)</h3> 1.101 EOT 1.102 - fi 1.103 + fi 1.104 1.105 - case $category in 1.106 - extra) 1.107 - echo '<table class="zebra outbox pkglist">' 1.108 - table_head 1.109 - echo '<tbody>' 1.110 - NA="$(_n 'n/a')" 1.111 - for pkg in $(cat $i/extra.list); do 1.112 - PKG="$(grep ^$pkg$'\t' $i/installed.info)" 1.113 - if [ -n "$PKG" ]; then 1.114 - echo "$PKG" 1.115 - else 1.116 - echo "$pkg $NA - $NA http://mirror.slitaz.org/packages/get/$pkg - - -" 1.117 - fi 1.118 - done | parse_packages_info 1.119 - echo "</tbody></table>" 1.120 - ;; 1.121 - *) 1.122 - cached="$CACHE_DIR/$repo-$category" 1.123 - make_mixed_list | sort -t$'\t' -k1,1 | awk -F$'\t' -vc="$category" ' 1.124 + case $category in 1.125 + extra) 1.126 + echo '<table class="zebra outbox pkglist">' 1.127 + table_head 1.128 + echo '<tbody>' 1.129 + NA="$(_n 'n/a')" 1.130 + for pkg in $(cat $i/extra.list); do 1.131 + PKG="$(grep ^$pkg$'\t' $i/installed.info)" 1.132 + if [ -n "$PKG" ]; then 1.133 + echo "$PKG" 1.134 + else 1.135 + echo "$pkg $NA - $NA http://mirror.slitaz.org/packages/get/$pkg - - -" 1.136 + fi 1.137 + done | parse_packages_info 1.138 + echo "</tbody></table>" 1.139 + ;; 1.140 + *) 1.141 + cached="$CACHE_DIR/$repo-$category" 1.142 + make_mixed_list | sort -t$'\t' -k1,1 | tee /tmp/mixed_list | awk -F$'\t' -vc="$category" ' 1.143 { 1.144 - if (PKG && PKG != $1) { 1.145 + if (PKG && (PKG != $1)) { 1.146 if (CAT) { 1.147 if (DSCL) DSC = DSCL 1.148 printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"><a class=\"pkg%s%s\" href=\"?info=%s\">%s</a></td><td>%s</td><td>%s</td><td><a href=\"%s\"></a></td></tr>\n", PKG, INS, BLK, gensub(/\+/, "%2B", "g", PKG), PKG, VER, DSC, WEB 1.149 @@ -527,21 +550,23 @@ 1.150 if (! INS) { PKG = $1; VER = $2; DSC = $4; WEB = $5 } 1.151 } 1.152 }' > $cached 1.153 - page=$(GET page); [ -z "$page" ] && page=1 1.154 - pager="$(pager $cached)" 1.155 + page=$(GET page); [ -z "$page" ] && page=1 1.156 + pager="$(pager $cached)" 1.157 1.158 - echo "$pager" 1.159 - echo '<table class="zebra outbox pkglist">' 1.160 - table_head 1.161 - echo '<tbody>' 1.162 - tail -n+$((($page-1)*100+1)) $cached | head -n100 1.163 - echo "</tbody></table>" 1.164 - echo "$pager" 1.165 - rm -f $cached 1.166 - ;; 1.167 - esac 1.168 - done 1.169 - echo '</form>' ;; 1.170 + echo "$pager" 1.171 + echo '<table class="zebra outbox pkglist">' 1.172 + table_head 1.173 + echo '<tbody>' 1.174 + tail -n+$((($page-1)*100+1)) $cached | head -n100 1.175 + echo "</tbody></table>" 1.176 + echo "$pager" 1.177 + rm -f $cached 1.178 + ;; 1.179 + esac 1.180 + done 1.181 + echo '</form>' 1.182 + fi 1.183 + ;; 1.184 1.185 1.186 *\ search\ *) 1.187 @@ -1131,6 +1156,31 @@ 1.188 ;; 1.189 1.190 1.191 + *\ tag\ *) 1.192 + # 1.193 + # Show packages with matching tag; show tag cloud 1.194 + # 1.195 + search_form 1.196 + sidebar 1.197 + tag=$(GET tag) 1.198 + if [ -n "$tag" ]; then 1.199 + echo "<h2>$(_ 'Tag "%s"' $tag)</h2>" 1.200 + echo '<table class="zebra outbox pkglist">' 1.201 + table_head 1.202 + echo '<tbody>' 1.203 + awk -F$'\t' '$6 ~ /(^| )'$tag'( |$)/{ 1.204 + printf "<tr><td><input type=\"checkbox\" name=\"pkg\" value=\"%s\"><a class=\"pkg%s%s\" href=\"?info=%s\">%s</a></td><td>%s</td><td>%s</td><td><a href=\"%s\"></a></td></tr>\n", $1, INS, BLK, gensub(/\+/, "%2B", "g", $1), $1, $2, $4, $5 1.205 + }' $PKGS_DB/packages.info 1.206 + echo "</tbody></table>" 1.207 + else 1.208 + echo "<h2>$(_ 'Tags list')</h2>" 1.209 + echo "<p>" 1.210 + awk -F$'\t' '{if($6){print $6}}' $PKGS_DB/packages.info | tr ' ' $'\n' | sort -u | sed 's|.*|<a href="?tag=&">&</a> |' 1.211 + echo "</p>" 1.212 + fi 1.213 + ;; 1.214 + 1.215 + 1.216 *) 1.217 # 1.218 # Default to summary