slitaz-forge rev 293

pkgs: New features included, see README. Site yet not completed, but works fine...
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri Apr 20 17:42:46 2012 +0300 (2012-04-20)
parents 58d1f4820252
children 1a1a1a02cb82
files pkgs/README pkgs/lib/footer.sh pkgs/lib/header.sh pkgs/pkgs.css pkgs/search.sh pkgs/style/images/loader.gif
line diff
     1.1 --- a/pkgs/README	Fri Apr 20 16:08:49 2012 +0200
     1.2 +++ b/pkgs/README	Fri Apr 20 17:42:46 2012 +0300
     1.3 @@ -15,21 +15,20 @@
     1.4  	* all css now in _standard_ slitaz.css (from website) and pkgs.css
     1.5  	* nice URLs to share via copy them from address bar
     1.6  	* improve debug mode
     1.7 +	* added progress ticker while page is not complete
     1.8 +	* added style highlighting for the receipts
     1.9  
    1.10  TODO
    1.11  ----
    1.12  
    1.13  	* Add package page with all info and an install link
    1.14  	  (tazpkg:// or tazpkg: works in Midori
    1.15 -	* implement POST method of the form submitting
    1.16 -	* implement more nice redirect, than http refresh
    1.17  	* add hint 'You are can search for depends loop, if textfield is empty'...
    1.18 -	* add progress ticker while page is not complete
    1.19  	* caching the footer summary
    1.20 -	* add style highlighting for the receipts
    1.21  	* clear the file names, so our goal is URL like:
    1.22  	  http://pkgs.slitaz.org/?package=geany
    1.23  	  (form action="$SCRIPT_NAME" -> action="/")
    1.24  	* standard 4.0 have /usr/lib/slitaz/httphelper (without '.sh')
    1.25 +	* display dependency trees as an unordered lists
    1.26  
    1.27  ================================================================================
     2.1 --- a/pkgs/lib/footer.sh	Fri Apr 20 16:08:49 2012 +0200
     2.2 +++ b/pkgs/lib/footer.sh	Fri Apr 20 17:42:46 2012 +0300
     2.3 @@ -1,9 +1,9 @@
     2.4  cat << _EOT_
     2.5  
     2.6 -<center>
     2.7 -<i>$(eval_ngettext "\$PKGS package" "\$PKGS packages" $PKGS)
     2.8 -$(eval_ngettext "and \$FILES file in \$SLITAZ_VERSION database" "and \$FILES files in \$SLITAZ_VERSION database" $FILES)</i>
     2.9 -</center>
    2.10 +<div class="summary">
    2.11 +$(eval_ngettext "\$PKGS package" "\$PKGS packages" $PKGS)
    2.12 +$(eval_ngettext "and \$FILES file in \$SLITAZ_VERSION database" "and \$FILES files in \$SLITAZ_VERSION database" $FILES)
    2.13 +</div>
    2.14  
    2.15  <!-- End of content -->
    2.16  </div>
    2.17 @@ -14,6 +14,7 @@
    2.18  <script type="text/javascript">
    2.19  	var q=document.getElementById('query');
    2.20  	var v=q.value; q.value=''; q.focus(); q.value=v;
    2.21 +	document.getElementById('ticker').style.visibility='hidden';
    2.22  </script>
    2.23  </body>
    2.24  </html>
     3.1 --- a/pkgs/lib/header.sh	Fri Apr 20 16:08:49 2012 +0200
     3.2 +++ b/pkgs/lib/header.sh	Fri Apr 20 17:42:46 2012 +0300
     3.3 @@ -29,7 +29,4 @@
     3.4  	<h1><a href="./">$(gettext "SliTaz Packages")</a></h1>
     3.5  </div>
     3.6  
     3.7 -<!-- Content -->
     3.8 -<div id="content">
     3.9 -
    3.10  _EOF_
     4.1 --- a/pkgs/pkgs.css	Fri Apr 20 16:08:49 2012 +0200
     4.2 +++ b/pkgs/pkgs.css	Fri Apr 20 17:42:46 2012 +0300
     4.3 @@ -1,50 +1,22 @@
     4.4 -
     4.5 -#s_form {
     4.6 -	margin: auto;
     4.7 -	text-align: center;
     4.8 -	padding: 20px;
     4.9 -}
    4.10  
    4.11  /* Be compatible with old FF and Webkit version. */
    4.12 -input[type="submit"] {
    4.13 +/*input[type="submit"] {
    4.14  	-webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
    4.15  	-moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
    4.16  	box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1);
    4.17 -}
    4.18 +}*/
    4.19  
    4.20 -#header {
    4.21 -	border-bottom: 8px solid #D66018;
    4.22 -}
    4.23 +#header { border-bottom: 8px solid #D66018; }
    4.24 +#header h1 { padding: 3px 0 0 42px; }
    4.25 +#network { padding: 12px 5px 0; }
    4.26 +#footer { background-color: #FFF; }
    4.27  
    4.28 -#header h1 {
    4.29 -	padding: 3px 0 0 42px;
    4.30 -}
    4.31 -
    4.32 -#network { 
    4.33 -	padding: 12px 5px 0; 
    4.34 -}
    4.35 -
    4.36 -table, input, textarea, select {
    4.37 -	-moz-border-radius: 4px;
    4.38 -	-webkit-border-radius: 4px;
    4.39 -	border-radius: 4px;
    4.40 -}
    4.41 -
    4.42 -input[type=text] {
    4.43 -	width: 40%;
    4.44 -}
    4.45 -
    4.46 -#footer {
    4.47 -	background-color: #FFF;
    4.48 -}
    4.49 -
    4.50 -select:focus, select:hover, input:focus, input:hover {
    4.51 +/* COMMON STYLES */
    4.52 +select:focus, select:hover, input:focus, input[type]:hover {
    4.53  	color: #000;
    4.54 -	outline: 0 none;
    4.55  	-webkit-box-shadow: 0 0 4px rgba(0,0,0,0.3);
    4.56  	-moz-box-shadow: 0 0 4px rgba(0,0,0,0.3);
    4.57  }
    4.58 -
    4.59  input, select {
    4.60  	-webkit-transition: all 0.3s ease-in-out;
    4.61  	-moz-transition: all 0.3s ease-in-out;
    4.62 @@ -52,46 +24,124 @@
    4.63  	-ms-transition: all 0.3s ease-in-out;
    4.64  	transition: all 0.3s ease-in-out;
    4.65  }
    4.66 +select, input[type="text"], input[type="submit"] {
    4.67 +	font-size: 14px;
    4.68 +	border: 1px solid #CCC;
    4.69 +	-moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px;
    4.70 +	color: #444;
    4.71 +	outline: 0 none;
    4.72 +}
    4.73  
    4.74 -input[type="submit"], input[type="text"], textarea {
    4.75 -	color: #444;
    4.76 +/* TABLE */
    4.77 +table {
    4.78 +	width: 100%;
    4.79 +	font-size: 12px;
    4.80  	border: 1px solid #CCC;
    4.81 +	-moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px;
    4.82 +	border-spacing: 0;
    4.83 +	padding: 2px;
    4.84 +}
    4.85 +tr {
    4.86 +	margin: 0;
    4.87  	padding: 4px;
    4.88 -	margin: 4px 0px;
    4.89 +}
    4.90 +td {
    4.91 +	margin: 0;
    4.92 +	padding: 6px;
    4.93 +	vertical-align: top;
    4.94 +}
    4.95 +tr.even {
    4.96 +	background-color: #F0F0F0;
    4.97 +}
    4.98 +td.first {
    4.99 +	width: 1%;
   4.100 +	white-space: nowrap;
   4.101 +}
   4.102 +td.pre {
   4.103 +	padding-left: 2em;
   4.104 +	white-space: nowrap;
   4.105 +}
   4.106 +
   4.107 +
   4.108 +/* --- */
   4.109 +
   4.110 +input[type="submit"] {
   4.111 +	padding: 4px;
   4.112 +	margin: 0;
   4.113  	font-size: 14px;
   4.114 -	line-height: 1.2em;
   4.115  	background-image: -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5);
   4.116  	background-image: -moz-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5);
   4.117 -	-webkit-appearance: none;
   4.118 +/*	-webkit-appearance: none;
   4.119  	-webkit-padding-end: 6px;
   4.120 -	-webkit-padding-start: 6px;
   4.121 +	-webkit-padding-start: 6px;*/
   4.122  }
   4.123  
   4.124 -input[type="submit"]:hover {
   4.125 -	color: #000;
   4.126 +div.form {
   4.127 +	display: table;
   4.128 +	table-layout: auto;
   4.129 +	width: 100%;
   4.130 +	padding: 0;
   4.131 +	margin: 0 0 20px 0; /* t r b l */
   4.132  }
   4.133  
   4.134 -input[type="text"], textarea { background: #fefefe; border: 1px solid #ccc; }
   4.135 -/*input[type="file"] { border: 2px solid #ddd; }*/
   4.136 -/*input[type="checkbox"] { background: #fefefe; }*/
   4.137 +#s_form {
   4.138 +	display: table-row;
   4.139 +	padding: 0;
   4.140 +	margin: 0;
   4.141 +	text-align: center;
   4.142 +	border: 1pt solid yellow;
   4.143 +}
   4.144  
   4.145 -input[type=submit], select { cursor: pointer; }
   4.146 +.small {
   4.147 +	white-space: nowrap;
   4.148 +	display: table-cell;
   4.149 +	width: 10%;
   4.150 +}
   4.151  
   4.152  select {
   4.153 -	background-image: url(style/images/down.png),
   4.154 -		-webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5);
   4.155 +	padding: 4px;
   4.156 +	margin: 0 4px;
   4.157 +	background-image: -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5);
   4.158  	background-position: center right;
   4.159  	background-repeat: no-repeat;
   4.160 -
   4.161 -	color: #444444;
   4.162 -	border: 1px solid #cccccc;
   4.163 -	padding: 4px 32px 4px 4px;
   4.164 -	margin: 4px 0px;
   4.165 -	font-size: 14px;
   4.166 -	line-height: 1.2em;
   4.167  	-webkit-appearance: none;
   4.168 +	cursor: pointer;
   4.169  }
   4.170  
   4.171 -poption {
   4.172 -	padding: 4px 32px 4px 4px;
   4.173 +span.stretch {
   4.174 +	display: table-cell;
   4.175 +	width: 100%;
   4.176 +	padding: 0 4px;
   4.177 +	margin: 0;
   4.178  }
   4.179 +
   4.180 +input[type="text"] {
   4.181 +	padding: 4px 0;
   4.182 +	margin: 0;
   4.183 +	border: 1px solid #CCC;
   4.184 +	background-color: #FEFEFE;
   4.185 +}
   4.186 +
   4.187 +div#ticker img {
   4.188 +	float: right;
   4.189 +}
   4.190 +
   4.191 +.summary {
   4.192 +	margin-top: 12px;
   4.193 +	text-align: center;
   4.194 +	font-style: italic;
   4.195 +}
   4.196 +.match {
   4.197 +	font-weight: bold;
   4.198 +	color: #F33;
   4.199 +}
   4.200 +
   4.201 +/* SYNTAX HIGHLIGHTER */
   4.202 +.r-comment { color: #888; }
   4.203 +.r-literal { color: #f35a00; }
   4.204 +.r-var { font-weight: bold; color: #070; }
   4.205 +.r-func { color: #4895DD; }
   4.206 +.r-url { text-decoration: none; }
   4.207 +.r-com, .r-scom { color: #4895DD; font-weight: bold; /*background-color: #cde;*/ }
   4.208 +.r-path { text-decoration: underline; color: brown; }
   4.209 +.r-param { font-weight: bold; color: #444; }
     5.1 --- a/pkgs/search.sh	Fri Apr 20 16:08:49 2012 +0200
     5.2 +++ b/pkgs/search.sh	Fri Apr 20 17:42:46 2012 +0300
     5.3 @@ -6,7 +6,7 @@
     5.4  
     5.5  # Parse query string
     5.6  . /usr/lib/slitaz/httphelper.sh
     5.7 -
     5.8 +echo -n "0" > $HOME/ifEven
     5.9  
    5.10  # User preferred language
    5.11  # parameter $1 have priority; without parameter $1 - browser language only
    5.12 @@ -40,57 +40,59 @@
    5.13  	echo ${ll_CC%_*}
    5.14  }
    5.15  
    5.16 -# Nice URL replacer - to copy url from address bar
    5.17 -# TODO: deal with POST method of form submitting
    5.18 -nice_url() {
    5.19 -	# if user submitted a form
    5.20 -	if [ ! -z $(GET submit) ]; then
    5.21 -		OBJECT="$(GET object)"
    5.22 -		SEARCH="$(GET query)"
    5.23 -		case $OBJECT in
    5.24 -			Package)		NICE="package=$SEARCH";;
    5.25 -			Desc)			NICE="desc=$SEARCH";;
    5.26 -			Tags)			NICE="tags=$SEARCH";;
    5.27 -			Receipt)		NICE="receipt=$SEARCH";;
    5.28 -			Depends)		NICE="depends=$SEARCH";;
    5.29 -			BuildDepends)	NICE="builddepends=$SEARCH";;
    5.30 -			File)			NICE="file=$SEARCH";;
    5.31 -			File_list)		NICE="filelist=$SEARCH";;
    5.32 -			FileOverlap)	NICE="fileoverlap=$SEARCH";;
    5.33 -		esac
    5.34 -		# version, if needed
    5.35 -		version="$(GET version)"
    5.36 -		if [ ! -z "$version" -a "$version" != "cooking" ]; then
    5.37 -			NICE="${NICE}&version=${version:0:1}"
    5.38 -		fi
    5.39 -		# lang, if needed
    5.40 -		query_lang="$(GET lang)"
    5.41 -		pref_lang="$(user_lang)"
    5.42 -		browser_lang="$(ll_lang $pref_lang)"
    5.43 -		if [ ! -z "$query_lang" -a "$query_lang" != "$browser_lang" ]; then
    5.44 -			NICE="${NICE}&lang=$query_lang"
    5.45 -		fi
    5.46 -		# verbose, if needed
    5.47 -		verboseq="$(GET verbose)"
    5.48 -		if [ ! -z "$verboseq" -a "$verboseq" != "0" ]; then
    5.49 -			NICE="${NICE}&verbose=1"
    5.50 -		fi
    5.51 -		# redirect
    5.52 -		# TODO: implement HTTP 301 Redirect
    5.53 -		cat << EOT
    5.54 -Content-type: text/html
    5.55 -
    5.56 -<!DOCTYPE html>
    5.57 -<html><head><meta http-equiv="refresh" content="0;url=$SCRIPT_NAME?$NICE" />
    5.58 -<title>Redirect</title></head></html>
    5.59 -EOT
    5.60 -#		echo "Location: $SCRIPT_NAME?$NICE"
    5.61 -#		echo
    5.62 -		exit 0
    5.63 -	fi
    5.64 +# Part of query to indicate current debug mode
    5.65 +ifdebug() {
    5.66 +	ifdebug="$(GET debug)"
    5.67 +	[ ! -z "$ifdebug" ] && ifdebug="$1$ifdebug"
    5.68 +	echo "$ifdebug"
    5.69  }
    5.70  
    5.71 -nice_url
    5.72 +# GET or POST variable
    5.73 +GETPOST() {
    5.74 +	echo "$(POST $1)$(GET $1)"
    5.75 +}
    5.76 +
    5.77 +# Nice URL replacer - to copy url from address bar
    5.78 +if [ "$REQUEST_METHOD" == "POST" -o ! -z $(GET submit) ]; then
    5.79 +	OBJECT=$(GETPOST object)
    5.80 +	SEARCH=$(GETPOST query)
    5.81 +	case "$OBJECT" in
    5.82 +		Package)		NICE="package=$SEARCH";;
    5.83 +		Desc)			NICE="desc=$SEARCH";;
    5.84 +		Tags)			NICE="tags=$SEARCH";;
    5.85 +		Receipt)		NICE="receipt=$SEARCH";;
    5.86 +		Depends)		NICE="depends=$SEARCH";;
    5.87 +		BuildDepends)	NICE="builddepends=$SEARCH";;
    5.88 +		File)			NICE="file=$SEARCH";;
    5.89 +		File_list)		NICE="filelist=$SEARCH";;
    5.90 +		FileOverlap)	NICE="fileoverlap=$SEARCH";;
    5.91 +	esac
    5.92 +	# version, if needed
    5.93 +	version="$(GETPOST version)"
    5.94 +	if [ ! -z "$version" -a "$version" != "cooking" ]; then
    5.95 +		NICE="${NICE}&version=${version:0:1}"
    5.96 +	fi
    5.97 +	# lang, if needed
    5.98 +	query_lang="$(GETPOST lang)"
    5.99 +	pref_lang="$(user_lang)"
   5.100 +	browser_lang="$(ll_lang $pref_lang)"
   5.101 +	if [ ! -z "$query_lang" -a "$query_lang" != "$browser_lang" ]; then
   5.102 +		NICE="${NICE}&lang=$query_lang"
   5.103 +	fi
   5.104 +	# verbose, if needed
   5.105 +	verboseq="$(GETPOST verbose)"
   5.106 +	if [ ! -z "$verboseq" -a "$verboseq" != "0" ]; then
   5.107 +		NICE="${NICE}&verbose=1"
   5.108 +	fi
   5.109 +	# debug, if needed
   5.110 +	debugq="$(GET debug)"
   5.111 +	if [ ! -z "$debugq" -a "$debugq" == "debug" ]; then
   5.112 +		NICE="${NICE}&debug"
   5.113 +	fi
   5.114 +	# redirect
   5.115 +	header "HTTP/1.1 301 Moved Permanently" "Location: $SCRIPT_NAME?$NICE"
   5.116 +	exit 0
   5.117 +fi
   5.118  
   5.119  
   5.120  
   5.121 @@ -131,11 +133,10 @@
   5.122  	esac
   5.123  done
   5.124  [ -z "$SLITAZ_VERSION" ] && SLITAZ_VERSION=cooking
   5.125 -#[ -n "$SEARCH" ] && REQUEST_METHOD="POST"
   5.126 -#[ "$SEARCH" == "." ] && SEARCH=
   5.127  
   5.128 -
   5.129 +#
   5.130  # Content negotiation for Gettext
   5.131 +#
   5.132  LANG=$(user_lang $(GET lang))
   5.133  lang="$(ll_lang $LANG)"
   5.134  export LANG LC_ALL=$LANG
   5.135 @@ -167,45 +168,48 @@
   5.136  WOK=/home/slitaz/$SLITAZ_VERSION/wok
   5.137  PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages
   5.138  
   5.139 -
   5.140 -# TODO: header function from httphelper
   5.141 -echo "Content-type: text/html"
   5.142 -echo
   5.143 -
   5.144  # Search form
   5.145 -# TODO: implement POST method
   5.146 -# ... method="post" enctype="multipart/form-data" ...
   5.147  # TODO: add hint 'You are can search for depends loop, if textfield is empty'...
   5.148  # add progress ticker while page is not complete
   5.149  search_form()
   5.150  {
   5.151  	cat << _EOT_
   5.152  
   5.153 -<form id="s_form" method="get" action="$SCRIPT_NAME">
   5.154 +<div class="form">
   5.155 +<form id="s_form" method="post" action="$SCRIPT_NAME$(ifdebug '?')">
   5.156  	<input type="hidden" name="lang" value="$lang" />
   5.157 -	<select name="object">
   5.158 -		<option value="Package">$(gettext "Package")</option>
   5.159 -		<option $selected_desc value="Desc">$(gettext "Description")</option>
   5.160 -		<option $selected_tags value="Tags">$(gettext "Tags")</option>
   5.161 -		<option $selected_receipt value="Receipt">$(gettext "Receipt")</option>
   5.162 -		<option $selected_depends value="Depends">$(gettext "Depends")</option>
   5.163 -		<option $selected_build_depends value="BuildDepends">$(gettext "Build depends")</option>
   5.164 -		<option $selected_file value="File">$(gettext "File")</option>
   5.165 -		<option $selected_file_list value="File_list">$(gettext "File list")</option>
   5.166 -		<option $selected_overlap value="FileOverlap">$(gettext "common files")</option>
   5.167 -	</select>
   5.168 -	<input type="text" name="query" id="query" size="20" value="$SEARCH" />
   5.169 -	<select name="version">
   5.170 -		<option value="cooking">$(gettext "cooking")</option>
   5.171 -		<option $selected_stable value="stable">4.0</option>
   5.172 -		<option $selected_3 value="3.0">3.0</option>
   5.173 -		<option $selected_2 value="2.0">2.0</option>
   5.174 -		<option $selected_1 value="1.0">1.0</option>
   5.175 -		<option $selected_tiny value="tiny">$(gettext "tiny")</option>
   5.176 -		<option $selected_undigest value="undigest">$(gettext "undigest")</option>
   5.177 -	</select>
   5.178 -	<input type="submit" name="submit" value="$(gettext 'Search')" />
   5.179 +	<span class="small">
   5.180 +		<select name="object">
   5.181 +			<option value="Package">$(gettext "Package")</option>
   5.182 +			<option $selected_desc value="Desc">$(gettext "Description")</option>
   5.183 +			<option $selected_tags value="Tags">$(gettext "Tags")</option>
   5.184 +			<option $selected_receipt value="Receipt">$(gettext "Receipt")</option>
   5.185 +			<option $selected_depends value="Depends">$(gettext "Depends")</option>
   5.186 +			<option $selected_build_depends value="BuildDepends">$(gettext "Build depends")</option>
   5.187 +			<option $selected_file value="File">$(gettext "File")</option>
   5.188 +			<option $selected_file_list value="File_list">$(gettext "File list")</option>
   5.189 +			<option $selected_overlap value="FileOverlap">$(gettext "common files")</option>
   5.190 +		</select>
   5.191 +	</span>
   5.192 +	<span class="stretch">
   5.193 +		<input autofocus type="text" name="query" id="query" value="$SEARCH" />
   5.194 +	</span>
   5.195 +	<span class="small">
   5.196 +		<select name="version">
   5.197 +			<option value="cooking">$(gettext "cooking")</option>
   5.198 +			<option $selected_stable value="stable">4.0</option>
   5.199 +			<option $selected_3 value="3.0">3.0</option>
   5.200 +			<option $selected_2 value="2.0">2.0</option>
   5.201 +			<option $selected_1 value="1.0">1.0</option>
   5.202 +			<option $selected_tiny value="tiny">$(gettext "tiny")</option>
   5.203 +			<option $selected_undigest value="undigest">$(gettext "undigest")</option>
   5.204 +		</select>
   5.205 +	</span>
   5.206 +	<span class="small">
   5.207 +		<input type="submit" value="$(gettext 'Search')" />
   5.208 +	</span>
   5.209  </form>
   5.210 +</div>
   5.211  _EOT_
   5.212  }
   5.213  
   5.214 @@ -233,23 +237,59 @@
   5.215  	fi
   5.216  }
   5.217  
   5.218 -package_entry()
   5.219 -{
   5.220 -if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
   5.221 -	cat << _EOT_
   5.222 -<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE): $SHORT_DESC
   5.223 +oddeven() {
   5.224 +	ifEven=$(cat $HOME/ifEven)
   5.225 +	[ "$1" == "1" ] && ifEven="0"
   5.226 +	case "$ifEven" in
   5.227 +		"0")	ifEven="1"; echo -n " class=\"even\"";;
   5.228 +		"1")	ifEven="0";;
   5.229 +	esac
   5.230 +	echo -n "$ifEven" > $HOME/ifEven
   5.231 +}
   5.232 +
   5.233 +package_entry() {
   5.234 +	cat << EOT
   5.235 +<tr$(oddeven $1)>
   5.236 +EOT
   5.237 +	if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
   5.238 +		cat << _EOT_
   5.239 +	<td class="first"><a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a></td>
   5.240 +	<td class="first">$(installed_size $PACKAGE)</td>
   5.241 +	<td>$SHORT_DESC</td>
   5.242  _EOT_
   5.243 -else
   5.244 -	PACKAGE_HREF="<u>$PACKAGE</u>"
   5.245 -	PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
   5.246 -	nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
   5.247 -	PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
   5.248 -	busybox wget -s $PACKAGE_URL 2> /dev/null &&
   5.249 -	PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
   5.250 -	cat << _EOT_
   5.251 -$PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC
   5.252 +	else
   5.253 +		PACKAGE_HREF="<u>$PACKAGE</u>"
   5.254 +		PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
   5.255 +		nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
   5.256 +		PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
   5.257 +		busybox wget -s $PACKAGE_URL 2> /dev/null &&
   5.258 +		PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
   5.259 +		cat << _EOT_
   5.260 +	<td class="first">$PACKAGE_HREF</td>
   5.261 +	<td class="first">$(installed_size $PACKAGE)</td>
   5.262 +	<td>$SHORT_DESC</td>
   5.263  _EOT_
   5.264 -fi
   5.265 +	fi
   5.266 +	cat << EOT
   5.267 +</tr>
   5.268 +EOT
   5.269 +}
   5.270 +package_entry_inline() {
   5.271 +	if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then
   5.272 +		cat << _EOT_
   5.273 +<a href="$SLITAZ_VERSION/$CATEGORY.html#$PACKAGE">$PACKAGE</a> $(installed_size $PACKAGE) : $SHORT_DESC
   5.274 +_EOT_
   5.275 +	else
   5.276 +		PACKAGE_HREF="<u>$PACKAGE</u>"
   5.277 +		PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg"
   5.278 +		nslookup mirror.slitaz.org | grep -q 127.0.0.1 &&
   5.279 +		PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)"
   5.280 +		busybox wget -s $PACKAGE_URL 2> /dev/null &&
   5.281 +		PACKAGE_HREF="<a href=\"$PACKAGE_URL\">$PACKAGE</a>"
   5.282 +		cat << _EOT_
   5.283 +$PACKAGE_HREF $(installed_size $PACKAGE) : $SHORT_DESC
   5.284 +_EOT_
   5.285 +	fi
   5.286  }
   5.287  
   5.288  # Show loop in depends/build_depends chains
   5.289 @@ -304,7 +344,7 @@
   5.290  		echo -n "$2"
   5.291  		(
   5.292  		. $WOK/$i/receipt
   5.293 -		package_entry
   5.294 +		package_entry_inline
   5.295  		)
   5.296  	fi
   5.297  	[ -f $WOK/$i/receipt ] || continue
   5.298 @@ -364,7 +404,7 @@
   5.299  ' | while read pkg; do
   5.300  		. $WOK/${pkg##*/}/receipt
   5.301  		cat << _EOT_
   5.302 -$(echo ${pkg%/*} | sed 's|/| |g') $(package_entry)
   5.303 +$(echo ${pkg%/*} | sed 's|/| |g') $(package_entry_inline)
   5.304  _EOT_
   5.305  done
   5.306  }
   5.307 @@ -381,29 +421,122 @@
   5.308  }
   5.309  
   5.310  # Display < > &
   5.311 -htmlize()
   5.312 -{
   5.313 +htmlize() {
   5.314  	sed -e 's/&/\&amp;/g' -e 's/</\&lt;/g' -e 's/>/\&gt;/g'
   5.315  }
   5.316  
   5.317 -display_packages_and_files()
   5.318 -{
   5.319 +display_packages_and_files() {
   5.320  last=""
   5.321  while read pkg file; do
   5.322  	pkg=${pkg%:}
   5.323  	if [ "$pkg" != "$last" ]; then
   5.324  		. $WOK/$pkg/receipt
   5.325  
   5.326 -		package_entry
   5.327 +		package_entry_inline
   5.328  		last=$pkg
   5.329  	fi
   5.330  	echo "    $file"
   5.331  done
   5.332  }
   5.333  
   5.334 +# Syntax highlighting for receipt file - stolen from tazpanel:
   5.335 +# '/var/www/tazpanel/lib/libtazpanel' and developed
   5.336 +syntax_highlighter() {
   5.337 +	cat "$1" | sed -e "s|\&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g; s|	|    |g" \
   5.338 +			-e "s|@|\&#64;|g; s|~|\&#126;|g" \
   5.339 +	-e "#literals" \
   5.340 +			-e "s|'\([^']*\)'|@l\0~|g" \
   5.341 +			-e 's|"\([^"]*\)"|@l\0~|g' \
   5.342 +			-e 's|"\([^"]*\)\\|@l\0~|g' \
   5.343 +			-e 's|\([^"]*\)\"$|@l\0~|g' \
   5.344 +	-e "#paths" \
   5.345 +			-e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+\)\([ )]\)|\1@p\2~\3|g' \
   5.346 +			-e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+$\)|\1@p\2~|g' \
   5.347 +			-e 's|\(\$[a-zA-Z0-9_\.-]\+\)\(/[\$a-zA-Z0-9_/\.\*-]\+\)\([ )]*\)|@p\1\2~\3|g' \
   5.348 +	-e "#functions" \
   5.349 +			-e 's|^\([^()]*\)\(()\)|@f\0~|g' \
   5.350 +	-e "#single line comments" \
   5.351 +			-e 's|^\([ ]*\)#\([^#]*$\)|@c\0~|g' \
   5.352 +	-e "#parameters" \
   5.353 +			-e 's|\( \)\(-[a-z0-9]\+\)\( *\)|\1@r\2~\3|g' \
   5.354 +			-e 's|\( \)\(--[a-z0-9\-]\+\)\([= ]\)|\1@r\2~\3|g' \
   5.355 +	-e "#variables" \
   5.356 +			-e "s|^\([^=@#' \-]*\)\(=\)|@v\1~\2|g" \
   5.357 +			-e 's|\([ ^@-]*\)\([a-zA-Z0-9]\+\)\(=\)|\1@v\2~\3|g' \
   5.358 +			-e "s#\(\$[a-zA-Z0-9_]\+\)#@v\0~#g" \
   5.359 +	-e "#urls" \
   5.360 +			-e s"#\"\(http:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
   5.361 +			-e s"#\"\(ftp:[^\"\$ ]*\)\"#\"<a @u href=\0>\1</a>\"#"g \
   5.362 +	-e "#commands" \
   5.363 +			-e s"#^\( \+\)\([^'= @\-]\+\)#\1@m\2~#"g \
   5.364 +	-e "#simple commands" \
   5.365 +			-e s"#\([{}\]$\)#@s\0~#"g \
   5.366 +			-e s"#\( \)\(\&amp;\&amp;\)\( *\)#\1@s\2~\3#"g \
   5.367 +			-e s"#\(|\)#@s\0~#"g \
   5.368 +			-e s"#\(\&lt;\)#@s\0~#"g \
   5.369 +			-e s"#\(\&gt;\&amp;\)#@s\0~#"g \
   5.370 +			-e s"#\(\&gt;\)#@s\0~#"g \
   5.371 +			-e s"#\(\[\)#@s\0~#"g \
   5.372 +			-e s"#\(\]\)#@s\0~#"g \
   5.373 +\
   5.374 +			-e "s|´|'|g; s|›|</span>|g" \
   5.375 +			-e "s|@c|<span class='r-comment'>|g" \
   5.376 +			-e "s|@l|<span class='r-literal'>|g" \
   5.377 +			-e "s|@v|<span class='r-var'>|g" \
   5.378 +			-e "s|@f|<span class='r-func'>|g" \
   5.379 +			-e "s|@u|class='r-url' target='_blank'|g" \
   5.380 +			-e "s|@m|<span class='r-com'>|g" \
   5.381 +			-e "s|@s|<span class='r-scom'>|g" \
   5.382 +			-e "s|@p|<span class='r-path'>|g" \
   5.383 +			-e "s|@r|<span class='r-param'>|g" \
   5.384 +			-e "s|~|</span>|g"
   5.385 +}
   5.386 +
   5.387 +
   5.388 +#
   5.389 +# page begins
   5.390 +#
   5.391 +header "HTTP/1.1 200 OK" "Content-type: text/html"
   5.392  xhtml_header
   5.393  
   5.394  #
   5.395 +# language selector, if needed
   5.396 +#
   5.397 +if [ -z "$HTTP_ACCEPT_LANGUAGE" ]; then
   5.398 +	oldlang=$(GETPOST lang)
   5.399 +	if [ -z "$oldlang" ]; then
   5.400 +		oldlang="C"
   5.401 +		[ -z "$QUERY_STRING" ] && QUERY_STRING="lang=C" || QUERY_STRING="${QUERY_STRING}&lang=C"
   5.402 +	fi
   5.403 +	cat << EOT
   5.404 +<!-- Languages -->
   5.405 +<div id="lang">
   5.406 +EOT
   5.407 +	for i in en de fr pt ru zh; do
   5.408 +		cat << EOT
   5.409 +	<a href="$SCRIPT_NAME?$(echo "$QUERY_STRING" | sed s/"lang=$oldlang"/"lang=$i"/)">$(
   5.410 +		case $i in
   5.411 +			en) echo -n "English";;
   5.412 +			de) echo -n "Deutsch";;
   5.413 +			fr) echo -n "Français";;
   5.414 +			pt) echo -n "Português";;
   5.415 +			ru) echo -n "Русский";;
   5.416 +			zh) echo -n "中文";;
   5.417 +		esac)</a>
   5.418 +EOT
   5.419 +	done
   5.420 +	cat << EOT
   5.421 +</div>
   5.422 +
   5.423 +EOT
   5.424 +fi
   5.425 +
   5.426 +cat << EOT
   5.427 +<!-- Content -->
   5.428 +<div id="content">
   5.429 +EOT
   5.430 +
   5.431 +#
   5.432  # Handle GET requests
   5.433  #
   5.434  case " $(GET) " in
   5.435 @@ -416,6 +549,7 @@
   5.436  SEARCH=$SEARCH;
   5.437  SLITAZ_VERSION=$SLITAZ_VERSION;
   5.438  WOK=$WOK;
   5.439 +GET=$(GET);
   5.440  </pre>
   5.441  EOT
   5.442  #$(xhtml_footer)
   5.443 @@ -426,9 +560,14 @@
   5.444  
   5.445  # Display search form and result if requested.
   5.446  #xhtml_header
   5.447 -echo "<h2>$(gettext 'Search for packages')</h2>"
   5.448 +cat << EOT
   5.449 +<h2>$(gettext 'Search for packages')</h2>
   5.450 +<div id="ticker"><img src="style/images/loader.gif" alt="." /></div>
   5.451 +EOT
   5.452  search_form
   5.453  
   5.454 +
   5.455 +
   5.456  case "$OBJECT" in
   5.457  
   5.458  
   5.459 @@ -559,7 +698,7 @@
   5.460  		cat << _EOT_
   5.461  
   5.462  <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
   5.463 -<pre>
   5.464 +<table>
   5.465  _EOT_
   5.466  		last=""
   5.467  		unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
   5.468 @@ -569,16 +708,22 @@
   5.469  				last=${pkg%:}
   5.470  				(
   5.471  				. $WOK/$last/receipt
   5.472 +				[ -n "$last" ] && cat << EOT
   5.473 +</td></tr>
   5.474 +EOT
   5.475  				cat << _EOT_
   5.476  
   5.477 -<i>$(package_entry)</i>
   5.478 +$(package_entry 1)
   5.479 +<tr><td colspan="3" class="pre">
   5.480  _EOT_
   5.481  				)
   5.482  			fi
   5.483 -			echo "    $file"
   5.484 +			echo -n "$file" | sed s/"$SEARCH"/"<span class='match'>$SEARCH<\/span>"/g 
   5.485 +			echo "<br />"
   5.486  		done
   5.487  		cat << _EOT_
   5.488 -</pre>
   5.489 +</td></tr>
   5.490 +</table>
   5.491  _EOT_
   5.492  	fi
   5.493  	;;
   5.494 @@ -594,7 +739,7 @@
   5.495  _EOT_
   5.496  		last=""
   5.497  		unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
   5.498 -		| grep ^$SEARCH: |  sed 's/.*: /    /' | sort
   5.499 +		| grep ^$SEARCH: | sed 's/.*: /    /' | sort
   5.500  		cat << _EOT_
   5.501  </pre>
   5.502  <pre>
   5.503 @@ -615,16 +760,16 @@
   5.504  	if [ -f $WOK/$SEARCH/description.txt ]; then
   5.505  		cat << _EOT_
   5.506  
   5.507 -<h3>$(eval_gettext "Result for: \$SEARCH")</h3>
   5.508 -<pre>
   5.509 +<h3>$(eval_gettext "Description of package: \$SEARCH")</h3>
   5.510 +<table>
   5.511  $(htmlize < $WOK/$SEARCH/description.txt)
   5.512 -</pre>
   5.513 +</table>
   5.514  _EOT_
   5.515  	else
   5.516  		cat << _EOT_
   5.517  
   5.518  <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
   5.519 -<pre>
   5.520 +<table>
   5.521  _EOT_
   5.522  		last=""
   5.523  		grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
   5.524 @@ -633,7 +778,7 @@
   5.525  			package_entry
   5.526  		done
   5.527  		cat << _EOT_
   5.528 -</pre>
   5.529 +</table>
   5.530  _EOT_
   5.531  	fi
   5.532  	;;
   5.533 @@ -644,34 +789,35 @@
   5.534  	cat << _EOT_
   5.535  
   5.536  <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
   5.537 -<pre>
   5.538 +<table>
   5.539  _EOT_
   5.540  	last=""
   5.541 -	grep ^TAGS= $WOK/*/receipt |  grep -i "$SEARCH" | \
   5.542 +	grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
   5.543  	sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
   5.544  		. $WOK/$pkg/receipt
   5.545  		package_entry
   5.546  	done
   5.547  	cat << _EOT_
   5.548 -</pre>
   5.549 +</table>
   5.550  _EOT_
   5.551  	;;
   5.552  
   5.553  
   5.554 -### Package receipt
   5.555 -# TODO: add style highlighting
   5.556 +### Package receipt with syntax highlighter
   5.557  Receipt)
   5.558 -	package_exist $SEARCH && cat << _EOT_
   5.559 +	if package_exist "$SEARCH"; then
   5.560 +		cat << _EOT_
   5.561  
   5.562  <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
   5.563  <pre>
   5.564 -$(if [ -f  $WOK/$SEARCH/taz/*/receipt ]; then
   5.565 -	cat $WOK/$SEARCH/taz/*/receipt
   5.566 -  else
   5.567 -    cat $WOK/$SEARCH/receipt
   5.568 -  fi | htmlize)
   5.569 -</pre>
   5.570  _EOT_
   5.571 +		if [ -f "$WOK/$SEARCH/taz/*/receipt" ]; then
   5.572 +			syntax_highlighter "$WOK/$SEARCH/taz/*/receipt"
   5.573 +		else
   5.574 +			syntax_highlighter "$WOK/$SEARCH/receipt"
   5.575 +		fi
   5.576 +		echo '</pre>'
   5.577 +	fi
   5.578  	;;
   5.579  
   5.580  
   5.581 @@ -681,12 +827,12 @@
   5.582  		cat << _EOT_
   5.583  
   5.584  <h3>$(eval_gettext "Result for: \$SEARCH")</h3>
   5.585 -<pre>
   5.586 +<table>
   5.587  _EOT_
   5.588  		for pkg in `ls $WOK/ | grep "$SEARCH"`
   5.589  		do
   5.590  			. $WOK/$pkg/receipt
   5.591 -			DESC=" <a href=\"?object=Desc&query=$pkg&lang=$lang&version=$SLITAZ_VERSION&submit=go\">$(gettext description)</a>"
   5.592 +			DESC=" <a href=\"?object=Desc&query=$pkg&lang=$lang&version=$SLITAZ_VERSION$(ifdebug '&')&submit=go\">$(gettext description)</a>"
   5.593  			[ -f $WOK/$pkg/description.txt ] || DESC=""
   5.594  			cat << _EOT_
   5.595  $(package_entry)$DESC
   5.596 @@ -696,10 +842,10 @@
   5.597  		vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
   5.598  		for vpkg in $vpkgs ; do
   5.599  			cat << _EOT_
   5.600 -</pre>
   5.601 +</table>
   5.602  
   5.603  <h3>$(eval_gettext "Result for: \$SEARCH (package providing \$vpkg)")</h3>
   5.604 -<pre>
   5.605 +<table>
   5.606  _EOT_
   5.607  			for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
   5.608  				. $WOK/${pkg#*:}/receipt
   5.609 @@ -707,7 +853,7 @@
   5.610  			done
   5.611  		done
   5.612  		cat << _EOT_
   5.613 -</pre>
   5.614 +</table>
   5.615  _EOT_
   5.616  	fi
   5.617  	;;
     6.1 Binary file pkgs/style/images/loader.gif has changed