tazpkg diff tazpanel/pkgs.cgi @ rev 747

Add and use icons from Faenza icon theme (new light look and feel); fix last recharge date (pay respect to timezone time offset); add few comments; stylize search toolbar; fix "up" command; admin: select mirror as standard way to select item from list; open external links in the new tab (or new window); and a ton of other small changes.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Jan 21 17:53:26 2015 +0200 (2015-01-21)
parents c4c2d523a719
children f2975370bd27
line diff
     1.1 --- a/tazpanel/pkgs.cgi	Sun Jan 11 11:51:31 2015 +0200
     1.2 +++ b/tazpanel/pkgs.cgi	Wed Jan 21 17:53:26 2015 +0200
     1.3 @@ -91,68 +91,39 @@
     1.4  }
     1.5  
     1.6  
     1.7 -# Parse mirrors list to be able to have an icon and remove link
     1.8 -
     1.9 -list_mirrors() {
    1.10 -	while read line
    1.11 -	do
    1.12 -		cat << EOT
    1.13 -<li>
    1.14 -	<a href="?admin=rm-mirror=$line&amp;file=$(httpd -e $1)">
    1.15 -		<img src="$IMAGES/clear.png" title="$(_ 'Delete')" />
    1.16 -	</a>
    1.17 -	<a href="?admin=select-mirror&amp;mirror=$line">
    1.18 -		<img src="$IMAGES/start.png" title="$(_ 'Use as default')" />
    1.19 -	</a>
    1.20 -	<a href="$line">$line</a>
    1.21 -</li>
    1.22 -EOT
    1.23 -	done < $1
    1.24 -}
    1.25 -
    1.26 -
    1.27 -# Parse repositories list to be able to have an icon and remove link
    1.28 -
    1.29 -list_repos() {
    1.30 -	ls $PKGS_DB/undigest 2> /dev/null | while read repo ; do
    1.31 -		cat <<EOT
    1.32 -	<li><a href="?admin=rm-repo=$repo">
    1.33 -		<img src="$IMAGES/clear.png">$repo</a></li>
    1.34 -EOT
    1.35 -	done
    1.36 -}
    1.37 -
    1.38 -
    1.39  # Show button
    1.40  show_button() {
    1.41 -	case $1 in
    1.42 -		recharge)     img='recharge'; label="$(_ 'Recharge list')" ;;
    1.43 -		up)           img='update';   label="$(_ 'Check upgrades')" ;;
    1.44 -		list)         img='tazpkg';   label="$(_ 'My packages')" ;;
    1.45 -		tag=)         img='';         label="$(_ 'Tags')" ;;
    1.46 -		linkable)     img='tazpkg';   label="$(_ 'Linkable packages')" ;;
    1.47 -		admin)        img='edit';     label="$(_ 'Administration')" ;;
    1.48 -		*Install*nf*) img='tazpkg-installed'; label="$(_ 'Install (Non Free)')" ;;
    1.49 -		*Install*)    img='tazpkg-installed'; label="$(_ 'Install')" ;;
    1.50 -		*Remove*)     img='stop';     label="$(_ 'Remove')" ;;
    1.51 -		*Link*)       img='tazpkg';   label="$(_ 'Link')" ;;
    1.52 -		*Block*)      img='tazpkg';   label="$(_ 'Block')" ;;
    1.53 -		*Unblock*)    img='tazpkg';   label="$(_ 'Unblock')" ;;
    1.54 -		*Repack*)     img='tazpkg';   label="$(_ 'Repack')" ;;
    1.55 -		*saveconf*)   img='tazpkg';   label="$(_ 'Save configuration')" ;;
    1.56 -		*listconf*)   img='edit';     label="$(_ 'List configuration files')" ;;
    1.57 -		*quickcheck*) img='recharge'; label="$(_ 'Quick check')" ;;
    1.58 -		*fullcheck*)  img='recharge'; label="$(_ 'Full check')" ;;
    1.59 -		*clean*)      img='stop';     label="$(_ 'Clean')" ;;
    1.60 -		*setlink*)    img='harddisk'; label="$(_ 'Set link')" ;;
    1.61 -		*removelink*) img='stop';     label="$(_ 'Remove link')" ;;
    1.62 -	esac
    1.63 -	cat << EOT
    1.64 -	<button class="button" type="submit" name="${1%%=*}" value="${1#*=}">
    1.65 +	for button in $@; do
    1.66 +		case $button in
    1.67 +		recharge)     img='tp-recharge'; label="$(_ 'Recharge list')" ;;
    1.68 +		up)           img='tp-up';       label="$(_ 'Check upgrades')" ;;
    1.69 +		list)         img='tp-list';     label="$(_ 'My packages')" ;;
    1.70 +		tags)         img='tp-tag';      label="$(_ 'Tags')" ;;
    1.71 +		linkable)     img='tp-link';     label="$(_ 'Linkable packages')" ;;
    1.72 +		admin)        img='tp-admin';    label="$(_ 'Administration')" ;;
    1.73 +		*Install*nf*) img='tp-pkg-ins';  label="$(_ 'Install (Non Free)')" ;;
    1.74 +		*Install*)    img='tp-pkg-ins';  label="$(_ 'Install')" ;;
    1.75 +		*Remove*)     img='tp-pkg-rem';  label="$(_ 'Remove')" ;;
    1.76 +		*Link*)       img='tp-link';     label="$(_ 'Link')" ;;
    1.77 +		*Block*)      img='tp-block';    label="$(_ 'Block')" ;;
    1.78 +		*Unblock*)    img='tp-unblock';  label="$(_ 'Unblock')" ;;
    1.79 +		*Repack*)     img='tp-repack';   label="$(_ 'Repack')" ;;
    1.80 +		*saveconf*)   img='tp-save';     label="$(_ 'Save configuration')" ;;
    1.81 +		*listconf*)   img='tp-list';     label="$(_ 'List configuration files')" ;;
    1.82 +		*quickcheck*) img='tp-check';    label="$(_ 'Quick check')" ;;
    1.83 +		*fullcheck*)  img='tp-check';    label="$(_ 'Full check')" ;;
    1.84 +		*clean*)      img='tp-remove';   label="$(_ 'Clean')" ;;
    1.85 +		*setlink*)    img='tp-link';     label="$(_ 'Set link')" ;;
    1.86 +		*removelink*) img='tp-remove';   label="$(_ 'Remove link')" ;;
    1.87 +		*add-mirror)  img='tp-add';      label="$(_n 'Add mirror')" ;;
    1.88 +		*add-repo)    img='tp-add';      label="$(_n 'Add repository')" ;;
    1.89 +		esac
    1.90 +		cat << EOT
    1.91 +	<button class="button" type="submit" name="${button%%=*}" value="${button#*=}">
    1.92  		<img src="$IMAGES/$img.png"/>$label
    1.93  	</button>
    1.94  EOT
    1.95 -
    1.96 +	done
    1.97  }
    1.98  
    1.99  
   1.100 @@ -168,15 +139,13 @@
   1.101  	[ -z "$repo" ] && repo="$(GET repo)"
   1.102  	[ -z "$repo" ] && repo="Any"
   1.103  	cat << EOT
   1.104 -<div class="search">
   1.105 -	<form method="get" action="">
   1.106 -		<p>
   1.107 -			<input type="text" name="search" size="20">
   1.108 -			<input type="submit" value="$(gettext 'Search')">
   1.109 -			<input class="radius" type="submit" name="files" value="$(_n 'Files')">
   1.110 -		</p>
   1.111 -	</form>
   1.112 -</div>
   1.113 +<form method="get" action="">
   1.114 +	<div class="search"><input
   1.115 +		type="search" name="search" results="5" autosave="pkgsearch" autocomplete="on"><input
   1.116 +		type="submit" value="$(_n 'Search')"><input
   1.117 +		type="submit" value="$(_n 'Files')" name="files">
   1.118 +	</div>
   1.119 +</form>
   1.120  EOT
   1.121  }
   1.122  
   1.123 @@ -306,23 +275,25 @@
   1.124  # Print links to the pages
   1.125  
   1.126  pager() {
   1.127 -	awk -F'"' -vpage="$page" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="?list&amp;page=" '
   1.128 +	PAGE_SIZE=${PAGE_SIZE:-100}
   1.129 +	[ "$PAGE_SIZE" != "0" ] && \
   1.130 +	awk -F'"' -vpage="$page" -vsize="$PAGE_SIZE" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="?list&amp;page=" '
   1.131  BEGIN{
   1.132 -	num_pages = int(num_lines / 100) + (num_lines % 100 != 0)
   1.133 +	num_pages = int(num_lines / size) + (num_lines % size != 0)
   1.134  	if (num_pages != 1) printf "<p>%s", text
   1.135  }
   1.136  {
   1.137  	if (num_pages == 1) exit
   1.138 -	r = NR % 100
   1.139 +	r = NR % size
   1.140  	if (r == 1) {
   1.141 -		p = int(NR / 100) + 1
   1.142 +		p = int(NR / size) + 1
   1.143  		printf "<a class=\"pages%s\" href=\"%s%s\" title=\"%s\n···\n", p==page?" current":"", url, p, $6
   1.144  	} else if (r == 0)
   1.145 -		printf "%s\">%s</a> ", $6, int(NR / 100)
   1.146 +		printf "%s\">%s</a> ", $6, int(NR / size)
   1.147  }
   1.148  END{
   1.149  	if (num_pages == 1) exit
   1.150 -	if (r != 0) printf "%s\">%s</a>", $6, int(NR / 100) + 1
   1.151 +	if (r != 0) printf "%s\">%s</a>", $6, int(NR / size) + 1
   1.152  	print "</p>"
   1.153  }' $1
   1.154  }
   1.155 @@ -331,6 +302,8 @@
   1.156  # Show packages list by category or tag
   1.157  
   1.158  show_list() {
   1.159 +	PAGE_SIZE=${PAGE_SIZE:-100}
   1.160 +	page=$(GET page); page=${page:-1}
   1.161  	cached=$(mktemp)
   1.162  	[ -n "$tag" ] && cat=''
   1.163  	{
   1.164 @@ -362,12 +335,14 @@
   1.165  		if (! INS)     { VER = $2; DSC = $4; WEB = $5 }
   1.166  	}
   1.167  }' > $cached
   1.168 -	page=$(GET page); [ -z "$page" ] && page=1
   1.169  
   1.170  	pager="$(pager $cached)"
   1.171 -	list="$(tail -n+$((($page-1)*100+1)) $cached | head -n100)"
   1.172 -	list1=${list:1:1}
   1.173 -	if [ "$pager" != "<p>$(_ 'Pages:') </p>" ] && [ -n "$list1" ]; then
   1.174 +	case $PAGE_SIZE in
   1.175 +		0) list="$(cat $cached)";;
   1.176 +		*) list="$(tail -n+$((($page-1)*$PAGE_SIZE+1)) $cached | head -n$PAGE_SIZE)";;
   1.177 +	esac
   1.178 +
   1.179 +	if [ "$pager" != "<p>$(_ 'Pages:') </p>" ] && [ -n "${list:1:1}" ]; then
   1.180  		cat << EOT
   1.181  $(header_repo_name $i)
   1.182  $pager
   1.183 @@ -387,7 +362,7 @@
   1.184  	if [ -n "$1" ]; then
   1.185  		echo -n "<tr><td><b>$2</b></td><td>"
   1.186  		echo $1 | tr ' ' $'\n' | awk -vt="$3" '{
   1.187 -			printf "<a href=\"?%s=%s\">%s</a> ", t, gensub(/\+/, "%2B", "g", $1), $1
   1.188 +			printf "<a href=\"?%s=%s\">%s</a>   ", t, gensub(/\+/, "%2B", "g", $1), $1
   1.189  		}'
   1.190  		echo "</td></tr>"
   1.191  	fi
   1.192 @@ -416,7 +391,7 @@
   1.193  <form method="get" action="">
   1.194  <div id="actions">
   1.195  	<div class="float-left">$(_ 'Selection:') $(show_button do=Link)</div>
   1.196 -	<div class="float-right">$(show_button recharge) $(show_button up)</div>
   1.197 +	<div class="float-right">$(show_button recharge up)</div>
   1.198  </div>
   1.199  EOT
   1.200  		table_head
   1.201 @@ -457,8 +432,8 @@
   1.202  	<thead>
   1.203  		<tr>
   1.204  			<td>$(_ 'Category')</td>
   1.205 -			<td>$(_ 'Repository')</td>
   1.206 -			<td>$(_ 'Installed')</td>
   1.207 +			<td>$(_ 'Available packages')</td>
   1.208 +			<td>$(_ 'Installed packages')</td>
   1.209  		</tr>
   1.210  	</thead>
   1.211  	<tbody>
   1.212 @@ -512,7 +487,7 @@
   1.213  		$([ "$my" != 'my' ] && show_button do=Install)
   1.214  		$(show_button do=Remove)
   1.215  	</div>
   1.216 -	<div class="float-right">$(show_button recharge; show_button up)</div>
   1.217 +	<div class="float-right">$(show_button recharge up)</div>
   1.218  </div>
   1.219  EOT
   1.220  		for i in $(repo_list ""); do
   1.221 @@ -538,9 +513,9 @@
   1.222  
   1.223  <form method="get" action="">
   1.224  <div id="actions">
   1.225 -	<div class="float-left">$(_ 'Selection:'; show_button do=Install; show_button do=Remove)
   1.226 +	<div class="float-left">$(_ 'Selection:'; show_button do=Install do=Remove)
   1.227  		<a href="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</a></div>
   1.228 -	<div class="float-right">$(show_button recharge; show_button up)</div>
   1.229 +	<div class="float-right">$(show_button recharge up)</div>
   1.230  </div>
   1.231  EOT
   1.232  		if [ -n "$(GET files)" ]; then
   1.233 @@ -620,22 +595,20 @@
   1.234  
   1.235  <form method="get" action="">
   1.236  <div id="actions">
   1.237 -	<div class="float-left">$(_ 'Selection:'; show_button do=Install; show_button do=Remove)
   1.238 -		<a href="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</a></div>
   1.239 +	<div class="float-left">$(_ 'Selection:'; show_button do=Install do=Remove)
   1.240 +	<button class="button" onclick="$(cat $PANEL/lib/checkbox.js)">$(_ 'Toogle all')</button></div>
   1.241  	<div class="float-right">$(show_button recharge)</div>
   1.242  </div>
   1.243  EOT
   1.244 +		# Ask tazpkg to make "packages.up" file
   1.245  		tazpkg up --check >/dev/null
   1.246  		table_head
   1.247 -		for pkg in $(cat packages.up); do
   1.248 -			grep -hs "^$pkg |" $PKGS_DB/packages.desc $PKGS_DB/undigest/*/packages.desc | \
   1.249 -				parse_packages_desc
   1.250 +
   1.251 +		for pkg in $(cat $PKGS_DB/packages.up); do
   1.252 +			grep -hs "^$pkg	" $PKGS_DB/packages.info $PKGS_DB/undigest/*/packages.info | parse_packages_info
   1.253  		done
   1.254 -		cat << EOT
   1.255 -</tbody>
   1.256 -</table>
   1.257 -</form>
   1.258 -EOT
   1.259 +
   1.260 +		echo "</tbody></table></form>"
   1.261  		;;
   1.262  
   1.263  
   1.264 @@ -644,13 +617,17 @@
   1.265  		# Do an action on one or some packages
   1.266  		#
   1.267  		search_form; sidebar
   1.268 -		LOADING_MSG="$(_ 'Please wait')"; loading_msg
   1.269 +		loading_msg
   1.270  
   1.271 -		opt=""
   1.272 +		# Find the command
   1.273  		cmd=$(echo $(GET do) | tr [:upper:] [:lower:])
   1.274 +
   1.275 +		# Find the packages list
   1.276  		pkgs=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="pkg")print $2}')
   1.277  		pkgs=$(httpd -d "$pkgs")
   1.278 -		bpkgs="<b>$pkgs</b>"
   1.279 +
   1.280 +		# Describe the command
   1.281 +		bpkgs="<b>$pkgs</b>"; opt=''
   1.282  		case $cmd in
   1.283  			install) MSG="$(_ 'Installing: %s' "$bpkgs")"; opt=--forced; cmd=get-install ;;
   1.284  			remove)  MSG="$(_ 'Removing: %s'   "$bpkgs")" ;;
   1.285 @@ -659,14 +636,15 @@
   1.286  			unblock) MSG="$(_ 'Unblocking: %s' "$bpkgs")" ;;
   1.287  			repack)  MSG="$(_ 'Repacking: %s'  "$bpkgs")" ;;
   1.288  		esac
   1.289 +
   1.290  		cat << EOT
   1.291  <h2>TazPkg: $(GET do)</h2>
   1.292 -
   1.293 -<div class="box">$MSG</div>
   1.294 +<p>$MSG</p>
   1.295  EOT
   1.296 +		# Do the command for all asked packages
   1.297  		for pkg in $pkgs; do
   1.298  			echo '<pre>'
   1.299 -				echo $(_n 'y') | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
   1.300 +			echo $(_n 'y') | tazpkg $cmd $pkg $opt 2>/dev/null | filter_taztools_msgs
   1.301  			echo '</pre>'
   1.302  		done ;;
   1.303  
   1.304 @@ -679,11 +657,19 @@
   1.305  		search_form; sidebar
   1.306  		LOADING_MSG=$(_ 'Getting package info...'); loading_msg
   1.307  
   1.308 -		temp="${pkg#get-}"
   1.309 +		cat << EOT
   1.310 +<h2>$(_ 'Package %s' $pkg)</h2>
   1.311 +
   1.312 +<form method="get" action="">
   1.313 +<input type="hidden" name="pkg" value="${pkg#get-}"/>
   1.314 +<div id="actions">
   1.315 +EOT
   1.316 +
   1.317 +		# Get receipt variables, show Install/Remove buttons
   1.318  		if [ -d $INSTALLED/$pkg ]; then
   1.319  			. $INSTALLED/$pkg/receipt
   1.320  			files=$(wc -l < $INSTALLED/$pkg/files.list)
   1.321 -			action="Remove"
   1.322 +			show_button do=Remove
   1.323  		else
   1.324  			cd $PKGS_DB
   1.325  			eval "$(awk -F$'\t' -vp=$pkg '
   1.326 @@ -694,22 +680,14 @@
   1.327  			}' packages.info undigest/*/packages.info)"
   1.328  			PACKED_SIZE=${SIZES% *}
   1.329  			UNPACKED_SIZE=${SIZES#* }
   1.330 -
   1.331 -			action="Install"
   1.332 -		fi
   1.333 -		cat << EOT
   1.334 -<h2>$(_ 'Package %s' $PACKAGE)</h2>
   1.335 -
   1.336 -<form method="get" action="">
   1.337 -<input type="hidden" name="pkg" value="$temp"/>
   1.338 -<div id="actions">
   1.339 -EOT
   1.340 -		if [ "$temp" != "$pkg" -a "$action" == "Install" ]; then
   1.341 -			show_button "do=Install&amp;nf"
   1.342 -		else
   1.343 -			show_button "do=$action"
   1.344 +			if [ "${pkg#get-}" != "$pkg" ]; then
   1.345 +				show_button "do=Install&amp;nf"
   1.346 +			else
   1.347 +				show_button do=Install
   1.348 +			fi
   1.349  		fi
   1.350  
   1.351 +		# Show Block/Unblock, and Repack buttons
   1.352  		if [ -d $INSTALLED/$pkg ]; then
   1.353  			if grep -qs "^$pkg$" $PKGS_DB/blocked-packages.list; then
   1.354  				show_button do=Unblock
   1.355 @@ -718,10 +696,14 @@
   1.356  			fi
   1.357  			show_button do=Repack
   1.358  		fi
   1.359 +
   1.360 +		# Translate short description
   1.361  		i18n_desc $pkg
   1.362 +
   1.363 +		# Show info table
   1.364  		cat << EOT
   1.365  </div>
   1.366 -<table class="zebra outbox">
   1.367 +<table class="zebra summary outbox">
   1.368  <tbody>
   1.369  	<tr><td><b>$(_ 'Name')</b></td><td>$PACKAGE</td></tr>
   1.370  	<tr><td><b>$(_ 'Version')</b></td><td>$VERSION</td></tr>
   1.371 @@ -729,7 +711,7 @@
   1.372  	<tr><td><b>$(_ 'Description')</b></td><td>$SHORT_DESC</td></tr>
   1.373  	$([ -n "$MAINTAINER" ] && echo "<tr><td><b>$(_ 'Maintainer')</b></td><td>$MAINTAINER</td></tr>")
   1.374  	$([ -n "$LICENSE" ] && echo "<tr><td><b>$(_ 'License')</b></td><td><a href=\"?license=$pkg\">$LICENSE</a></td></tr>")
   1.375 -	<tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE">$WEB_SITE</a></td></tr>
   1.376 +	<tr><td><b>$(_ 'Website')</b></td><td><a href="$WEB_SITE" target="_blank">$WEB_SITE</a></td></tr>
   1.377  	$(show_info_links "$TAGS" "$(_ 'Tags')" 'tag')
   1.378  	<tr><td><b>$(_ 'Sizes')</b></td><td>$PACKED_SIZE/$UNPACKED_SIZE</td></tr>
   1.379  	$(show_info_links "$DEPENDS" "$(_ 'Depends')" 'info')
   1.380 @@ -737,9 +719,16 @@
   1.381  </tbody>
   1.382  </table>
   1.383  EOT
   1.384 +
   1.385 +		# Show description
   1.386  		DESC="$(tazpkg desc $pkg)"
   1.387  		[ -n "$DESC" ] && echo "<pre>$DESC</pre>"
   1.388  
   1.389 +		# Show configuration files list
   1.390 +		CONFIGS="$(tazpkg list-config $pkg | sed 's|\(.*\)|\1 \1|')"
   1.391 +		[ -n "$CONFIGS" ] && echo "<p>$(_ 'Configuration files')</p><pre>$(printf '<a href="index.cgi?file=%s">%s</a>\n' $CONFIGS)</pre>"
   1.392 +
   1.393 +		# Show installed files list
   1.394  		if [ -d $INSTALLED/$pkg ]; then
   1.395  			cat << EOT
   1.396  <p>$(_ 'Installed files: %s' $(wc -l < $INSTALLED/$pkg/files.list))</p>
   1.397 @@ -763,157 +752,187 @@
   1.398  		# TazPkg configuration page
   1.399  		#
   1.400  		cmd=$(GET admin)
   1.401 +		pager="$(GET pager)"; pager=${pager:-$PAGE_SIZE}; pager=${pager:-100}
   1.402 +		mirror="$(GET mirror)"; mirror="${mirror%/}/"
   1.403 +		repository="$PKGS_DB/undigest/$(GET repository)"
   1.404 +		link="$(GET link)"; link=${link%/}
   1.405  		search_form; sidebar
   1.406 +		loading_msg
   1.407  
   1.408  		case "$cmd" in
   1.409  			clean)
   1.410  				rm -rf $CACHE_DIR/* ;;
   1.411  			add-mirror)
   1.412 -				# Decode url
   1.413 -				mirror=$(GET mirror)
   1.414 -				case "$mirror" in
   1.415 -				http://*|ftp://*)
   1.416 -					echo "$mirror" >> $(GET file) ;;
   1.417 -				esac ;;
   1.418 -			rm-mirror=http://*|rm-mirror=ftp://*)
   1.419 -				mirror=${cmd#rm-mirror=}
   1.420 -				sed -i -e "s@$mirror@@" -e '/^$/d' $(GET file) ;;
   1.421 -			select-mirror*)
   1.422 -				release=$(cat /etc/slitaz-release)
   1.423 -				mirror="$(GET mirror)packages/$release/"
   1.424 -				tazpkg setup-mirror $mirror | log
   1.425 -				;;
   1.426 +				echo "$mirror" >> $(GET file) ;;
   1.427 +			rm-mirror)
   1.428 +				sed -i "/^"$(echo $mirror | sed 's|/|\\/|g')"$/d" $(GET file) ;;
   1.429 +			select-mirror)
   1.430 +				tazpkg setup-mirror "${mirror}packages/$(cat /etc/slitaz-release)/" | log ;;
   1.431  			add-repo)
   1.432 -				# Decode url
   1.433 -				mirror=$(GET mirror)
   1.434 -				repository=$PKGS_DB/undigest/$(GET repository)
   1.435 -				case "$mirror" in
   1.436 -				http://*|ftp://*)
   1.437 -					mkdir -p $repository
   1.438 -					echo "$mirror" > $repository/mirror
   1.439 -					echo "$mirror" > $repository/mirrors ;;
   1.440 -				esac ;;
   1.441 -			rm-repo=*)
   1.442 -				repository=${cmd#rm-repo=}
   1.443 -				rm -rf $PKGS_DB/undigest/$repository ;;
   1.444 +				mkdir -p $repository
   1.445 +				echo "$mirror" > $repository/mirror
   1.446 +				echo "$mirror" > $repository/mirrors ;;
   1.447 +			rm-repo)
   1.448 +				rm -rf $repository ;;
   1.449  			setlink)
   1.450 -				[ -d "$(GET link)/$INSTALLED" ] && ln -fs $(GET link) $PKGS_DB/fslink ;;
   1.451 +				[ -d "$link/$INSTALLED" ] && ln -fs $link $PKGS_DB/fslink ;;
   1.452  			removelink)
   1.453  				rm -f $PKGS_DB/fslink ;;
   1.454 +			pager)
   1.455 +				TP_CONF=/etc/slitaz/tazpanel.conf
   1.456 +				if [ -z "$PAGE_SIZE" ]; then
   1.457 +					echo -e "\n# Size of packages list page\nPAGE_SIZE=\"$pager\"" >> $TP_CONF
   1.458 +				else
   1.459 +					sed -i "s|PAGE_SIZE=.*|PAGE_SIZE=\"$pager\"|" $TP_CONF
   1.460 +				fi ;;
   1.461  		esac
   1.462  
   1.463  		cat << EOT
   1.464  <h2>$(_ 'Administration')</h2>
   1.465  
   1.466 +<p>$(_ 'TazPkg administration and settings')</p>
   1.467 +
   1.468  <form method="get" action="">
   1.469  <input type="hidden" name="admin" />
   1.470  
   1.471 -<div>
   1.472 -	<p>$(_ 'TazPkg administration and settings')</p>
   1.473 -</div>
   1.474  <div id="actions">
   1.475 -	$(show_button action=saveconf)
   1.476 -	$(show_button action=listconf)
   1.477 -	$(show_button action=quickcheck)
   1.478 -	$(show_button action=fullcheck)
   1.479 +	$(show_button action=saveconf action=listconf action=quickcheck action=fullcheck)
   1.480  </div>
   1.481  </form>
   1.482  EOT
   1.483  		case "$(GET action)" in
   1.484 -				saveconf)
   1.485 -					LOADING_MSG=$(_ 'Creating the package...'); loading_msg
   1.486 +			saveconf)
   1.487 +				LOADING_MSG=$(_ 'Creating the package...'); loading_msg
   1.488 +				echo "<pre>"
   1.489 +				cd /tmp
   1.490 +				tazpkg repack-config | filter_taztools_msgs
   1.491 +				echo -n "$(_ 'Path:') "; ls /tmp/config-*.tazpkg
   1.492 +				echo "</pre>" ;;
   1.493 +			listconf)
   1.494 +				echo "<h4>$(_ 'Configuration files')</h4>"
   1.495 +				echo "<ul>"
   1.496 +				tazpkg list-config | while read file; do
   1.497 +					if [ -e $file ]; then
   1.498 +						echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>"
   1.499 +					else
   1.500 +						echo "<li>$file</li>"
   1.501 +					fi
   1.502 +				done
   1.503 +				echo "</ul>" ;;
   1.504 +			quickcheck)
   1.505 +				LOADING_MSG=$(_ 'Checking packages consistency...'); loading_msg
   1.506 +				echo "<pre>"
   1.507 +				tazpkg check
   1.508 +				echo "</pre>" ;;
   1.509 +			fullcheck)
   1.510 +				LOADING_MSG=$(_ 'Full packages check...'); loading_msg
   1.511 +				echo "<pre>"
   1.512 +				tazpkg check --full
   1.513 +				echo "</pre>" ;;
   1.514 +			dvdimage)
   1.515 +				dev=$(POST dvdimage)
   1.516 +				mkdir -p /mnt/packages 2> /dev/null
   1.517 +				echo "<pre>"
   1.518 +				mount -t iso9660 -o loop,ro $dev /mnt/packages &&
   1.519 +				/mnt/packages/install.sh &&
   1.520 +				_ '%s is installed on /mnt/packages' $dev
   1.521 +				echo "</pre>" ;;
   1.522 +			dvdusbkey)
   1.523 +				mkdir -p /mnt/packages 2> /dev/null
   1.524 +				for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \
   1.525 +					"LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do
   1.526 +					dev=$(blkid | grep "$tag" | cut -d: -f1)
   1.527 +					[ -n "$dev" ] || continue
   1.528  					echo "<pre>"
   1.529 -					cd $HOME
   1.530 -					tazpkg repack-config | filter_taztools_msgs
   1.531 -					echo -n "$(_ 'Path:') "; ls $HOME/config-*.tazpkg
   1.532 -					echo "</pre>" ;;
   1.533 -				listconf)
   1.534 -					echo "<h4>$(_ 'Configuration files')</h4>"
   1.535 -					echo "<ul>"
   1.536 -					tazpkg list-config | while read file; do
   1.537 -						if [ -e $file ]; then
   1.538 -							echo "<li><a href=\"index.cgi?file=$file\">$file</a></li>"
   1.539 -						else
   1.540 -							echo "<li>$file</li>"
   1.541 -						fi
   1.542 -					done
   1.543 -					echo "</ul>"
   1.544 -					;;
   1.545 -				quickcheck)
   1.546 -					LOADING_MSG=$(_ 'Checking packages consistency...'); loading_msg
   1.547 -					echo "<pre>"
   1.548 -					tazpkg check
   1.549 -					echo "</pre>" ;;
   1.550 -				fullcheck)
   1.551 -					LOADING_MSG=$(_ 'Full packages check...'); loading_msg
   1.552 -					echo "<pre>"
   1.553 -					tazpkg check --full
   1.554 -					echo "</pre>" ;;
   1.555 -				esac
   1.556 +					mount -t iso9660 -o ro $dev /mnt/packages &&
   1.557 +					/mnt/packages/install.sh &&
   1.558 +					_ '%s is installed on /mnt/packages' $dev
   1.559 +					echo "</pre>"
   1.560 +					break
   1.561 +				done ;;
   1.562 +		esac
   1.563  
   1.564 -		cache_files=$(find $CACHE_DIR -name *.tazpkg | wc -l)
   1.565 +		cache_files=$(find $CACHE_DIR -name '*.tazpkg' | wc -l)
   1.566  		cache_size=$(du -sh $CACHE_DIR | cut -f1 | sed 's|\.0||')
   1.567  		[ "$cache_files" == 0 ] && cache_size="0K"
   1.568 +		mirror=$(cat $PKGS_DB/mirror)
   1.569 +		default_mirror=${mirror%/packages/*}
   1.570  		cat << EOT
   1.571 +<article>
   1.572  <h3>$(_ 'Packages cache')</h3>
   1.573  
   1.574 -<div>
   1.575 -	<form method="get" action="">
   1.576 -		<p>$(_ 'Packages in the cache: %s (%s)' $cache_files $cache_size)
   1.577 -			$(show_button admin=clean)
   1.578 -			<!--input type="hidden" name="admin" value="clean" />
   1.579 -			<input type="submit" value="$(_n 'Clean')" /-->
   1.580 -		</p>
   1.581 -	</form>
   1.582 -</div>
   1.583 +<form method="get" action="">
   1.584 +	<p>$(_ 'Packages in the cache: %s (%s)' $cache_files $cache_size)
   1.585 +		$(show_button admin=clean)
   1.586 +	</p>
   1.587 +</form>
   1.588 +</article>
   1.589  
   1.590 -<h3>$(_ 'Default mirror')</h3>
   1.591  
   1.592 -<pre>$(cat $PKGS_DB/mirror)</pre>
   1.593 -
   1.594 +<article>
   1.595  <h3>$(_ 'Current mirror list')</h3>
   1.596  EOT
   1.597 +
   1.598 +		# List mirrors
   1.599 +		version=$(cat /etc/slitaz-release)
   1.600  		for i in $PKGS_DB/mirrors $PKGS_DB/undigest/*/mirrors; do
   1.601  			[ -s $i ] || continue
   1.602 -			echo '<div class="box">'
   1.603  			if [ $i != $PKGS_DB/mirrors ]; then
   1.604 -				Repo_Name="$(repo_name $(dirname $i))"
   1.605 -				echo "<h4>$(_ 'Repository: %s' $Repo_Name)</h4>"
   1.606 +				echo "<h4>$(_ 'Repository: %s' "$(repo_name $(dirname $i))")</h4>"
   1.607  			fi
   1.608 -			echo "<ul>"
   1.609 -			list_mirrors $i
   1.610 -			echo "</ul>"
   1.611  			cat << EOT
   1.612 -</div>
   1.613 +<form method="get" action="">
   1.614 +<input type="hidden" name="admin" value="select-mirror"/>
   1.615 +<table class="zebra">
   1.616 +EOT
   1.617 +			while read line; do
   1.618 +				cat << EOT
   1.619 +<tr>
   1.620 +	<td>
   1.621 +		<input type="radio" name="mirror" id="$line" value="$line" onchange="this.form.submit()"
   1.622 +			$([ "$line" == "$default_mirror/" ] && echo -n 'checked="checked"')>
   1.623 +		<label for="$line"><code>$line</code></label></td>
   1.624 +	<td><a class="w" href="$line" target="_blank"></a></td>
   1.625 +	<td><a href="?admin=rm-mirror&amp;mirror=$line&amp;file=$i">
   1.626 +			<img src="$IMAGES/tp-remove.png" title="$(_ 'Delete')"/></a></td>
   1.627 +</tr>
   1.628 +EOT
   1.629 +			done < $i
   1.630 +			cat << EOT
   1.631 +</table>
   1.632 +</form>
   1.633 +
   1.634  <form method="get" action="">
   1.635  	<p>
   1.636 -		<input type="hidden" name="admin" value="add-mirror" />
   1.637  		<input type="hidden" name="file" value="$i" />
   1.638 -		<input type="text" name="mirror" size="60">
   1.639 -		<input type="submit" value="$(_n 'Add mirror')" />
   1.640 +		<input type="text" name="mirror" size="40" />
   1.641 +		$(show_button admin=add-mirror)
   1.642  	</p>
   1.643  </form>
   1.644  EOT
   1.645  		done
   1.646 +		echo "</article><article>"
   1.647  		echo "<h3>$(_ 'Private repositories')</h3>"
   1.648 -		[ -n "$(ls $PKGS_DB/undigest 2> /dev/null)" ] && cat << EOT
   1.649 -<div class="box">
   1.650 -	<ul>
   1.651 -		$(list_repos)
   1.652 -	</ul>
   1.653 -</div>
   1.654 +		if [ -n "$(ls $PKGS_DB/undigest 2> /dev/null)" ]; then
   1.655 +			echo '<table class="zebra">'
   1.656 +			ls $PKGS_DB/undigest 2> /dev/null | while read repo ; do
   1.657 +				cat <<EOT
   1.658 +	<tr><td><a href="?admin=rm-repo&amp;repository=$repo"><img src="$IMAGES/tp-remove.png" title="$(_ 'Delete')"></a>$repo</td></tr>
   1.659  EOT
   1.660 +			done
   1.661 +			echo '</table>'
   1.662 +		fi
   1.663 +
   1.664  		cat << EOT
   1.665  <form method="get" action="">
   1.666 -	<p>
   1.667 -		<input type="hidden" name="admin" value="add-repo" />
   1.668 -		$(_ 'Name') <input type="text" name="repository" size="10">
   1.669 -		$(_ 'mirror')
   1.670 -		<input type="text" name="mirror" value="http://" size="50">
   1.671 -		<input type="submit" value="$(_n 'Add repository')" />
   1.672 -	</p>
   1.673 +	<p>$(_ 'Name') <input type="text" name="repository" size="10"/>
   1.674 +	$(_ 'URL:') <input type="text" name="mirror" value="http://">
   1.675 +	$(show_button admin=add-repo)</p>
   1.676  </form>
   1.677 +</article>
   1.678  
   1.679 +
   1.680 +<article>
   1.681  <h3>$(_ 'Link to another SliTaz installation')</h3>
   1.682  
   1.683  <p>$(_ "This link points to the root of another SliTaz installation. \
   1.684 @@ -921,15 +940,14 @@
   1.685  
   1.686  <form method="get" action="">
   1.687  <p>
   1.688 -	<input type="text" name="link" value="$(readlink $PKGS_DB/fslink 2> /dev/null)" size="50">
   1.689 -	$(show_button admin=setlink)
   1.690 -	$(show_button admin=removelink)
   1.691 +	<input type="text" name="link" value="$(readlink $PKGS_DB/fslink 2> /dev/null)"/>
   1.692 +	$(show_button admin=setlink admin=removelink)
   1.693  </p>
   1.694  </form>
   1.695 -EOT
   1.696 -		version=$(cat /etc/slitaz-release)
   1.697 -		cat << EOT
   1.698 +</article>
   1.699  
   1.700 +
   1.701 +<article>
   1.702  <h3 id="dvd">$(_ 'SliTaz packages DVD')</h3>
   1.703  
   1.704  <p>$(_ "A bootable DVD image of all available packages for the %s version is \
   1.705 @@ -937,45 +955,30 @@
   1.706  without an internet connection. This image can be installed on a DVD or a USB \
   1.707  key." $version)</p>
   1.708  
   1.709 -<div>
   1.710 -	<form method="post" action='?admin&amp;action=dvdimage#dvd'>
   1.711 -	<p>
   1.712 -		<a class="button"
   1.713 -			href='http://mirror.slitaz.org/iso/$version/packages-$version.iso'>
   1.714 -			<img src="$IMAGES/tazpkg.png" />$(_ 'Download DVD image')</a>
   1.715 -		<a class="button" href='?admin&amp;action=dvdusbkey#dvd'>
   1.716 -			<img src="$IMAGES/tazpkg.png" />$(_ 'Install from DVD/USB key')</a>
   1.717 -	</p>
   1.718 -	<div class="box">
   1.719 -		$(_ 'Install from ISO image:')
   1.720 -		<input type="text" name="dvdimage" size="40" value="/root/packages-$version.iso">
   1.721 -	</div>
   1.722 -	</form>
   1.723 +<button class="button" onclick='http://mirror.slitaz.org/iso/$version/packages-$version.iso'>
   1.724 +	<img src="$IMAGES/tp-dl-dvd.png" />$(_ 'Download DVD image')</button>
   1.725 +<button class="button" onclick='?admin&amp;action=dvdusbkey'>
   1.726 +	<img src="$IMAGES/tp-link.png" />$(_ 'Install from DVD/USB key')</button>
   1.727 +<div class="box">
   1.728 +	<form method="post" action='?admin&amp;action=dvdimage'>
   1.729 +	$(_ 'Install from ISO image:')
   1.730 +	<input type="text" name="dvdimage" size="40" value="/root/packages-$version.iso" />
   1.731  </div>
   1.732 +</form>
   1.733 +</article>
   1.734 +
   1.735 +
   1.736 +<article>
   1.737 +<h3>$(_ 'Packages list')</h3>
   1.738 +
   1.739 +<p>$(_ 'Long list of packages is paginated. Here you can set the page size (default: 100, turning off the pager: 0).')</p>
   1.740 +<form method="get" action="">
   1.741 +	<input type="hidden" name="admin" value="pager" />
   1.742 +	<input type="number" name="pager" value="$pager" min="0" step="10" size="4" />
   1.743 +	<button class="button" type="submit">$(_ 'Set')</button>
   1.744 +</form>
   1.745 +</article>
   1.746  EOT
   1.747 -		if [ "$(GET action)" == "dvdimage" ]; then
   1.748 -			dev=$(POST dvdimage)
   1.749 -			mkdir -p /mnt/packages 2> /dev/null
   1.750 -			echo "<pre>"
   1.751 -			mount -t iso9660 -o loop,ro $dev /mnt/packages &&
   1.752 -			/mnt/packages/install.sh &&
   1.753 -			_ '%s is installed on /mnt/packages' $dev
   1.754 -			echo "</pre>"
   1.755 -		fi
   1.756 -		if [ "$(GET action)" == "dvdusbkey" ]; then
   1.757 -			mkdir -p /mnt/packages 2> /dev/null
   1.758 -			for tag in "LABEL=\"packages-$version\" TYPE=\"iso9660\"" \
   1.759 -				"LABEL=\"sources-$version\" TYPE=\"iso9660\"" ; do
   1.760 -				dev=$(blkid | grep "$tag" | cut -d: -f1)
   1.761 -				[ -n "$dev" ] || continue
   1.762 -				echo "<pre>"
   1.763 -				mount -t iso9660 -o ro $dev /mnt/packages &&
   1.764 -				/mnt/packages/install.sh &&
   1.765 -				_ '%s is installed on /mnt/packages' $dev
   1.766 -				echo "</pre>"
   1.767 -				break
   1.768 -			done
   1.769 -		fi
   1.770  		;;
   1.771  
   1.772  
   1.773 @@ -987,79 +990,71 @@
   1.774  
   1.775  		pkg=$(GET license)
   1.776  		case $pkg in
   1.777 -			/*)
   1.778 -				[ -e $pkg ] && {
   1.779 +			/*)	[ -e $pkg ] && {
   1.780  				echo "<h2>${pkg#/usr/share/licenses/}</h2>"
   1.781  				case $pkg in
   1.782 -					*.htm*)
   1.783 -						cat $pkg ;;
   1.784 -					*)
   1.785 -						echo "<pre style=\"white-space: pre-wrap\">"
   1.786 +					*.htm*) cat $pkg ;;
   1.787 +					*)	echo "<pre style=\"white-space: pre-wrap\">"
   1.788  						cat $pkg | htmlize | sed 's|\([hf]t*t*ps*://[a-zA-Z0-9./_-]*[a-zA-Z0-9/_-]\)|<a href="\1">\1</a>|'
   1.789  						echo "</pre>"
   1.790  						;;
   1.791  				esac
   1.792  				} ;;
   1.793 -			*)
   1.794 -				echo "<h2>$(_ 'Licenses for package %s' $pkg)</h2>"
   1.795 -				ONLINE=''; OFFLINE=''
   1.796 -
   1.797 +			*)	echo "<h2>$(_ 'Licenses for package %s' $pkg)</h2>"
   1.798 +				OFFLINE=''
   1.799  				if [ -e "$PKGS_DB/installed/$pkg" ]; then
   1.800 -					for license in $(. $PKGS_DB/installed/$pkg/receipt; echo "$LICENSE"); do
   1.801 -						OSL=''; GNU=''; USR=''; LIC=''
   1.802 -						case $license in
   1.803 -							Apache)			OSL='Apache-2.0'; URL='http://www.apache.org/licenses/' ;;
   1.804 -							Artistic)		OSL='Artistic-2.0' ;;
   1.805 -							BSD)			OSL='BSD-2-Clause' ;;
   1.806 -							BSD3)			OSL='BSD-3-Clause' ;;
   1.807 -
   1.808 -							CC-BY-SA*|CC-SA*)	CCO='by-sa/4.0/' ;;
   1.809 -							CC-BY-ND*)		CCO='by-nd/4.0/' ;;
   1.810 -							CC-BY-NC-SA*)	CCO='by-nc-sa/4.0/' ;;
   1.811 -							CC-BY-NC-ND*)	CCO='by-nc-nd/4.0/' ;;
   1.812 -							CC-BY-NC*)		CCO='by-nc/4.0/' ;;
   1.813 -							CC-BY*)			CCO='by/4.0/' ;;
   1.814 -
   1.815 -							cc-pd)			URL='http://creativecommons.org/publicdomain/' ;;
   1.816 -							CCPL)			;;
   1.817 -							CDDL*)			OSL='CDDL-1.0' ;;
   1.818 -							CECILL*)		OSL='CECILL-2.1' ;;
   1.819 -							Eclipse|EPL*)	OSL='EPL-1.0' ;;
   1.820 -							FDL)			GNU='fdl' ;;
   1.821 -							GPL)			GNU='gpl'; OSL='gpl-license'; LIC='gpl.txt' ;;
   1.822 -							GPL2)			GNU='old-licenses/gpl-2.0'; OSL='GPL-2.0' ;;
   1.823 -							GPL3)			GNU='gpl'; OSL='GPL-3.0'; LIC='gpl.txt' ;;
   1.824 -							ISC)			OSL='ISC' ;;
   1.825 -							LGPL)			GNU='lgpl'; OSL='lgpl-license' ;;
   1.826 -							LGPL2)			GNU='old-licenses/lgpl-2.0' ;;
   1.827 -							LGPL2.1)		GNU='old-licenses/lgpl-2.1'; OSL='LGPL-2.1'; LIC='lgpl.txt' ;;
   1.828 -							LGPL3)			GNU='lgpl'; OSL='LGPL-3.0' ;;
   1.829 -							LPPL*)			OSL='LPPL-1.3c' ;;
   1.830 -							MIT)			OSL='MIT'; LIC='mit.txt' ;;
   1.831 -							MPL)			OSL='MPL-2.0'; LIC='mozilla.txt' ;;
   1.832 -							MPL2)			OSL='MPL-2.0' ;;
   1.833 -							FL)				OSL='Fair' ;; # ?
   1.834 -							PSL)			;;
   1.835 -							PublicDomain)	;;
   1.836 -							QPL*)			OSL='QPL-1.0' ;;
   1.837 -							SIL_OFL*)		OSL='OFL-1.1' ;;
   1.838 -							zlib/libpng)	OSL='Zlib' ;;
   1.839 -						esac
   1.840 -
   1.841 -						[ -n "$OSL" ] && ONLINE="$ONLINE	<li><a href=\"http://opensource.org/licenses/$OSL\">$(_ '%s license on %s website' "<b>$OSL</b>" "OSL")</a></li>\n"
   1.842 -						[ -n "$GNU" ] && ONLINE="$ONLINE	<li><a href=\"https://www.gnu.org/licenses/$GNU.html\">$(_ '%s license on %s website' "<b>${GNU#*/}</b>" "GNU")</a></li>\n"
   1.843 -						[ -n "$CCO" ] && ONLINE="$ONLINE	<li><a href=\"http://creativecommons.org/licenses/$CCO\">$(_ '%s license on %s website' "<b>${CCO%%/*}</b>" "Creative Commons")</a></li>\n"
   1.844 -						[ -n "$URL" ] && ONLINE="$ONLINE	<li><a href=\"$URL\">$URL</a></li>\n"
   1.845 -						[ -n "$LIC" ] && OFFLINE="$OFFLINE	<li><a href=\"?license=/usr/share/licenses/$LIC\">licenses/<b>$LIC</b></a></li>\n"
   1.846 -					done
   1.847 -
   1.848  					for lic in $(grep /usr/share/licenses/ $PKGS_DB/installed/$pkg/files.list); do
   1.849  						OFFLINE="$OFFLINE	<li><a href=\"?license=$lic\">licenses/<b>${lic#/usr/share/licenses/}</b></a></li>\n"
   1.850  					done
   1.851 -				fi
   1.852 -				[ -n "$ONLINE" ] && echo -e "<p>$(_ 'Read online:')</p>\n<ul>\n$ONLINE</ul>\n"
   1.853 -				[ -n "$OFFLINE" ] && echo -e "<p>$(_ 'Read local:')</p>\n<ul>\n$OFFLINE</ul>\n"
   1.854 -				;;
   1.855 +					echo "\
   1.856 +Apache|Apache-2.0||||http://www.apache.org/licenses/#Artistic|Artistic-2.0||||#\
   1.857 +BSD|BSD-2-Clause||||#BSD3|BSD-3-Clause||||#CC-BY-SA||by-sa/4.0/|||#\
   1.858 +CC-SA||by-sa/4.0/|||#CC-BY-ND||by-nd/4.0/|||#CC-BY-NC-SA||by-nc-sa/4.0/|||#\
   1.859 +CC-BY-NC-ND||by-nc-nd/4.0/|||#CC-BY-NC||by-nc/4.0/|||#CC-BY||by/4.0/|||#\
   1.860 +cc-pd|||||http://creativecommons.org/publicdomain/#CDDL|CDDL-1.0||||#\
   1.861 +CECILL|CECILL-2.1||||#Eclipse|EPL-1.0||||#EPL|EPL-1.0||||#FDL|||fdl||#\
   1.862 +GPL|gpl-license||gpl|gpl.txt|#GPL2|GPL-2.0||old-licenses/gpl-2.0||#\
   1.863 +GPL3|GPL-3.0||gpl|gpl.txt|#ISC|ISC||||#LGPL|lgpl-license||lgpl||#\
   1.864 +LGPL2|||old-licenses/lgpl-2.0||#\
   1.865 +LGPL2.1|LGPL-2.1||old-licenses/lgpl-2.1|lgpl.txt|#LGPL3|LGPL-3.0||lgpl||#\
   1.866 +LPPL|LPPL-1.3c||||#MIT|MIT|||mit.txt|#MPL|MPL-2.0|||mozilla.txt|#\
   1.867 +MPL2|MPL-2.0||||#PublicDomain|||||http://creativecommons.org/publicdomain/#\
   1.868 +QPL|QPL-1.0||||#SIL_OFL|OFL-1.1||||#OFL|OFL-1.1||||#zlib/libpng|Zlib||||" | \
   1.869 +awk -vlicenses="$(. $PKGS_DB/installed/$pkg/receipt; echo "$LICENSE")" \
   1.870 +					-vtext="$(_ '%s license on %s website' %s %s)" \
   1.871 +					-vro="$(_ 'Read online:')" -vrl="$(_ 'Read local:')" \
   1.872 +					-vofflic="$OFFLINE" '
   1.873 +BEGIN{ FS="|"; RS="#"; split(licenses, lic, " "); if (offlic) OFFLINE[0]=offlic }
   1.874 +function link1(u, l, ll, w) {
   1.875 +	return sprintf("\t<li><a href=\"%s%s\">" text "</a></li>", u, l, "<b>" ll "</b>", w) }
   1.876 +function link2(u, l, ll) {
   1.877 +	return sprintf("\t<li><a href=\"%s%s\">%s</b></a></li>", u, l, ll) }
   1.878 +function link_osl(n) {
   1.879 +	return link1("http://opensource.org/licenses/", n, n, "OSL") }
   1.880 +function link_cc(n) {
   1.881 +	split(n, ll, "/")
   1.882 +	return link1("http://creativecommons.org/licenses/", n, ll[1], "Creative Commons") }
   1.883 +function link_gnu(n) {
   1.884 +	split(n, ll, "/")
   1.885 +	return link1("https://www.gnu.org/licenses/", n ".html", ll[2] ? ll[2] : ll[1], "GNU") }
   1.886 +function link_loc(n) {
   1.887 +	return link2("?license=/usr/share/licenses/", n, "licenses/<b>" n "</b>") }
   1.888 +function link_url(n) {
   1.889 +	return link2(n, "", n) }
   1.890 +{
   1.891 +	if ($1 == lic[1] || $1 == lic[2] || $1 == lic[3] || $1 == lic[4]) {
   1.892 +		if ($2) ONLINE[$2]=link_osl($2)
   1.893 +		if ($3) ONLINE[$3]=link_cc($3)
   1.894 +		if ($4) ONLINE[$4]=link_gnu($4)
   1.895 +		if ($5) OFFLINE[$5]=link_loc($5)
   1.896 +		if ($6) OFFLINE[$6]=link_url($6)
   1.897 +	}
   1.898 +}
   1.899 +END{
   1.900 +	if (length(ONLINE)  > 0) { print "<p>" ro "</p>\n<ul>"; for (o in ONLINE)  print ONLINE[o]; print "</ul>"  }
   1.901 +	if (length(OFFLINE) > 0) { print "<p>" rl "</p>\n<ul>"; for (o in OFFLINE) print OFFLINE[o]; print "</ul>" }
   1.902 +}'
   1.903 +				fi ;;
   1.904  		esac
   1.905  		;;
   1.906  
   1.907 @@ -1076,11 +1071,14 @@
   1.908  			Any) title="$(_ 'List of tags in all repositories')" ;;
   1.909  			*)   title="$(_ 'List of tags in repository "%s"' "$brepo")" ;;
   1.910  		esac
   1.911 -		echo "<p>$title</p><p>"
   1.912 +		echo "<p>$title</p><p id=\"tags\">"
   1.913  		to_read=""
   1.914  		for i in $(repo_list ""); do
   1.915 -			if [ ! -e $i/packages.info ] && [ $repo == 'Public' ]; then
   1.916 -				list=installed; else list=packages; fi
   1.917 +			if [ ! -e $i/packages.info ]; then
   1.918 +				list=installed
   1.919 +			else
   1.920 +				list=packages
   1.921 +			fi
   1.922  			to_read="$to_read $i/$list.info"
   1.923  		done
   1.924  		TAGS="$(awk -F$'\t' '{if($6){print $6}}' $to_read | tr ' ' $'\n' | sort | uniq -c)"
   1.925 @@ -1105,9 +1103,10 @@
   1.926  <form method="get" action="">
   1.927  <div id="actions">
   1.928  	<div class="float-left">
   1.929 -		$(_ 'Selection:')
   1.930 -		<input type="submit" name="do" value="Install" />
   1.931 -		<input type="submit" name="do" value="Remove" />
   1.932 +		$(_ 'Selection:'; show_button do=Install do=Remove)
   1.933 +	</div>
   1.934 +	<div class="float-right">
   1.935 +		$(show_button tags)
   1.936  	</div>
   1.937  </div>
   1.938  EOT
   1.939 @@ -1150,8 +1149,6 @@
   1.940  		#
   1.941  		search_form; sidebar
   1.942  
   1.943 -		[ -n "$(GET block)" ] && tazpkg block $(GET block)
   1.944 -		[ -n "$(GET unblock)" ] && tazpkg unblock $(GET unblock)
   1.945  		cat << EOT
   1.946  <h2>$(_ 'Summary')</h2>
   1.947  
   1.948 @@ -1160,19 +1157,23 @@
   1.949  EOT
   1.950  		fslink=$(readlink $PKGS_DB/fslink)
   1.951  		[ -n "$fslink" -a -d "$fslink/$INSTALLED" ] && show_button linkable
   1.952 -		show_button recharge
   1.953 -		show_button up
   1.954 -		show_button admin
   1.955 +		show_button recharge up admin
   1.956  		cat << EOT
   1.957  </div>
   1.958  
   1.959 +<article>
   1.960 +<h3>$(_ 'Summary')</h3>
   1.961  <table class="zebra summary">
   1.962  <tbody>
   1.963  <tr>
   1.964  	<td>$(_ 'Last recharge:')</td>
   1.965 -	<td>$(list=$PKGS_DB/packages.info
   1.966 +	<td>$(list=$PKGS_DB/ID
   1.967  	if [ -e $list ]; then
   1.968 -		$((days=$(date +%s)/86400-$(date -r $list +%s)/86400))
   1.969 +		ohhmm="$(date +%z)"							# '+0200' for EET (+2 hours)
   1.970 +		offset=$(( 60 * (60 * ${ohhmm:0:3} + ${ohhmm:3:2}) )) # in the seconds
   1.971 +		daynow=$(( ($(date          +%s) + $offset) / 86400 ))
   1.972 +		dayupd=$(( ($(date -r $list +%s) + $offset) / 86400 ))
   1.973 +		days=$(( $daynow - $dayupd ))
   1.974  		time=$(date -r $list +%R)
   1.975  		ago="$(_p '%d day ago.' '%d days ago.' $days $days)"
   1.976  		case $days in
   1.977 @@ -1190,31 +1191,38 @@
   1.978  	fi)</td></tr>
   1.979  <tr>
   1.980  	<td>$(_ 'Installed packages:')</td>
   1.981 -	<td><b>$(cat $PKGS_DB/installed.info | wc -l)</a></b>
   1.982 -		<a href="?list&amp;my=my&amp;cat=all&amp;repo=Any">$(_ '(show)')</a></td></tr>
   1.983 +	<td><a href="?list&amp;my=my&amp;cat=all&amp;repo=Any">
   1.984 +			<b>$(cat $PKGS_DB/installed.info | wc -l)</b>
   1.985 +		</a></td></tr>
   1.986  <tr>
   1.987  	<td>$(_ 'Mirrored packages:')</td>
   1.988 -	<td><b>$(cat $PKGS_DB/packages.list | wc -l)</b></td></tr>
   1.989 +	<td><a href="?list&amp;my=no&amp;cat=all&amp;repo=Any">
   1.990 +		<b>$(cat $PKGS_DB/packages.list | wc -l)</b>
   1.991 +	</a></td></tr>
   1.992  <tr>
   1.993  	<td>$(_ 'Upgradeable packages:')</td>
   1.994 -	<td><b>$(cat $PKGS_DB/packages.up | wc -l)</b>
   1.995 -		<a href="?up">$(_ '(show)')</a></td></tr>
   1.996 +	<td><a href="?up">
   1.997 +			<b>$(cat $PKGS_DB/packages.up | wc -l)</b>
   1.998 +		</a></td></tr>
   1.999  <tr>
  1.1000  	<td>$(_ 'Installed files:')</td>
  1.1001  	<td><b>$(cat $INSTALLED/*/files.list | wc -l)</b></td></tr>
  1.1002  <tr>
  1.1003  	<td>$(_ 'Blocked packages:')</td>
  1.1004 -	<td><b>$(cat $PKGS_DB/blocked-packages.list | wc -l)</b>
  1.1005 -		<a href="?blocked">$(_ '(show)')</a></td></tr>
  1.1006 +	<td><a href="?blocked">
  1.1007 +			<b>$(cat $PKGS_DB/blocked-packages.list | wc -l)</b>
  1.1008 +		</a></td></tr>
  1.1009  </tbody>
  1.1010 -</table>
  1.1011 +</table></article>
  1.1012  
  1.1013 +<article>
  1.1014  <h3>$(_ 'Latest log entries')</h3>
  1.1015  
  1.1016  <pre>
  1.1017 -$(tail -n 5 $LOG | fgrep "-" | awk '{print $1, $2, $3, $4, $5, $6, $7}')
  1.1018 +$(tail -n 5 $LOG | fgrep "-" | awk '{print $1, $2, $3, $4, $5, "<a href=\"?info=" $6 "\">" $6 "</a>", $7}')
  1.1019  <a href="index.cgi?file=$LOG">$(_ 'more...')</a>
  1.1020  </pre>
  1.1021 +</article>
  1.1022  EOT
  1.1023  		;;
  1.1024  esac