tazpkg rev 726

pkgs.cgi: add pager to "cat"
"cat" runs fast enough, so not to cache it, but can add setting in the config file (as well as config for page length)
author Aleksej Bobylev <al.bobylev@gmail.com>
date Wed Dec 24 17:29:07 2014 +0200 (2014-12-24)
parents 0bfdb6c09732
children f32370a20712
files tazpanel/pkgs.cgi tazpanel/pkgs.css
line diff
     1.1 --- a/tazpanel/pkgs.cgi	Wed Dec 24 03:53:37 2014 +0200
     1.2 +++ b/tazpanel/pkgs.cgi	Wed Dec 24 17:29:07 2014 +0200
     1.3 @@ -157,6 +157,9 @@
     1.4  		list)         img='tazpkg';   label="$(_ 'My packages')" ;;
     1.5  		linkable)     img='tazpkg';   label="$(_ 'Linkable packages')" ;;
     1.6  		admin)        img='edit';     label="$(_ 'Administration')" ;;
     1.7 +		*Install*nf*) img='';         label="$(_ 'Install (Non Free)')" ;;
     1.8 +		*Install*)    img='';         label="$(_ 'Install')" ;;
     1.9 +		*Remove*)     img='stop';     label="$(_ 'Remove')" ;;
    1.10  		*Block*)      img='';         label="$(_ 'Block')" ;;
    1.11  		*Unblock*)    img='';         label="$(_ 'Unblock')" ;;
    1.12  		*Repack*)     img='';         label="$(_ 'Repack')" ;;
    1.13 @@ -283,6 +286,7 @@
    1.14  	esac
    1.15  }
    1.16  
    1.17 +
    1.18  make_mixed_list() {
    1.19  	for L in $LANG ${LANG%%_*}; do
    1.20  		if [ -e "$PKGS_DB/packages-desc.$L" ]; then
    1.21 @@ -299,6 +303,30 @@
    1.22  }
    1.23  
    1.24  
    1.25 +# Print links to the pages
    1.26 +
    1.27 +pager() {
    1.28 +	awk -F'"' -vpage="$page" -vcached="$1" -vnum_lines="$(wc -l < $1)" -vtext="$(_ 'Pages:') " -vurl="cat=$category&amp;repo=$repo&amp;page=" '
    1.29 +BEGIN{
    1.30 +	num_pages = int(num_lines / 100) + (num_lines % 100 != 0)
    1.31 +	if (num_pages != 1) printf "<p>%s", text
    1.32 +}
    1.33 +{
    1.34 +	if (num_pages == 1) exit
    1.35 +	p = int(NR/100) + 1
    1.36 +	if (p != page) current = ""; else current=" current"
    1.37 +
    1.38 +	if (NR%100 == 1) printf "<a class=\"pages%s\" href=\"?%s%s\" title=\"%s\n···\n", current, url, p, $6
    1.39 +	if (NR%100 == 0) printf "%s\">%s</a> ", $6, p - 1
    1.40 +}
    1.41 +END{
    1.42 +	if (num_pages == 1) exit
    1.43 +	if (NR%100 != 0) printf "%s\">%s</a>", $6, p
    1.44 +	print "</p>"
    1.45 +}' $1
    1.46 +}
    1.47 +
    1.48 +
    1.49  
    1.50  #
    1.51  # Commands
    1.52 @@ -449,12 +477,12 @@
    1.53  <h3>$(_ 'Repository: %s' $Repo_Name)</h3>
    1.54  EOT
    1.55  			fi
    1.56 -			echo '<table class="zebra outbox pkglist">'
    1.57 -			table_head
    1.58 -			echo '<tbody>'
    1.59  
    1.60  			case $category in
    1.61  				extra)
    1.62 +					echo '<table class="zebra outbox pkglist">'
    1.63 +					table_head
    1.64 +					echo '<tbody>'
    1.65  					NA="$(_n 'n/a')"
    1.66  					for pkg in $(cat $i/extra.list); do
    1.67  						PKG="$(grep ^$pkg$'\t' $i/installed.info)"
    1.68 @@ -464,8 +492,10 @@
    1.69  							echo "$pkg	$NA	-	$NA	http://mirror.slitaz.org/packages/get/$pkg	-	-	-"
    1.70  						fi
    1.71  					done | parse_packages_info
    1.72 +					echo "</tbody></table>"
    1.73  					;;
    1.74  				*)
    1.75 +					cached="$CACHE_DIR/$repo-$category"
    1.76  					make_mixed_list | sort -t$'\t' -k1,1 | awk -F$'\t' -vc="$category" '
    1.77  {
    1.78  	if (PKG && PKG != $1) {
    1.79 @@ -484,13 +514,20 @@
    1.80  		if ($9 == "i") { PKG = $1; VER = $2; DSC = $4; WEB = $5; INS = "i"; next}
    1.81  		if (! INS)     { PKG = $1; VER = $2; DSC = $4; WEB = $5 }
    1.82  	}
    1.83 -}'
    1.84 +}' > $cached
    1.85 +					page=$(GET page); [ -z "$page" ] && page=1
    1.86 +					pager="$(pager $cached)"
    1.87 +
    1.88 +					echo "$pager"
    1.89 +					echo '<table class="zebra outbox pkglist">'
    1.90 +					table_head
    1.91 +					echo '<tbody>'
    1.92 +					tail -n+$((($page-1)*100+1)) $cached | head -n100
    1.93 +					echo "</tbody></table>"
    1.94 +					echo "$pager"
    1.95 +					rm -f $cached
    1.96  					;;
    1.97  			esac
    1.98 -			cat << EOT
    1.99 -</tbody>
   1.100 -</table>
   1.101 -EOT
   1.102  		done
   1.103  		echo '</form>' ;;
   1.104  
   1.105 @@ -699,7 +736,6 @@
   1.106  			. $INSTALLED/$pkg/receipt
   1.107  			files=$(wc -l < $INSTALLED/$pkg/files.list)
   1.108  			action="Remove"
   1.109 -			action_i18n=$(_ 'Remove')
   1.110  		else
   1.111  			cd $PKGS_DB
   1.112  			LOADING_MSG=$(_ 'Getting package info...')
   1.113 @@ -713,7 +749,6 @@
   1.114  			CATEGORY="$(echo $4)"
   1.115  			WEB_SITE="$(echo $5)"
   1.116  			action="Install"
   1.117 -			action_i18n=$(_ 'Install')
   1.118  			temp="${pkg#get-}"
   1.119  		fi
   1.120  		cat << EOT
   1.121 @@ -725,9 +760,9 @@
   1.122  EOT
   1.123  		if [ "$temp" != "$pkg" -a "$action" == "Install" ]; then
   1.124  			temp="$(echo $pkg | sed 's/get-//g')"
   1.125 -			echo "<a class='button' href='$SCRIPT_NAME?do=Install&$temp'>$(_ 'Install (Non Free)')</a>"
   1.126 +			show_button "do=Install&$temp&nf"
   1.127  		else
   1.128 -			echo "<a class='button' href='$SCRIPT_NAME?do=$action&$pkg'>$action_i18n</a>"
   1.129 +			show_button "do=$action&$pkg"
   1.130  		fi
   1.131  
   1.132  		if [ -d $INSTALLED/$pkg ]; then
     2.1 --- a/tazpanel/pkgs.css	Wed Dec 24 03:53:37 2014 +0200
     2.2 +++ b/tazpanel/pkgs.css	Wed Dec 24 17:29:07 2014 +0200
     2.3 @@ -49,3 +49,24 @@
     2.4  	max-width: 30em;
     2.5  	}
     2.6  
     2.7 +#actions { overflow: auto; }
     2.8 +
     2.9 +a.pages {
    2.10 +	padding: 0.5ex;
    2.11 +	margin: 0.5ex 0;
    2.12 +	border: 1px solid #AAA;
    2.13 +	width: 3ex;
    2.14 +	display: inline-block;
    2.15 +	text-align: center;
    2.16 +	}
    2.17 +a.pages:hover {
    2.18 +	border: 1px solid #F94;
    2.19 +	background: #F94;
    2.20 +	color: black;
    2.21 +	}
    2.22 +a.pages.current, a.pages.current:hover {
    2.23 +	font-weight: bold;
    2.24 +	border: 1px solid #07F;
    2.25 +	background: #07F;
    2.26 +	color: #eee;
    2.27 +	}