tazpkg rev 763

pkgs.cgi: show type of packages (installed/not installed/blocked) in the search; auto-search files if '/' present in query; use radio-buttons in the categories selector (may fix appearance in other browsers); tazpkg: show package sizes in the info.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Apr 03 15:51:06 2015 +0300 (2015-04-03)
parents ad921c2aee59
children 7a731e6f61a6
files tazpanel/pkgs.cgi tazpanel/pkgs.css tazpkg
line diff
     1.1 --- a/tazpanel/pkgs.cgi	Wed Apr 01 04:29:22 2015 +0300
     1.2 +++ b/tazpanel/pkgs.cgi	Fri Apr 03 15:51:06 2015 +0300
     1.3 @@ -21,7 +21,7 @@
     1.4  _()  { local T="$1"; shift; printf "$(gettext "$T")" "$@"; echo; }
     1.5  _n() { local T="$1"; shift; printf "$(gettext "$T")" "$@"; }
     1.6  _p() {
     1.7 -	local S="$1" P="$2" N="$3"; shift; shift; shift;
     1.8 +	local S="$1" P="$2" N="$3"; shift 3;
     1.9  	printf "$(ngettext "$S" "$P" "$N")" "$@"; }
    1.10  
    1.11  
    1.12 @@ -74,7 +74,11 @@
    1.13  parse_packages_info() {
    1.14  	IFS=$'\t'
    1.15  	while read PACKAGE VERSION CATEGORY SHORT_DESC WEB_SITE TAGS SIZES DEPENDS; do
    1.16 -		class=pkg; grep -q "^$PACKAGE$'\t'" $PKGS_DB/installed.info && class=pkgi
    1.17 +		class='pkg'
    1.18 +		if grep -q "^$PACKAGE"$'\t' $PKGS_DB/installed.info; then
    1.19 +			class='pkgi'
    1.20 +			grep -q "^$PACKAGE$" $PKGS_DB/blocked-packages.list && class='pkgib'
    1.21 +		fi
    1.22  		i18n_desc $PACKAGE
    1.23  		cat << EOT
    1.24  <tr>
    1.25 @@ -136,8 +140,6 @@
    1.26  # ENTER will search but user may search for a button, so put one.
    1.27  
    1.28  search_form() {
    1.29 -	[ -z "$repo" ] && repo="$(GET repo)"
    1.30 -	[ -z "$repo" ] && repo="Any"
    1.31  	cat << EOT
    1.32  <form class="search"><!--
    1.33  	--><input type="search" name="search" results="5" autosave="pkgsearch" autocomplete="on"><!--
    1.34 @@ -171,10 +173,22 @@
    1.35  	cat << EOT
    1.36  <script type="text/javascript">
    1.37  function setCookie(name) {
    1.38 -	document.cookie = name+"="+document.getElementById(name).value; }
    1.39 +	if (name=='cat') {
    1.40 +		var cats = document.getElementsByName('cat');
    1.41 +		for (var i = 0; i < cats.length; i++) {
    1.42 +			if (cats[i].checked) {
    1.43 +				document.cookie = name + "=" + cats[i].value;
    1.44 +				break;
    1.45 +			}
    1.46 +		}
    1.47 +	} else {
    1.48 +		document.cookie = name+"="+document.getElementById(name).value;
    1.49 +	}
    1.50 +}
    1.51  function setValue(name, value) {
    1.52  	document.getElementById(name).value=value;
    1.53 -	setCookie(name); }
    1.54 +	setCookie(name);
    1.55 +}
    1.56  </script>
    1.57  <form method="post" action="?list">
    1.58  
    1.59 @@ -183,32 +197,21 @@
    1.60  		<option value="my">$(_ 'My packages')</option>
    1.61  		<option value="no">$(_ 'All packages')</option>
    1.62  	</select>
    1.63 +	<script type="text/javascript">setValue('my', "$my")</script>
    1.64  
    1.65  	<h4>$(_ 'Categories')</h4>
    1.66  
    1.67 -	<div class="select_wrap">
    1.68 -	<select id="cat" size="16" onclick="setCookie('cat'); this.form.submit()">
    1.69 -		<option value="base-system" >$(_ 'base-system')</option>
    1.70 -		<option value="x-window"    >$(_ 'x-window')</option>
    1.71 -		<option value="utilities"   >$(_ 'utilities')</option>
    1.72 -		<option value="network"     >$(_ 'network')</option>
    1.73 -		<option value="games"       >$(_ 'games')</option>
    1.74 -		<option value="graphics"    >$(_ 'graphics')</option>
    1.75 -		<option value="office"      >$(_ 'office')</option>
    1.76 -		<option value="multimedia"  >$(_ 'multimedia')</option>
    1.77 -		<option value="development" >$(_ 'development')</option>
    1.78 -		<option value="system-tools">$(_ 'system-tools')</option>
    1.79 -		<option value="security"    >$(_ 'security')</option>
    1.80 -		<option value="misc"        >$(_ 'misc')</option>
    1.81 -		<option value="meta"        >$(_ 'meta')</option>
    1.82 -		<option value="non-free"    >$(_ 'non-free')</option>
    1.83 -		<option value="all"         >$(_ 'all')</option>
    1.84 -		<option value="extra"       >$(_ 'extra')</option>
    1.85 -	</select>
    1.86 -	<script type="text/javascript">
    1.87 -		setValue('my', "$my")
    1.88 -		setValue('cat', "$cat")
    1.89 -	</script>
    1.90 +	<div class="wide zebra">
    1.91 +		$(echo 'base-system x-window utilities network games graphics office
    1.92 +		multimedia development system-tools security misc meta non-free all
    1.93 +		extra' | tr ' ' '\n' | awk -vcat="$cat" -vn="1" '{
    1.94 +			system("gettext " $1 | getline tr)
    1.95 +			printf "<input type=\"radio\" name=\"cat\" id=\"c%s\" ", n
    1.96 +			printf "value=\"%s\"%s ", $1, $1==cat?" checked":""
    1.97 +			printf "onclick=\"setCookie(&#39;cat&#39;); this.form.submit()\">"
    1.98 +			printf "<label for=\"c%s\">%s</label>\n", n, tr
    1.99 +			n++
   1.100 +		}')
   1.101  	</div>
   1.102  EOT
   1.103  
   1.104 @@ -564,7 +567,7 @@
   1.105  
   1.106  <form id="pkglist" class="wide">
   1.107  EOT
   1.108 -		if [ -n "$(GET files)" ]; then
   1.109 +		if [ -n "$(GET files)" -o -n "$(echo $pkg | grep '/')" ]; then
   1.110  			cat <<EOT
   1.111  	<table class="wide zebra filelist">
   1.112  	<thead>
   1.113 @@ -578,7 +581,11 @@
   1.114  			lzcat $(repo_list /files.list.lzma) | grep -Ei ": .*$(GET search)" | \
   1.115  			while read PACKAGE FILE; do
   1.116  				PACKAGE=${PACKAGE%:}
   1.117 -				class=pkg; [ -d $INSTALLED/$PACKAGE ] && class=pkgi
   1.118 +				class='pkg'
   1.119 +				if [ -d $INSTALLED/$PACKAGE ]; then
   1.120 +					class='pkgi'
   1.121 +					grep -q "^$PACKAGE$" $PKGS_DB/blocked-packages.list && class='pkgib'
   1.122 +				fi
   1.123  				cat << EOT
   1.124  <tr>
   1.125  	<td><input type="checkbox" name="pkg" value="$PACKAGE">$(pkg_info_link $PACKAGE $class)</td>
     2.1 --- a/tazpanel/pkgs.css	Wed Apr 01 04:29:22 2015 +0300
     2.2 +++ b/tazpanel/pkgs.css	Fri Apr 03 15:51:06 2015 +0300
     2.3 @@ -8,13 +8,13 @@
     2.4   */
     2.5  
     2.6  #content-sidebar {
     2.7 -	margin-right: 138px; /* sidebar width */
     2.8 -	padding: 10px;
     2.9 +	margin-right: 140px; /* sidebar width */
    2.10 +	padding: 5px;
    2.11  }
    2.12  
    2.13 -#sidebar { /* full width = width(132) + h-padding(5) + border(1) = 138px */
    2.14 +#sidebar { /* full width = width(139) + h-padding(0) + border(1) = 140px */
    2.15  	position: fixed; top: 65px; bottom: 0; right: 0;
    2.16 -	width: 132px; padding: 5px 5px 0 0;
    2.17 +	width: 139px; padding: 0;
    2.18  	border-left: 1pt solid;
    2.19  	overflow-y: auto; overflow-x: hidden; /* for tiny screens */
    2.20  }
    2.21 @@ -26,32 +26,14 @@
    2.22  }
    2.23  
    2.24  
    2.25 -
    2.26 -
    2.27 -
    2.28  /**
    2.29   * Sidebar category selector
    2.30   */
    2.31  
    2.32 -/* hack to remove unwanted scrollbar from multiline selector */
    2.33 -
    2.34 -.select_wrap {
    2.35 -	display: inline-block;
    2.36 -	vertical-align: top;
    2.37 -	overflow: hidden;
    2.38 -}
    2.39 -.select_wrap select {
    2.40 -	padding: 5px;
    2.41 -	margin:-5px -20px -5px -5px;
    2.42 -	width: 162px; /* sidebar:(138px) + this h-margin:(20px+5px) */
    2.43 -	font-size: small;
    2.44 -}
    2.45 -
    2.46 -/* zebra on selector */
    2.47 -select option:nth-child(even) {
    2.48 -	background-color: rgba(0,0,0,0.05);
    2.49 -}
    2.50 -
    2.51 +#sidebar input[type="radio"] { display: none; }
    2.52 +#sidebar label { display: block; padding-left: 5px; }
    2.53 +#sidebar input+label:nth-child(4n) { background-color: hsla(0, 0%, 50%, 0.1); }
    2.54 +#sidebar input:checked+label { background-color: hsla(0, 0%, 50%, 0.5); }
    2.55  
    2.56  /* sidebar links */
    2.57  #sidebar a {
    2.58 @@ -71,17 +53,17 @@
    2.59   */
    2.60  
    2.61  /* not break the line */
    2.62 -.pkglist td:nth-child(1),
    2.63 +.pkglist  td:nth-child(1),
    2.64  .filelist td:nth-child(1) { white-space: nowrap; }
    2.65  
    2.66 -.pkglist td:nth-child(1) a,
    2.67 +.pkglist  td:nth-child(1) a,
    2.68  .filelist td:nth-child(1) a { max-width: 12em; }
    2.69 -.pkglist td:nth-child(2)   { max-width:  7em; }
    2.70 +.pkglist  td:nth-child(2)   { max-width:  7em; }
    2.71  /*.filelist td:nth-child(2)   { white-space: pre-wrap; }*/
    2.72  
    2.73  /* ellipsize content of 1st and 2nd columns */
    2.74 -.pkglist td:nth-child(1) a,
    2.75 -.pkglist td:nth-child(2),
    2.76 +.pkglist  td:nth-child(1) a,
    2.77 +.pkglist  td:nth-child(2),
    2.78  .filelist td:nth-child(1) a,
    2.79  .filelist td:nth-child(2) {
    2.80  	white-space: nowrap;
    2.81 @@ -104,6 +86,9 @@
    2.82  #head1h { display: none; position: fixed; }
    2.83  
    2.84  
    2.85 +
    2.86 +
    2.87 +
    2.88  /**
    2.89   * Summary table
    2.90   */
    2.91 @@ -111,8 +96,7 @@
    2.92  /* to have minimal width of first column */
    2.93  .summary td:nth-child(1) { width:10%; white-space: nowrap; }
    2.94  
    2.95 -/* light blue links on summary table */
    2.96 -.summary a { color: #248; }
    2.97 +
    2.98  
    2.99  
   2.100  
   2.101 @@ -124,14 +108,17 @@
   2.102  	display: inline-block;
   2.103  	padding: 0.5ex;
   2.104  	margin: 0.5ex 0;
   2.105 -	border: 1px solid #AAA;
   2.106 +	border: 1px solid hsla(0, 0%, 0%, 0.5);
   2.107  	width: 3ex;
   2.108  	text-align: center;
   2.109  }
   2.110 +.dark  .pages { background-color: #222; }
   2.111 +.light .pages { background-color: #CCC; }
   2.112  .pages:hover {
   2.113 -	border: 1px solid #F94;
   2.114 -	background: #F94;
   2.115 -	color: black;
   2.116 +	//border: 1px solid #F94;
   2.117 +	//background: #F94;
   2.118 +	//color: black;
   2.119 +	box-shadow: 0 0 2pt 0 hsl(0, 0%, 50%);
   2.120  }
   2.121  .pages.current, .pages.current:hover {
   2.122  	font-weight: bold;
   2.123 @@ -142,6 +129,8 @@
   2.124  
   2.125  
   2.126  
   2.127 +
   2.128 +
   2.129  /*
   2.130   * Tags
   2.131   */
   2.132 @@ -167,15 +156,7 @@
   2.133  
   2.134  
   2.135  
   2.136 -.button img {
   2.137 -	padding: 0 4px 0 0;
   2.138 -}
   2.139  
   2.140  
   2.141  /* Disable too much borders */
   2.142  section .hborders thead tr { border-top: none; border-bottom: 1pt solid #DDD; }
   2.143 -
   2.144 -
   2.145 -
   2.146 -
   2.147 -/* •‣⁕←↑→↓↔↕↥↯↶↷↺↻⇄⇅⇈⌫⏏█▶▷▸▹►▻▪▫◯●◻◼◽◾☐☑☒♺♻⚙⚠⚡⚪⚫✉✎✏✐✓✔✕✖✗✘❖➤➜➝➛⟲⟳⧎ */
     3.1 --- a/tazpkg	Wed Apr 01 04:29:22 2015 +0300
     3.2 +++ b/tazpkg	Fri Apr 03 15:51:06 2015 +0300
     3.3 @@ -1477,6 +1477,8 @@
     3.4  				[ -n "$LOCDESC" ] && SHORT_DESC="$LOCDESC"
     3.5  			fi
     3.6  		done
     3.7 +		SIZES=$(echo $PACKED_SIZE/$UNPACKED_SIZE | sed 's|\.0||g' | sed 's|^/$||')
     3.8 +
     3.9  		emsg "$(
    3.10  		{
    3.11  			_ 'Package    : %s' "$PACKAGE"
    3.12 @@ -1490,6 +1492,7 @@
    3.13  			_ 'Build deps : %s' "$BUILD_DEPENDS"
    3.14  			_ 'Wanted src : %s' "$WANTED"
    3.15  			_ 'Web site   : %s' "$WEB_SITE"
    3.16 +			_ 'Size       : %s' "$SIZES"
    3.17  			_ 'Tags       : %s' "$TAGS"
    3.18  		} | sed '/: $/d; s|^\([^:]*\):|<b>\1:</b>|')"
    3.19  		im && footer