# HG changeset patch # User Aleksej Bobylev # Date 1334932966 -10800 # Node ID 0a9608f5d6d90757f358e7679bbd01c67b9aa2e6 # Parent 58d1f48202525a943163d37f06593de92d43f9ce pkgs: New features included, see README. Site yet not completed, but works fine... diff -r 58d1f4820252 -r 0a9608f5d6d9 pkgs/README --- a/pkgs/README Fri Apr 20 16:08:49 2012 +0200 +++ b/pkgs/README Fri Apr 20 17:42:46 2012 +0300 @@ -15,21 +15,20 @@ * all css now in _standard_ slitaz.css (from website) and pkgs.css * nice URLs to share via copy them from address bar * improve debug mode + * added progress ticker while page is not complete + * added style highlighting for the receipts TODO ---- * Add package page with all info and an install link (tazpkg:// or tazpkg: works in Midori - * implement POST method of the form submitting - * implement more nice redirect, than http refresh * add hint 'You are can search for depends loop, if textfield is empty'... - * add progress ticker while page is not complete * caching the footer summary - * add style highlighting for the receipts * clear the file names, so our goal is URL like: http://pkgs.slitaz.org/?package=geany (form action="$SCRIPT_NAME" -> action="/") * standard 4.0 have /usr/lib/slitaz/httphelper (without '.sh') + * display dependency trees as an unordered lists ================================================================================ diff -r 58d1f4820252 -r 0a9608f5d6d9 pkgs/lib/footer.sh --- a/pkgs/lib/footer.sh Fri Apr 20 16:08:49 2012 +0200 +++ b/pkgs/lib/footer.sh Fri Apr 20 17:42:46 2012 +0300 @@ -1,9 +1,9 @@ cat << _EOT_ -
-$(eval_ngettext "\$PKGS package" "\$PKGS packages" $PKGS) -$(eval_ngettext "and \$FILES file in \$SLITAZ_VERSION database" "and \$FILES files in \$SLITAZ_VERSION database" $FILES) -
+
+$(eval_ngettext "\$PKGS package" "\$PKGS packages" $PKGS) +$(eval_ngettext "and \$FILES file in \$SLITAZ_VERSION database" "and \$FILES files in \$SLITAZ_VERSION database" $FILES) +
@@ -14,6 +14,7 @@ diff -r 58d1f4820252 -r 0a9608f5d6d9 pkgs/lib/header.sh --- a/pkgs/lib/header.sh Fri Apr 20 16:08:49 2012 +0200 +++ b/pkgs/lib/header.sh Fri Apr 20 17:42:46 2012 +0300 @@ -29,7 +29,4 @@

$(gettext "SliTaz Packages")

- -
- _EOF_ diff -r 58d1f4820252 -r 0a9608f5d6d9 pkgs/pkgs.css --- a/pkgs/pkgs.css Fri Apr 20 16:08:49 2012 +0200 +++ b/pkgs/pkgs.css Fri Apr 20 17:42:46 2012 +0300 @@ -1,50 +1,22 @@ - -#s_form { - margin: auto; - text-align: center; - padding: 20px; -} /* Be compatible with old FF and Webkit version. */ -input[type="submit"] { +/*input[type="submit"] { -webkit-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1); -moz-box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1); box-shadow: 0px 1px 3px rgba(0, 0, 0, 0.1); -} +}*/ -#header { - border-bottom: 8px solid #D66018; -} +#header { border-bottom: 8px solid #D66018; } +#header h1 { padding: 3px 0 0 42px; } +#network { padding: 12px 5px 0; } +#footer { background-color: #FFF; } -#header h1 { - padding: 3px 0 0 42px; -} - -#network { - padding: 12px 5px 0; -} - -table, input, textarea, select { - -moz-border-radius: 4px; - -webkit-border-radius: 4px; - border-radius: 4px; -} - -input[type=text] { - width: 40%; -} - -#footer { - background-color: #FFF; -} - -select:focus, select:hover, input:focus, input:hover { +/* COMMON STYLES */ +select:focus, select:hover, input:focus, input[type]:hover { color: #000; - outline: 0 none; -webkit-box-shadow: 0 0 4px rgba(0,0,0,0.3); -moz-box-shadow: 0 0 4px rgba(0,0,0,0.3); } - input, select { -webkit-transition: all 0.3s ease-in-out; -moz-transition: all 0.3s ease-in-out; @@ -52,46 +24,124 @@ -ms-transition: all 0.3s ease-in-out; transition: all 0.3s ease-in-out; } +select, input[type="text"], input[type="submit"] { + font-size: 14px; + border: 1px solid #CCC; + -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; + color: #444; + outline: 0 none; +} -input[type="submit"], input[type="text"], textarea { - color: #444; +/* TABLE */ +table { + width: 100%; + font-size: 12px; border: 1px solid #CCC; + -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; + border-spacing: 0; + padding: 2px; +} +tr { + margin: 0; padding: 4px; - margin: 4px 0px; +} +td { + margin: 0; + padding: 6px; + vertical-align: top; +} +tr.even { + background-color: #F0F0F0; +} +td.first { + width: 1%; + white-space: nowrap; +} +td.pre { + padding-left: 2em; + white-space: nowrap; +} + + +/* --- */ + +input[type="submit"] { + padding: 4px; + margin: 0; font-size: 14px; - line-height: 1.2em; background-image: -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5); background-image: -moz-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5); - -webkit-appearance: none; +/* -webkit-appearance: none; -webkit-padding-end: 6px; - -webkit-padding-start: 6px; + -webkit-padding-start: 6px;*/ } -input[type="submit"]:hover { - color: #000; +div.form { + display: table; + table-layout: auto; + width: 100%; + padding: 0; + margin: 0 0 20px 0; /* t r b l */ } -input[type="text"], textarea { background: #fefefe; border: 1px solid #ccc; } -/*input[type="file"] { border: 2px solid #ddd; }*/ -/*input[type="checkbox"] { background: #fefefe; }*/ +#s_form { + display: table-row; + padding: 0; + margin: 0; + text-align: center; + border: 1pt solid yellow; +} -input[type=submit], select { cursor: pointer; } +.small { + white-space: nowrap; + display: table-cell; + width: 10%; +} select { - background-image: url(style/images/down.png), - -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5); + padding: 4px; + margin: 0 4px; + background-image: -webkit-linear-gradient(#FAFAFA, #F4F4F4 40%, #E5E5E5); background-position: center right; background-repeat: no-repeat; - - color: #444444; - border: 1px solid #cccccc; - padding: 4px 32px 4px 4px; - margin: 4px 0px; - font-size: 14px; - line-height: 1.2em; -webkit-appearance: none; + cursor: pointer; } -poption { - padding: 4px 32px 4px 4px; +span.stretch { + display: table-cell; + width: 100%; + padding: 0 4px; + margin: 0; } + +input[type="text"] { + padding: 4px 0; + margin: 0; + border: 1px solid #CCC; + background-color: #FEFEFE; +} + +div#ticker img { + float: right; +} + +.summary { + margin-top: 12px; + text-align: center; + font-style: italic; +} +.match { + font-weight: bold; + color: #F33; +} + +/* SYNTAX HIGHLIGHTER */ +.r-comment { color: #888; } +.r-literal { color: #f35a00; } +.r-var { font-weight: bold; color: #070; } +.r-func { color: #4895DD; } +.r-url { text-decoration: none; } +.r-com, .r-scom { color: #4895DD; font-weight: bold; /*background-color: #cde;*/ } +.r-path { text-decoration: underline; color: brown; } +.r-param { font-weight: bold; color: #444; } diff -r 58d1f4820252 -r 0a9608f5d6d9 pkgs/search.sh --- a/pkgs/search.sh Fri Apr 20 16:08:49 2012 +0200 +++ b/pkgs/search.sh Fri Apr 20 17:42:46 2012 +0300 @@ -6,7 +6,7 @@ # Parse query string . /usr/lib/slitaz/httphelper.sh - +echo -n "0" > $HOME/ifEven # User preferred language # parameter $1 have priority; without parameter $1 - browser language only @@ -40,57 +40,59 @@ echo ${ll_CC%_*} } -# Nice URL replacer - to copy url from address bar -# TODO: deal with POST method of form submitting -nice_url() { - # if user submitted a form - if [ ! -z $(GET submit) ]; then - OBJECT="$(GET object)" - SEARCH="$(GET query)" - case $OBJECT in - Package) NICE="package=$SEARCH";; - Desc) NICE="desc=$SEARCH";; - Tags) NICE="tags=$SEARCH";; - Receipt) NICE="receipt=$SEARCH";; - Depends) NICE="depends=$SEARCH";; - BuildDepends) NICE="builddepends=$SEARCH";; - File) NICE="file=$SEARCH";; - File_list) NICE="filelist=$SEARCH";; - FileOverlap) NICE="fileoverlap=$SEARCH";; - esac - # version, if needed - version="$(GET version)" - if [ ! -z "$version" -a "$version" != "cooking" ]; then - NICE="${NICE}&version=${version:0:1}" - fi - # lang, if needed - query_lang="$(GET lang)" - pref_lang="$(user_lang)" - browser_lang="$(ll_lang $pref_lang)" - if [ ! -z "$query_lang" -a "$query_lang" != "$browser_lang" ]; then - NICE="${NICE}&lang=$query_lang" - fi - # verbose, if needed - verboseq="$(GET verbose)" - if [ ! -z "$verboseq" -a "$verboseq" != "0" ]; then - NICE="${NICE}&verbose=1" - fi - # redirect - # TODO: implement HTTP 301 Redirect - cat << EOT -Content-type: text/html - - - -Redirect -EOT -# echo "Location: $SCRIPT_NAME?$NICE" -# echo - exit 0 - fi +# Part of query to indicate current debug mode +ifdebug() { + ifdebug="$(GET debug)" + [ ! -z "$ifdebug" ] && ifdebug="$1$ifdebug" + echo "$ifdebug" } -nice_url +# GET or POST variable +GETPOST() { + echo "$(POST $1)$(GET $1)" +} + +# Nice URL replacer - to copy url from address bar +if [ "$REQUEST_METHOD" == "POST" -o ! -z $(GET submit) ]; then + OBJECT=$(GETPOST object) + SEARCH=$(GETPOST query) + case "$OBJECT" in + Package) NICE="package=$SEARCH";; + Desc) NICE="desc=$SEARCH";; + Tags) NICE="tags=$SEARCH";; + Receipt) NICE="receipt=$SEARCH";; + Depends) NICE="depends=$SEARCH";; + BuildDepends) NICE="builddepends=$SEARCH";; + File) NICE="file=$SEARCH";; + File_list) NICE="filelist=$SEARCH";; + FileOverlap) NICE="fileoverlap=$SEARCH";; + esac + # version, if needed + version="$(GETPOST version)" + if [ ! -z "$version" -a "$version" != "cooking" ]; then + NICE="${NICE}&version=${version:0:1}" + fi + # lang, if needed + query_lang="$(GETPOST lang)" + pref_lang="$(user_lang)" + browser_lang="$(ll_lang $pref_lang)" + if [ ! -z "$query_lang" -a "$query_lang" != "$browser_lang" ]; then + NICE="${NICE}&lang=$query_lang" + fi + # verbose, if needed + verboseq="$(GETPOST verbose)" + if [ ! -z "$verboseq" -a "$verboseq" != "0" ]; then + NICE="${NICE}&verbose=1" + fi + # debug, if needed + debugq="$(GET debug)" + if [ ! -z "$debugq" -a "$debugq" == "debug" ]; then + NICE="${NICE}&debug" + fi + # redirect + header "HTTP/1.1 301 Moved Permanently" "Location: $SCRIPT_NAME?$NICE" + exit 0 +fi @@ -131,11 +133,10 @@ esac done [ -z "$SLITAZ_VERSION" ] && SLITAZ_VERSION=cooking -#[ -n "$SEARCH" ] && REQUEST_METHOD="POST" -#[ "$SEARCH" == "." ] && SEARCH= - +# # Content negotiation for Gettext +# LANG=$(user_lang $(GET lang)) lang="$(ll_lang $LANG)" export LANG LC_ALL=$LANG @@ -167,45 +168,48 @@ WOK=/home/slitaz/$SLITAZ_VERSION/wok PACKAGES_REPOSITORY=/home/slitaz/$SLITAZ_VERSION/packages - -# TODO: header function from httphelper -echo "Content-type: text/html" -echo - # Search form -# TODO: implement POST method -# ... method="post" enctype="multipart/form-data" ... # TODO: add hint 'You are can search for depends loop, if textfield is empty'... # add progress ticker while page is not complete search_form() { cat << _EOT_ -
+
+ - - - - + + + + + + + + + + + + +
_EOT_ } @@ -233,23 +237,59 @@ fi } -package_entry() -{ -if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then - cat << _EOT_ -$PACKAGE $(installed_size $PACKAGE): $SHORT_DESC +oddeven() { + ifEven=$(cat $HOME/ifEven) + [ "$1" == "1" ] && ifEven="0" + case "$ifEven" in + "0") ifEven="1"; echo -n " class=\"even\"";; + "1") ifEven="0";; + esac + echo -n "$ifEven" > $HOME/ifEven +} + +package_entry() { + cat << EOT + +EOT + if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then + cat << _EOT_ + $PACKAGE + $(installed_size $PACKAGE) + $SHORT_DESC _EOT_ -else - PACKAGE_HREF="$PACKAGE" - PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg" - nslookup mirror.slitaz.org | grep -q 127.0.0.1 && - PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)" - busybox wget -s $PACKAGE_URL 2> /dev/null && - PACKAGE_HREF="$PACKAGE" - cat << _EOT_ -$PACKAGE_HREF $(installed_size $PACKAGE): $SHORT_DESC + else + PACKAGE_HREF="$PACKAGE" + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg" + nslookup mirror.slitaz.org | grep -q 127.0.0.1 && + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)" + busybox wget -s $PACKAGE_URL 2> /dev/null && + PACKAGE_HREF="$PACKAGE" + cat << _EOT_ + $PACKAGE_HREF + $(installed_size $PACKAGE) + $SHORT_DESC _EOT_ -fi + fi + cat << EOT + +EOT +} +package_entry_inline() { + if [ -s "$(dirname $0)/$SLITAZ_VERSION/$CATEGORY.html" ]; then + cat << _EOT_ +$PACKAGE $(installed_size $PACKAGE) : $SHORT_DESC +_EOT_ + else + PACKAGE_HREF="$PACKAGE" + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$PACKAGE-$VERSION$EXTRA_VERSION.tazpkg" + nslookup mirror.slitaz.org | grep -q 127.0.0.1 && + PACKAGE_URL="http://mirror.slitaz.org/packages/$SLITAZ_VERSION/$(cd /var/www/slitaz/mirror/packages/$SLITAZ_VERSION ; ls $PACKAGE-$VERSION*.tazpkg)" + busybox wget -s $PACKAGE_URL 2> /dev/null && + PACKAGE_HREF="$PACKAGE" + cat << _EOT_ +$PACKAGE_HREF $(installed_size $PACKAGE) : $SHORT_DESC +_EOT_ + fi } # Show loop in depends/build_depends chains @@ -304,7 +344,7 @@ echo -n "$2" ( . $WOK/$i/receipt - package_entry + package_entry_inline ) fi [ -f $WOK/$i/receipt ] || continue @@ -364,7 +404,7 @@ ' | while read pkg; do . $WOK/${pkg##*/}/receipt cat << _EOT_ -$(echo ${pkg%/*} | sed 's|/| |g') $(package_entry) +$(echo ${pkg%/*} | sed 's|/| |g') $(package_entry_inline) _EOT_ done } @@ -381,29 +421,122 @@ } # Display < > & -htmlize() -{ +htmlize() { sed -e 's/&/\&/g' -e 's//\>/g' } -display_packages_and_files() -{ +display_packages_and_files() { last="" while read pkg file; do pkg=${pkg%:} if [ "$pkg" != "$last" ]; then . $WOK/$pkg/receipt - package_entry + package_entry_inline last=$pkg fi echo " $file" done } +# Syntax highlighting for receipt file - stolen from tazpanel: +# '/var/www/tazpanel/lib/libtazpanel' and developed +syntax_highlighter() { + cat "$1" | sed -e "s|\&|\&|g; s|<|\<|g; s|>|\>|g; s| | |g" \ + -e "s|@|\@|g; s|~|\~|g" \ + -e "#literals" \ + -e "s|'\([^']*\)'|@l\0~|g" \ + -e 's|"\([^"]*\)"|@l\0~|g' \ + -e 's|"\([^"]*\)\\|@l\0~|g' \ + -e 's|\([^"]*\)\"$|@l\0~|g' \ + -e "#paths" \ + -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+\)\([ )]\)|\1@p\2~\3|g' \ + -e 's|\([ =]\)\([a-zA-Z0-9/-]*/[\$a-zA-Z0-9/\.-]\+$\)|\1@p\2~|g' \ + -e 's|\(\$[a-zA-Z0-9_\.-]\+\)\(/[\$a-zA-Z0-9_/\.\*-]\+\)\([ )]*\)|@p\1\2~\3|g' \ + -e "#functions" \ + -e 's|^\([^()]*\)\(()\)|@f\0~|g' \ + -e "#single line comments" \ + -e 's|^\([ ]*\)#\([^#]*$\)|@c\0~|g' \ + -e "#parameters" \ + -e 's|\( \)\(-[a-z0-9]\+\)\( *\)|\1@r\2~\3|g' \ + -e 's|\( \)\(--[a-z0-9\-]\+\)\([= ]\)|\1@r\2~\3|g' \ + -e "#variables" \ + -e "s|^\([^=@#' \-]*\)\(=\)|@v\1~\2|g" \ + -e 's|\([ ^@-]*\)\([a-zA-Z0-9]\+\)\(=\)|\1@v\2~\3|g' \ + -e "s#\(\$[a-zA-Z0-9_]\+\)#@v\0~#g" \ + -e "#urls" \ + -e s"#\"\(http:[^\"\$ ]*\)\"#\"\1\"#"g \ + -e s"#\"\(ftp:[^\"\$ ]*\)\"#\"\1\"#"g \ + -e "#commands" \ + -e s"#^\( \+\)\([^'= @\-]\+\)#\1@m\2~#"g \ + -e "#simple commands" \ + -e s"#\([{}\]$\)#@s\0~#"g \ + -e s"#\( \)\(\&\&\)\( *\)#\1@s\2~\3#"g \ + -e s"#\(|\)#@s\0~#"g \ + -e s"#\(\<\)#@s\0~#"g \ + -e s"#\(\>\&\)#@s\0~#"g \ + -e s"#\(\>\)#@s\0~#"g \ + -e s"#\(\[\)#@s\0~#"g \ + -e s"#\(\]\)#@s\0~#"g \ +\ + -e "s|´|'|g; s|›||g" \ + -e "s|@c||g" \ + -e "s|@l||g" \ + -e "s|@v||g" \ + -e "s|@f||g" \ + -e "s|@u|class='r-url' target='_blank'|g" \ + -e "s|@m||g" \ + -e "s|@s||g" \ + -e "s|@p||g" \ + -e "s|@r||g" \ + -e "s|~||g" +} + + +# +# page begins +# +header "HTTP/1.1 200 OK" "Content-type: text/html" xhtml_header # +# language selector, if needed +# +if [ -z "$HTTP_ACCEPT_LANGUAGE" ]; then + oldlang=$(GETPOST lang) + if [ -z "$oldlang" ]; then + oldlang="C" + [ -z "$QUERY_STRING" ] && QUERY_STRING="lang=C" || QUERY_STRING="${QUERY_STRING}&lang=C" + fi + cat << EOT + + + +EOT +fi + +cat << EOT + +
+EOT + +# # Handle GET requests # case " $(GET) " in @@ -416,6 +549,7 @@ SEARCH=$SEARCH; SLITAZ_VERSION=$SLITAZ_VERSION; WOK=$WOK; +GET=$(GET); EOT #$(xhtml_footer) @@ -426,9 +560,14 @@ # Display search form and result if requested. #xhtml_header -echo "

$(gettext 'Search for packages')

" +cat << EOT +

$(gettext 'Search for packages')

+
.
+EOT search_form + + case "$OBJECT" in @@ -559,7 +698,7 @@ cat << _EOT_

$(eval_gettext "Result for: \$SEARCH")

-
+
 _EOT_
 		last=""
 		unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \
@@ -569,16 +708,22 @@
 				last=${pkg%:}
 				(
 				. $WOK/$last/receipt
+				[ -n "$last" ] && cat << EOT
+
+EOT
 				cat << _EOT_
 
-$(package_entry)
+$(package_entry 1)
+
+
_EOT_ ) fi - echo " $file" + echo -n "$file" | sed s/"$SEARCH"/"$SEARCH<\/span>"/g + echo "
" done cat << _EOT_ - +
_EOT_ fi ;; @@ -594,7 +739,7 @@ _EOT_ last="" unlzma -c $PACKAGES_REPOSITORY/files.list.lzma \ - | grep ^$SEARCH: | sed 's/.*: / /' | sort + | grep ^$SEARCH: | sed 's/.*: / /' | sort cat << _EOT_
@@ -615,16 +760,16 @@
 	if [ -f $WOK/$SEARCH/description.txt ]; then
 		cat << _EOT_
 
-

$(eval_gettext "Result for: \$SEARCH")

-
+

$(eval_gettext "Description of package: \$SEARCH")

+ $(htmlize < $WOK/$SEARCH/description.txt) - +
_EOT_ else cat << _EOT_

$(eval_gettext "Result for: \$SEARCH")

-
+
 _EOT_
 		last=""
 		grep -i "$SEARCH" $PACKAGES_REPOSITORY/packages.desc | \
@@ -633,7 +778,7 @@
 			package_entry
 		done
 		cat << _EOT_
-
+
_EOT_ fi ;; @@ -644,34 +789,35 @@ cat << _EOT_

$(eval_gettext "Result for: \$SEARCH")

-
+
 _EOT_
 	last=""
-	grep ^TAGS= $WOK/*/receipt |  grep -i "$SEARCH" | \
+	grep ^TAGS= $WOK/*/receipt | grep -i "$SEARCH" | \
 	sed "s|$WOK/\(.*\)/receipt:.*|\1|" | sort | while read pkg ; do
 		. $WOK/$pkg/receipt
 		package_entry
 	done
 	cat << _EOT_
-
+
_EOT_ ;; -### Package receipt -# TODO: add style highlighting +### Package receipt with syntax highlighter Receipt) - package_exist $SEARCH && cat << _EOT_ + if package_exist "$SEARCH"; then + cat << _EOT_

$(eval_gettext "Result for: \$SEARCH")

-$(if [ -f  $WOK/$SEARCH/taz/*/receipt ]; then
-	cat $WOK/$SEARCH/taz/*/receipt
-  else
-    cat $WOK/$SEARCH/receipt
-  fi | htmlize)
-
_EOT_ + if [ -f "$WOK/$SEARCH/taz/*/receipt" ]; then + syntax_highlighter "$WOK/$SEARCH/taz/*/receipt" + else + syntax_highlighter "$WOK/$SEARCH/receipt" + fi + echo '
' + fi ;; @@ -681,12 +827,12 @@ cat << _EOT_

$(eval_gettext "Result for: \$SEARCH")

-
+
 _EOT_
 		for pkg in `ls $WOK/ | grep "$SEARCH"`
 		do
 			. $WOK/$pkg/receipt
-			DESC=" $(gettext description)"
+			DESC=" $(gettext description)"
 			[ -f $WOK/$pkg/description.txt ] || DESC=""
 			cat << _EOT_
 $(package_entry)$DESC
@@ -696,10 +842,10 @@
 		vpkgs="$(cat $equiv | cut -d= -f1 | grep $SEARCH)"
 		for vpkg in $vpkgs ; do
 			cat << _EOT_
-
+

$(eval_gettext "Result for: \$SEARCH (package providing \$vpkg)")

-
+
 _EOT_
 			for pkg in $(grep $vpkg= $equiv | sed "s/$vpkg=//"); do
 				. $WOK/${pkg#*:}/receipt
@@ -707,7 +853,7 @@
 			done
 		done
 		cat << _EOT_
-
+
_EOT_ fi ;; diff -r 58d1f4820252 -r 0a9608f5d6d9 pkgs/style/images/loader.gif Binary file pkgs/style/images/loader.gif has changed