slitaz-forge diff pkgs/search.sh @ rev 605

mirror, pkgs: synchronize current changes
author Aleksej Bobylev <al.bobylev@gmail.com>
date Mon Nov 30 01:03:59 2015 +0200 (2015-11-30)
parents d50b1e11ce39
children 1d250e4f3640
line diff
     1.1 --- a/pkgs/search.sh	Sun Oct 25 06:47:13 2015 +0200
     1.2 +++ b/pkgs/search.sh	Mon Nov 30 01:03:59 2015 +0200
     1.3 @@ -38,8 +38,9 @@
     1.4  			de) LANG='de_DE';;
     1.5  			en) LANG='en_US';;
     1.6  			es) LANG='es_ES';;
     1.7 +			fa) LANG='fa_IR';;
     1.8  			fr) LANG='fr_FR';;
     1.9 -			it) LANG='it_IT';;
    1.10 +			#it) LANG='it_IT';;		# We haven't Italian translations
    1.11  			pl) LANG='pl_PL';;
    1.12  			pt) LANG='pt_BR';;
    1.13  			ru) LANG='ru_RU';;
    1.14 @@ -152,6 +153,7 @@
    1.15  
    1.16  # Cache icons to fast search
    1.17  # Find the latest update in the "icons" folder
    1.18 +unset ICONS_CACHE_REBUILDED
    1.19  iconslast="$cache/icons.$(date -u +%s -r /var/www/pkgs/icons/$(ls -t /var/www/pkgs/icons | head -n1))"
    1.20  
    1.21  if [ ! -f "$iconslast" ]; then
    1.22 @@ -163,8 +165,12 @@
    1.23  		awk '{printf "%s\tfont\n",$1}' icons/packages-font.icons
    1.24  		awk '{printf "%s\ti18n\n",$1}' icons/packages-i18n.icons
    1.25  		awk '{printf "%s\tthm\n",$1}'  icons/packages-thm.icons
    1.26 +		awk '{printf "%s\tlib\n",$1}'  icons/packages-lib.icons
    1.27 +		awk '{printf "%s\tpy\n",$1}'   icons/packages-py.icons
    1.28 +		awk '{printf "%s\tperl\n",$1}' icons/packages-perl.icons
    1.29  		ls icons/*.png | awk -F/ '{sub(/\.png/,"",$2);printf "%s\t%s\n", $2, $2}'
    1.30  	) | sort > "$iconslast"
    1.31 +	ICONS_CACHE_REBUILDED='yes'
    1.32  fi
    1.33  
    1.34  
    1.35 @@ -202,6 +208,7 @@
    1.36  	esac
    1.37  done
    1.38  [ -z "$SLITAZ_VERSION" ] && SLITAZ_VERSION='cooking'
    1.39 +addver=''; [ "$SLITAZ_VERSION" != 'cooking' ] && addver="&amp;version=$SLITAZ_VERSION"
    1.40  SEARCH="${SEARCH//%20/ }"
    1.41  
    1.42  #
    1.43 @@ -233,6 +240,16 @@
    1.44  equiv="$pkgsrepo/packages.equiv"
    1.45  pinfo="$pkgsrepo/packages.info"
    1.46  
    1.47 +# Date of the last modification (both packages DB or icons DB)
    1.48 +if [ -f "$pkgsrepo/ID" ]; then
    1.49 +	if [ "$iconslast" -nt "$pkgsrepo/ID" ]; then
    1.50 +		lastmod="$(date -Rur "$iconslast")"
    1.51 +	else
    1.52 +		lastmod="$(date -Rur "$pkgsrepo/ID")"
    1.53 +	fi
    1.54 +	lastmod="${lastmod/UTC/GMT}"
    1.55 +fi
    1.56 +
    1.57  
    1.58  
    1.59  
    1.60 @@ -249,20 +266,20 @@
    1.61  <form id="s_form" name="s_form" method="post" action="$(ifdebug '?')">
    1.62  	<span class="small">
    1.63  		<select name="object">
    1.64 -			<option value="Package">$(					_ 'Package name')</option>
    1.65 -			<option $sel_desc value="Desc">$(			_ 'Description')</option>
    1.66 -			<option $sel_tags value="Tags">$(			_ 'Tag')</option>
    1.67 -			<option $sel_arch value="Arch">$(			_ 'Architecture')</option>
    1.68 -			<option $sel_bugs value="Bugs">$(			_ 'Bugs')</option>
    1.69 -			<option $sel_rcpt value="Receipt">$(		_ 'Receipt')</option>
    1.70 -			<option $sel_deps value="Depends">$(		_ 'Dependencies')</option>
    1.71 -			<option $sel_bdps value="BuildDepends">$(	_ 'Build dependencies')</option>
    1.72 -			<option $sel_file value="File">$(			_ 'File')</option>
    1.73 -			<option $sel_flst value="File_list">$(		_ 'File list')</option>
    1.74 -			<option $sel_over value="FileOverlap">$(	_ 'Common files')</option>
    1.75 -			<option $sel_catg value="Category">$(		_ 'Category')</option>
    1.76 -			<option $sel_mtnr value="Maintainer">$(		_ 'Maintainer')</option>
    1.77 -			<option $sel_lcns value="License">$(		_ 'License')</option>
    1.78 +			<option value="Package" class="pkg">$(_ 'Package name')</option>
    1.79 +			<option $sel_desc value="Desc" class="description">$(_ 'Description')</option>
    1.80 +			<option $sel_tags value="Tags" class="tag">$(_ 'Tag')</option>
    1.81 +			<option $sel_arch value="Arch" class="arch">$(_ 'Architecture')</option>
    1.82 +			<option $sel_bugs value="Bugs" class="bugs">$(_ 'Bugs')</option>
    1.83 +			<option $sel_rcpt value="Receipt" class="receipt">$(_ 'Receipt')</option>
    1.84 +			<option $sel_deps value="Depends" class="dep">$(_ 'Dependencies')</option>
    1.85 +			<option $sel_bdps value="BuildDepends" class="dep">$(_ 'Build dependencies')</option>
    1.86 +			<option $sel_file value="File" class="file">$(_ 'File')</option>
    1.87 +			<option $sel_flst value="File_list" class="files-list">$(_ 'File list')</option>
    1.88 +			<option $sel_over value="FileOverlap" class="common">$(_ 'Common files')</option>
    1.89 +			<option $sel_catg value="Category" class="category">$(_ 'Category')</option>
    1.90 +			<option $sel_mtnr value="Maintainer" class="avatar">$(_ 'Maintainer')</option>
    1.91 +			<option $sel_lcns value="License" class="license">$(_ 'License')</option>
    1.92  		</select>
    1.93  	</span>
    1.94  	<span class="stretch">
    1.95 @@ -338,22 +355,38 @@
    1.96  
    1.97  	PKGS=$( cat "$cache/stat.p.$SLITAZ_VERSION.$repoid")
    1.98  	FILES=$(cat "$cache/stat.f.$SLITAZ_VERSION.$repoid")
    1.99 -	echo -n '<div class="summary">'
   1.100 +	echo -en '\n<div class="summary">'
   1.101  	_p '%s package' '%s packages' "$PKGS" \
   1.102  		"$PKGS"
   1.103  	_p ' and %s file in %s database' ' and %s files in %s database' "$FILES" \
   1.104  		"$FILES" "$SLITAZ_VERSION"
   1.105 +
   1.106 +	# Date of the last update...
   1.107 +	echo -n ' ('
   1.108 +	if [ -e "$pkgsrepo/IDs" ]; then
   1.109 +		# ...based on the value inside IDs
   1.110 +		date +"%c" -d@$(cut -d' ' -f2 "$pkgsrepo/IDs") | tr -d '\n'
   1.111 +	elif [ -e "$pkgsrepo/ID" ]; then
   1.112 +		# ...based on the date of ID
   1.113 +		date +"%c" -r "$pkgsrepo/ID" | tr -d '\n'
   1.114 +	else
   1.115 +		# ...based on the date of the newest file
   1.116 +		date +"%c" -r "$pkgsrepo/$(ls -Lt "$pkgsrepo" | head -n1)" | tr -d '\n'
   1.117 +	fi
   1.118 +	echo -n ')'
   1.119 +
   1.120  	cat <<EOT
   1.121  </div>
   1.122  </main>
   1.123  
   1.124 -<footer>
   1.125  EOT
   1.126  
   1.127  	local lang="${LANG%_*}"
   1.128  	if [ -e "lib/footer.$lang.sh" ]; then
   1.129 +		echo '<footer>'
   1.130  		. lib/footer.$lang.sh
   1.131  	else
   1.132 +		echo '<footer dir="ltr">'
   1.133  		. lib/footer.sh
   1.134  	fi
   1.135  
   1.136 @@ -390,7 +423,7 @@
   1.137  </body>
   1.138  </html>
   1.139  EOT
   1.140 -
   1.141 +	exit 0
   1.142  }
   1.143  
   1.144  
   1.145 @@ -437,24 +470,26 @@
   1.146  		echo '<tr>'
   1.147  	fi
   1.148  
   1.149 -	PACKAGE_URL="$MIRROR_URL/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
   1.150 +	PACKAGE_URL="$MIRROR_URL/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRAVERSION.tazpkg"
   1.151  
   1.152  	case "$SLITAZ_VERSION" in
   1.153  		cooking)
   1.154 -			COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>";;
   1.155 +			COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>"
   1.156 +			;;
   1.157  		stable|undigest|backports)
   1.158 -			COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>";;
   1.159 +			COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\" class=\"co\" title=\"$a_co\">$a_co</a>"
   1.160 +			;;
   1.161  		*)
   1.162 -			COOKER='';;
   1.163 +			COOKER=''
   1.164 +			;;
   1.165  	esac
   1.166  
   1.167  	cat <<EOT
   1.168 -	<td class="first"><a href="?info=$PACKAGE&amp;version=$SLITAZ_VERSION"><img
   1.169 -		src="$(package_icon $PACKAGE)"/></a></td>
   1.170 +	<td class="first"><a href="?info=$PACKAGE$addver"><img src="$(package_icon $PACKAGE)" alt="$PACKAGE icon"/></a></td>
   1.171  	<td><b>$PACKAGE</b><br/>$SHORT_DESC</td>
   1.172  	<td class="last">
   1.173  		<a class="dl" href="$PACKAGE_URL" title="$a_dl">$a_dl</a>
   1.174 -		<a class="rc" href="?receipt=$PACKAGE&amp;version=$SLITAZ_VERSION" title="$a_rc">$a_rc</a>
   1.175 +		<a class="rc" href="?receipt=$PACKAGE$addver" title="$a_rc">$a_rc</a>
   1.176  		$COOKER
   1.177  	</td>
   1.178  </tr>
   1.179 @@ -467,10 +502,12 @@
   1.180  	#        $2 = query
   1.181  
   1.182  	awk -F$'\t' -vtype="$1" -vquery="$2" -vmurl="$MIRROR_URL" -vver="$SLITAZ_VERSION" \
   1.183 -		-vaco="$a_co" -vadl="$a_dl" -varc="$a_rc" -viconslast="$iconslast" '
   1.184 +		-vaco="$a_co" -vadl="$a_dl" -varc="$a_rc" -viconslast="$iconslast" \
   1.185 +		-vnf="$(_ 'Nothing found')" -vaddver="$addver" '
   1.186  BEGIN {
   1.187  	IGNORECASE = 1;
   1.188  	print "<table class=\"list\">";
   1.189 +	notfound = "y";
   1.190  }
   1.191  
   1.192  function cooker() {
   1.193 @@ -491,22 +528,17 @@
   1.194  	return "pkg";
   1.195  }
   1.196  
   1.197 -function addver() {
   1.198 -	if (ver=="c" || ver=="cooking") return "";
   1.199 -	return ("&amp;version=" ver);
   1.200 -}
   1.201 -
   1.202  function tabline() {
   1.203  	markname = $1; if (type=="name") gsub(query, "<mark>&</mark>", markname);
   1.204  	markdesc = $4; if (type=="desc") gsub(query, "<mark>&</mark>", markdesc);
   1.205  	printf "<tr>\n\t<td class=\"first\">"
   1.206 -	printf "<a href=\"?info=%s%s\">", $1, addver();
   1.207 -	printf "<img src=\"icons/%s.png\"/></a></td>\n", icon($1);
   1.208 +	printf "<a href=\"?info=%s%s\">", gensub(/\+/, "%2B", "g", $1), addver;
   1.209 +	printf "<img src=\"icons/%s.png\" alt=\"%s icon\"/></a></td>\n", icon($1), $1;
   1.210  	printf "\t<td><b>%s</b><br/>%s</td>\n", markname, markdesc;
   1.211  	printf "\t<td class=\"last\">\n";
   1.212  	printf "\t<a class=\"dl\" href=\"%s\" ", murl "/packages/" ver "/" $1 "-" $2 ".tazpkg";
   1.213  	printf "title=\"%s\">%s</a>\n", adl, adl;
   1.214 -	printf "\t<a class=\"rc\" href=\"?receipt=%s%s\" ", $1, addver();
   1.215 +	printf "\t<a class=\"rc\" href=\"?receipt=%s%s\" ", $1, addver;
   1.216  	printf "title=\"%s\">%s</a>\n", arc, arc;
   1.217  	cooker();
   1.218  	printf "</td>\n</tr>\n"
   1.219 @@ -514,13 +546,16 @@
   1.220  
   1.221  
   1.222  {
   1.223 -	if (type=="name"     && match($1, query)) tabline();
   1.224 -	if (type=="category" && $3==query)  tabline();
   1.225 -	if (type=="desc"     && match($4, query)) tabline();
   1.226 -	if (type=="tags"     && match(" "$6" ", " "query" ")) tabline();
   1.227 +	if (type=="name"     && match($1, query)) { tabline(); notfound = ""; }
   1.228 +	if (type=="category" && $3==query)        { tabline(); notfound = ""; }
   1.229 +	if (type=="desc"     && match($4, query)) { tabline(); notfound = ""; }
   1.230 +	if (type=="tags"     && match(" "$6" ", " "query" ")) { tabline(); notfound = ""; }
   1.231  }
   1.232  
   1.233 -END { print "</table>"; }
   1.234 +END {
   1.235 +	if (notfound) printf "<tr><td class=\"first\"><img src=\"icons/notfound.png\" alt="Not found"/></td><td><b>%s</b></td></tr>", nf;
   1.236 +	print "</table>";
   1.237 +}
   1.238  ' "$pinfo";
   1.239  }
   1.240  
   1.241 @@ -689,7 +724,7 @@
   1.242  
   1.243  	if [ ! -f "$WOK/$1/receipt" ]; then
   1.244  		cat <<EOT
   1.245 -<div class="err">$(_ 'Package "%s" was not found' "$SEARCH")</div>
   1.246 +<div class="err">$(_ 'Package "%s" was not found' "$1")</div>
   1.247  <p> <br/> </p>
   1.248  EOT
   1.249  		return 1
   1.250 @@ -855,11 +890,6 @@
   1.251  
   1.252  display_cloud() {
   1.253  	arg=$1
   1.254 -	if [ "$SLITAZ_VERSION" == 'c' -o "$SLITAZ_VERSION" == 'cooking' ]; then
   1.255 -		addver=''
   1.256 -	else
   1.257 -		addver="&amp;version=$SLITAZ_VERSION"
   1.258 -	fi
   1.259  	awk '
   1.260  {
   1.261  	for (i = 1; $i != ""; i++)
   1.262 @@ -887,7 +917,7 @@
   1.263  			pct=$(((10000 - ((100 - $pct)**2))/100))
   1.264  			pct=$(((10000 - ((100 - $pct)**2))/100))
   1.265  			cat <<EOT
   1.266 -<span class="tagn">$cnt</span><a href="?$arg=$tag$addver" class="taga tag$(($pct/10))">$tag</a>
   1.267 +<span class="tagn">$cnt</span><a href="?$arg=$tag$addver" class="tag$(($pct/10))">$tag</a>
   1.268  EOT
   1.269  		done
   1.270  		echo -n '<hr/><p class="lang">'
   1.271 @@ -907,12 +937,22 @@
   1.272  # page begins
   1.273  #
   1.274  
   1.275 -header "HTTP/1.1 200 OK" "Content-type: text/html; charset=UTF-8"
   1.276 +if [ -n "$HTTP_IF_MODIFIED_SINCE" -a "$HTTP_IF_MODIFIED_SINCE" == "$lastmod" ]; then
   1.277 +	# When user agent asks if content modified since last seen and it is not modified
   1.278 +	header "HTTP/1.1 304 Not Modified"
   1.279 +	exit 0
   1.280 +fi
   1.281 +if [ -z "$lastmod" ]; then
   1.282 +	# We don't know last modification date
   1.283 +	header "HTTP/1.1 200 OK" "Content-type: text/html; charset=UTF-8"
   1.284 +else
   1.285 +	header "HTTP/1.1 200 OK" "Content-type: text/html; charset=UTF-8" "Last-Modified: $lastmod"
   1.286 +fi
   1.287  xhtml_header
   1.288  
   1.289  
   1.290  #
   1.291 -# language selector, if needed
   1.292 +# Language selector
   1.293  #
   1.294  
   1.295  cat <<EOT
   1.296 @@ -921,11 +961,12 @@
   1.297  target="_blank"></a><select form="s_form" name="lang" onchange="this.form.submit();">
   1.298  EOT
   1.299  
   1.300 -for i in en de es fr it pl pt ru sv uk zh; do
   1.301 +for i in en de es fa fr pl pt ru sv uk zh; do
   1.302  	case $i in
   1.303  		en) c='us'; l='English';;
   1.304  		de) c='de'; l='Deutsch';;
   1.305  		es) c='es'; l='Español';;
   1.306 +		fa) c='ir'; l='فارسی';;
   1.307  		fr) c='fr'; l='Français';;
   1.308  		it) c='it'; l='Italiano';;
   1.309  		pl) c='pl'; l='Polski';;
   1.310 @@ -959,12 +1000,17 @@
   1.311  
   1.312  <pre>$(httpinfo)</pre>
   1.313  
   1.314 -<pre>LANG=$LANG;
   1.315 -OBJECT=$OBJECT;
   1.316 -SEARCH=$SEARCH;
   1.317 -SLITAZ_VERSION=$SLITAZ_VERSION;
   1.318 -WOK=$WOK;
   1.319 -GET=$(GET);
   1.320 +<pre>$(env)</pre>
   1.321 +
   1.322 +<pre>LANG="$LANG"
   1.323 +OBJECT="$OBJECT"
   1.324 +SEARCH="$SEARCH"
   1.325 +SLITAZ_VERSION="$SLITAZ_VERSION"
   1.326 +WOK="$WOK"
   1.327 +GET="$(GET)"
   1.328 +
   1.329 +HTTP_IF_MODIFIED_SINCE="$HTTP_IF_MODIFIED_SINCE"
   1.330 +lastmod               ="$lastmod"
   1.331  </pre>
   1.332  EOT
   1.333  	;;
   1.334 @@ -976,7 +1022,7 @@
   1.335  # Display search form and result if requested.
   1.336  
   1.337  cat <<EOT
   1.338 -<div id="ticker"><!-- progress/ --><img src="loader.gif" alt="."/></div>
   1.339 +<div id="ticker"><img src="loader.gif" alt="."/></div>
   1.340  EOT
   1.341  search_form
   1.342  
   1.343 @@ -987,12 +1033,29 @@
   1.344  
   1.345  show_info_links() {
   1.346  	if [ -n "$1" ]; then
   1.347 -		echo -n "<tr><td class=\"first\"><b>$2</b></td><td>"
   1.348 +		echo -n "<tr><td class=\"first\"><b>$2</b></td><td class=\"spkg\">"
   1.349  
   1.350 -		echo $1 | tr ' ' $'\n' | awk -vt="$3" -vv="$SLITAZ_VERSION" '{
   1.351 -			printf "<a href=\"?%s=%s", t, gensub(/\+/, "%2B", "g", $1);
   1.352 -			printf "&amp;version=%s\">%s</a> ", v, $1;
   1.353 -		}'
   1.354 +		echo $1 | tr ' ' $'\n' | awk -vt="$3" -vv="$addver" -viconslast="$iconslast" '
   1.355 +function icon(pkg) {
   1.356 +	i="";
   1.357 +	if (pkg ~ /-dev$/) { return "dev"; }
   1.358 +	if (pkg ~ /^linux(64)?-/) { return "linux"; }
   1.359 +	if (pkg ~ /^xorg-/) { return "xorg"; }
   1.360 +	"awk -vp=\"" pkg "\" \"BEGIN{FS=\\\"\t\\\"}\\\$1==p{print \\\$2;exit}\" " iconslast | getline i;
   1.361 +	if (i) { return i; }
   1.362 +	return "pkg";
   1.363 +}
   1.364 +function link(pkg) {
   1.365 +		printf "<a href=\"?%s=%s%s\">", t, gensub(/\+/, "%2B", "g", pkg), v;
   1.366 +		if (t!="tags") printf "<img src=\"icons-s/%s.png\" alt=\"%s icon\"/>", icon(pkg), pkg;
   1.367 +		printf "%s</a>", pkg;
   1.368 +}
   1.369 +{
   1.370 +	split($1, line, ":");
   1.371 +	link(line[1]);
   1.372 +	if (line[2]) { printf ":"; link(line[2]); }
   1.373 +	printf "  ";
   1.374 +}'
   1.375  		echo "</td></tr>"
   1.376  	fi
   1.377  }
   1.378 @@ -1007,12 +1070,13 @@
   1.379  
   1.380  case " $(GET) " in
   1.381  	*\ info\ *)
   1.382 +		package_exist $(GET info) || xhtml_footer
   1.383  		. "$WOK/$(GET info)/receipt"
   1.384  
   1.385  		cat <<EOT
   1.386  <table class="info">
   1.387  	<tr>
   1.388 -		<td class="first"><b>$(_ 'Name')</b></td>
   1.389 +		<td class="first"><b>$(gettext 'Name')</b></td>
   1.390  		<td>$PACKAGE
   1.391  			<div class="appImg" style="background: url($(package_icon $PACKAGE 2))"></div>
   1.392  		</td>
   1.393 @@ -1020,39 +1084,40 @@
   1.394  EOT
   1.395  		[ -n "$VERSION" ] && cat <<EOT
   1.396  	<tr>
   1.397 -		<td class="first"><b>$(_ 'Version')</b></td>
   1.398 +		<td class="first"><b>$(gettext 'Version')</b></td>
   1.399  		<td>$VERSION</td>
   1.400  	</tr>
   1.401  EOT
   1.402  		cat <<EOT
   1.403  	<tr>
   1.404 -		<td class="first"><b>$(_ 'Category')</b></td>
   1.405 -		<td><a href="?category=$CATEGORY&amp;version=$SLITAZ_VERSION">$(_n "$CATEGORY")</a></td>
   1.406 +		<td class="first"><b>$(gettext 'Category')</b></td>
   1.407 +		<td><a href="?category=$CATEGORY$addver">$(gettext "$CATEGORY")</a></td>
   1.408  	</tr>
   1.409  
   1.410  	<tr>
   1.411 -		<td class="first"><b>$(_ 'Description')</b></td>
   1.412 +		<td class="first"><b>$(gettext 'Description')</b></td>
   1.413  		<td>$(echo "$SHORT_DESC" | htmlize)</td>
   1.414  	</tr>
   1.415  EOT
   1.416  		[ -n "$MAINTAINER" ] && cat <<EOT
   1.417  	<tr>
   1.418 -		<td class="first"><b>$(_ 'Maintainer')</b></td>
   1.419 -		<td><a href="?maintainer=$MAINTAINER&amp;version=$SLITAZ_VERSION">$MAINTAINER</a></td>
   1.420 +		<td class="first"><b>$(gettext 'Maintainer')</b></td>
   1.421 +		<td><a href="?maintainer=$MAINTAINER$addver">${MAINTAINER/@/&#8203;@&#8203;}</a></td>
   1.422  	</tr>
   1.423  EOT
   1.424  		[ -n "$LICENSE" ] && cat <<EOT
   1.425  	<tr>
   1.426 -		<td class="first"><b>$(_ 'License')</b></td>
   1.427 +		<td class="first"><b>$(gettext 'License')</b></td>
   1.428  		<td>$(for license in $LICENSE; do
   1.429 -			echo "<a href=\"?license=$license&amp;version=$SLITAZ_VERSION\">$license</a> "
   1.430 +			echo "<a href=\"?license=$license$addver\">$license</a> "
   1.431  		done)</td>
   1.432  	</tr>
   1.433  EOT
   1.434 +		web_site="${WEB_SITE#http://}"
   1.435  		cat <<EOT
   1.436  	<tr>
   1.437 -		<td class="first"><b>$(_ 'Website')</b></td>
   1.438 -		<td><a href="$WEB_SITE" target="_blank">$WEB_SITE</a></td>
   1.439 +		<td class="first"><b>$(gettext 'Website')</b></td>
   1.440 +		<td><a href="$WEB_SITE" target="_blank">${web_site%/}</a></td>
   1.441  	</tr>
   1.442  EOT
   1.443  		show_info_links "$TAGS" "$(_ 'Tags')" 'tags'
   1.444 @@ -1060,24 +1125,24 @@
   1.445  		if [ -n "$PACKED_SIZE" ]; then
   1.446  			cat <<EOT
   1.447  	<tr>
   1.448 -		<td class="first"><b>$(_ 'Sizes')</b></td>
   1.449 -		<td>${PACKED_SIZE/.0/}/${UNPACKED_SIZE/.0/}</td>
   1.450 +		<td class="first"><b>$(gettext 'Sizes')</b></td>
   1.451 +		<td>${PACKED_SIZE/.0/} / ${UNPACKED_SIZE/.0/}</td>
   1.452  	</tr>
   1.453  EOT
   1.454  		elif [ -f "$pinfo" ]; then
   1.455  			cat <<EOT
   1.456  	<tr>
   1.457 -		<td class="first"><b>$(_ 'Sizes')</b></td>
   1.458 -		<td>$(awk -F$'\t' -vp=$PACKAGE '$1==p{print $7}' "$pinfo" | tr ' ' '/')</td>
   1.459 +		<td class="first"><b>$(gettext 'Sizes')</b></td>
   1.460 +		<td>$(awk -F$'\t' -vp=$PACKAGE '$1==p{print $7}' "$pinfo" | sed 's| | / |')</td>
   1.461  	</tr>
   1.462  EOT
   1.463  		fi
   1.464  
   1.465 -		show_info_links "$DEPENDS" "$(_ 'Depends')" 'info'
   1.466 +		show_info_links "$DEPENDS" "$(gettext 'Depends on')" 'info'
   1.467  
   1.468 -		show_info_links "$PROVIDE" "$(_ 'Provide')" 'info'
   1.469 +		show_info_links "$PROVIDE" "$(gettext 'Provides')" 'info'
   1.470  
   1.471 -		show_info_links "$SUGGESTED" "$(_ 'Suggested')" 'info'
   1.472 +		show_info_links "$SUGGESTED" "$(gettext 'Suggested')" 'info'
   1.473  		cat <<EOT
   1.474  </table>
   1.475  
   1.476 @@ -1088,55 +1153,70 @@
   1.477  		pkg_url="$MIRROR_URL/packages/$SLITAZ_VERSION/$pkg-$VERSION$EXTRA_VERSION.tazpkg"
   1.478  		case "$SLITAZ_VERSION" in
   1.479  			cooking)
   1.480 -				COOKER="<a href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">$(_ 'Show cooking log')</a>";;
   1.481 +				COOKER="<a class=\"cooker\" href=\"http://cook.slitaz.org/cooker.cgi?pkg=$PACKAGE\">$(gettext 'Show cooking log')</a>";;
   1.482  			stable|undigest|backports)
   1.483 -				COOKER="<a href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">$(_ 'Show cooking log')</a>";;
   1.484 +				COOKER="<a class=\"cooker\" href=\"http://cook.slitaz.org/$SLITAZ_VERSION/cooker.cgi?pkg=$PACKAGE\">$(gettext 'Show cooking log')</a>";;
   1.485  			*)
   1.486 -				COOKER="$(_ 'N/A')";;
   1.487 +				COOKER="<span class=\"cooker\">$(gettext 'N/A')</span>";;
   1.488  		esac
   1.489  		cat <<EOT
   1.490 +<div class="sssb desc center">
   1.491 +	<a href="http://screenshots.debian.net/package/$pkg" target="_blank"><img
   1.492 +		src="http://screenshots.debian.net/thumbnail/$pkg" alt="$PACKAGE screenshot"/></a>
   1.493 +</div>
   1.494 +
   1.495  <table class="info">
   1.496 -	<tr>
   1.497 -		<td>
   1.498 -			<span class="dl"></span>
   1.499 -			<a href="$pkg_url">$(_ 'Download package')</a>
   1.500 +	<tr><td><span class="download"></span>
   1.501 +			<a href="$pkg_url">$(gettext 'Download package')</a>
   1.502  		</td>
   1.503 -		<td rowspan="5" class="first">
   1.504 +		<td rowspan="5" class="first hssc">
   1.505  			<a href="http://screenshots.debian.net/package/$pkg" target="_blank"><img
   1.506 -				src="http://screenshots.debian.net/thumbnail/$pkg"/></a>
   1.507 +				src="http://screenshots.debian.net/thumbnail/$pkg" alt="$PACKAGE screenshot"/></a>
   1.508  		</td>
   1.509  	</tr>
   1.510 -	<tr>
   1.511 +	<tr><td><a class="receipt" href="?receipt=$pkg$addver">$(gettext 'Show receipt')</a></td></tr>
   1.512 +	<tr><td><a class="files-list" href="?filelist=$pkg$addver">$(gettext 'Show files list')</a></td></tr>
   1.513 +	<tr><td>$COOKER</td></tr>
   1.514 +	<tr id="tazpanelButtons" class="hidden">
   1.515  		<td>
   1.516 -			<span class="rc"></span>
   1.517 -			<a href="?receipt=$pkg&amp;version=$SLITAZ_VERSION">$(_ 'Show receipt')</a>
   1.518 -		</td>
   1.519 -	</tr>
   1.520 -	<tr>
   1.521 -		<td>
   1.522 -			<span class="co"></span>
   1.523 -			$COOKER
   1.524 -		</td>
   1.525 -	</tr>
   1.526 -	<tr>
   1.527 -		<td>
   1.528 -			<span class="dl"></span>
   1.529 -			<a href="http://127.0.0.1:82/user/pkgs.cgi?do=Install&amp;pkg=$pkg" target="_blank">$(_ 'Install package')</a>
   1.530 -		</td>
   1.531 -	</tr>
   1.532 -	<tr>
   1.533 -		<td>
   1.534 -			<span class="dl"></span>
   1.535 -			<a href="${pkg_url/http/tazpkg}">$(_ 'Download and open (experimental)')</a>
   1.536 +			<span id="tazpaneli" class="hidden">
   1.537 +				<a class="pkgi" href="http://127.0.0.1:82/user/pkgs.cgi?do=Install&amp;pkg=$pkg" target="_blank">$(gettext 'Install package')</a>
   1.538 +			</span>
   1.539 +			<span id="tazpanelr" class="hidden">
   1.540 +				<a class="pkgr" href="http://127.0.0.1:82/user/pkgs.cgi?do=Remove&amp;pkg=$pkg" target="_blank">$(gettext 'Remove package')</a>
   1.541 +			</span>
   1.542  		</td>
   1.543  	</tr>
   1.544  </table>
   1.545 +
   1.546 +<script>
   1.547 +function ajaxTazPanel(pkg) {
   1.548 +	var req = new XMLHttpRequest();
   1.549 +	req.onreadystatechange = function() {
   1.550 +		if (req.readyState == XMLHttpRequest.DONE) {
   1.551 +			if (req.status == 200) {
   1.552 +				if (req.responseText == 'i') {
   1.553 +					// Package installed, allow to remove
   1.554 +					document.getElementById('tazpanelr').className='';
   1.555 +				} else {
   1.556 +					// Package not installed, allow to install
   1.557 +					document.getElementById('tazpaneli').className='';
   1.558 +				}
   1.559 +				document.getElementById('tazpanelButtons').className='';
   1.560 +			}
   1.561 +		}
   1.562 +	}
   1.563 +	req.open('GET', 'http://tazpanel:82/pkgs.cgi?status&web=y&pkg=' + pkg, true);
   1.564 +	req.send();
   1.565 +}
   1.566 +ajaxTazPanel('$pkg');
   1.567 +</script>
   1.568  EOT
   1.569  
   1.570  		# Description
   1.571  		if [ -f "$WOK/$PACKAGE/description.txt" ]; then
   1.572  			cat <<EOT
   1.573 -<h3>$(_ 'Description')</h3>
   1.574 +<h3>$(gettext 'Description')</h3>
   1.575  <table><tr><td>$(./sundown < "$WOK/$PACKAGE/description.txt")</td></tr></table>
   1.576  EOT
   1.577  		fi
   1.578 @@ -1145,8 +1225,8 @@
   1.579  		if [ -n "$CONFIG_FILES" ]; then
   1.580  			cat <<EOT
   1.581  <div class="conf">
   1.582 -	<h3>$(_ 'Configuration files')</h3>
   1.583 -	<ul>
   1.584 +	<h3>$(gettext 'Configuration files')</h3>
   1.585 +	<table><tr><td><ul>
   1.586  EOT
   1.587  			for file in $CONFIG_FILES; do
   1.588  				cat <<EOT
   1.589 @@ -1154,7 +1234,7 @@
   1.590  EOT
   1.591  			done
   1.592  			cat <<EOT
   1.593 -	</ul>
   1.594 +	</ul></td></tr></table>
   1.595  </div>
   1.596  EOT
   1.597  		fi
   1.598 @@ -1172,7 +1252,7 @@
   1.599  Depends)
   1.600  	if [ -z "$SEARCH" ]; then
   1.601  		cat <<EOT
   1.602 -<h3>$(_ 'Loop dependence')</h3>
   1.603 +<h3>$(_ 'Loop dependency')</h3>
   1.604  <pre class="hard">
   1.605  EOT
   1.606  		for i in $WOK/*/receipt; do
   1.607 @@ -1196,7 +1276,7 @@
   1.608  
   1.609  		if [ -n "$SUGGESTED" ]; then
   1.610  			cat <<EOT
   1.611 -<h3>$(_ 'Dependency tree for package "%" (SUGGESTED)' "$SEARCH")</h3>
   1.612 +<h3>$(_ 'Dependency tree for packages suggested by package "%s"' "$SEARCH")</h3>
   1.613  <pre class="hard">
   1.614  EOT
   1.615  			unset ALL_DEPS
   1.616 @@ -1222,7 +1302,7 @@
   1.617  BuildDepends)
   1.618  	if [ -z "$SEARCH" ]; then
   1.619  		cat <<EOT
   1.620 -<h3>$(_ 'Loop dependence of build')</h3>
   1.621 +<h3>$(_ 'Loop dependency of build')</h3>
   1.622  <pre class="hard">
   1.623  EOT
   1.624  		for i in $WOK/*/receipt; do
   1.625 @@ -1244,7 +1324,7 @@
   1.626  		echo '</pre>'
   1.627  
   1.628  		cat <<EOT
   1.629 -<h3>$(_ 'Next packages requires package "%s" to be built' "$SEARCH")</h3>
   1.630 +<h3>$(_ 'Next packages require package "%s" to be built' "$SEARCH")</h3>
   1.631  <pre class="hard">
   1.632  EOT
   1.633  		unset ALL_DEPS
   1.634 @@ -1291,7 +1371,7 @@
   1.635  	if [ -n "$SEARCH" ]; then
   1.636  		cat <<EOT
   1.637  
   1.638 -<h3>$(_ 'File names matching the "%s"' "$SEARCH")</h3>
   1.639 +<h3>$(_ 'File names matching "%s"' "$SEARCH")</h3>
   1.640  <table class="list">
   1.641  EOT
   1.642  		unset last
   1.643 @@ -1366,7 +1446,7 @@
   1.644  	fi
   1.645  
   1.646  	cat <<EOT
   1.647 -<h3>$(_ 'Descriptions matching the "%s"' "$SEARCH")</h3>
   1.648 +<h3>$(_ 'Descriptions matching "%s"' "$SEARCH")</h3>
   1.649  EOT
   1.650  	if [ -f "$pinfo" ]; then
   1.651  		package_entries desc "$SEARCH"
   1.652 @@ -1523,12 +1603,12 @@
   1.653  	else
   1.654  		# Display category cloud
   1.655  		if [ -f "$pinfo" ]; then
   1.656 -			TAGS="$(awk -F$'\t' '{if($3){print $3}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
   1.657 -			MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
   1.658 -			echo "$TAGS" | awk -vMAX="$MAX" -vv="$SLITAZ_VERSION" '{
   1.659 +			tags="$(awk -F$'\t' '{if($3){print $3}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
   1.660 +			max="$(echo "$tags" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
   1.661 +			echo "$tags" | awk -vMAX="$max" -vaddver="$addver" '{
   1.662  				printf "<span class=\"tagn\">%s</span>", $1;
   1.663 -				printf "<a class=\"taga tag%s\" ", int($1 * 10 / MAX + 1);
   1.664 -				printf "href=\"?category=%s&amp;version=%s\">%s</a> ", $2, v, $2;
   1.665 +				printf "<a class=\"tag%s\" ", int($1 * 10 / MAX + 1);
   1.666 +				printf "href=\"?category=%s%s\">%s</a> ", $2, addver, $2;
   1.667  			}'
   1.668  		else
   1.669  			grep -l ^CATEGORY= $WOK/*/receipt | \
   1.670 @@ -1568,10 +1648,10 @@
   1.671  		if [ -f "$pinfo" ]; then
   1.672  			TAGS="$(awk -F$'\t' '{if($6){print $6}}' "$pinfo" | tr ' ' $'\n' | sort | uniq -c)"
   1.673  			MAX="$(echo "$TAGS" | awk '{if ($1 > MAX) MAX = $1} END{print MAX}')"
   1.674 -			echo "$TAGS" | awk -vMAX="$MAX" -vv="$SLITAZ_VERSION" '{
   1.675 +			echo "$TAGS" | awk -vMAX="$MAX" -vv="$addver" '{
   1.676  				printf "<span class=\"tagn\">%s</span>", $1;
   1.677 -				printf "<a class=\"taga tag%s\" ", int($1 * 10 / MAX + 1);
   1.678 -				printf "href=\"?tags=%s&amp;version=%s\">%s</a> ", $2, v, $2;
   1.679 +				printf "<a class=\"tag%s\" ", int($1 * 10 / MAX + 1);
   1.680 +				printf "href=\"?tags=%s%s\">%s</a> ", $2, v, $2;
   1.681  			}'
   1.682  		else
   1.683  			grep -l ^TAGS= $WOK/*/receipt | \
   1.684 @@ -1613,7 +1693,7 @@
   1.685  Package)
   1.686  	if check_n "$SEARCH"; then
   1.687  		cat <<EOT
   1.688 -<h3>$(_ 'Package names matching the "%s"' "$SEARCH")</h3>
   1.689 +<h3>$(_ 'Package names matching "%s"' "$SEARCH")</h3>
   1.690  EOT
   1.691  
   1.692  		if [ -f "$pinfo" ]; then
   1.693 @@ -1627,7 +1707,7 @@
   1.694  			echo '</table>'
   1.695  		fi
   1.696  
   1.697 -		vpkgs="$(cut -d= -f1 < $equiv | grep -i $SEARCH)"
   1.698 +		vpkgs="$(cut -d= -f1 < $equiv | grep -i "$SEARCH")"
   1.699  		for vpkg in $vpkgs; do
   1.700  			cat <<EOT
   1.701  
   1.702 @@ -1636,8 +1716,11 @@
   1.703  <table class="list">
   1.704  EOT
   1.705  			for pkg in $(grep $vpkg= $equiv | sed "s|$vpkg=||"); do
   1.706 -				. $WOK/${pkg#*:}/receipt
   1.707 -				package_entry
   1.708 +				echo "		<!-- '$pkg' - '${pkg#*:}' -->"
   1.709 +				if [ -e "$WOK/${pkg#*:}/receipt" ]; then
   1.710 +					. $WOK/${pkg#*:}/receipt
   1.711 +					package_entry
   1.712 +				fi
   1.713  			done
   1.714  			echo '</table>'
   1.715  		done