wok diff sane-backends/stuff/tazpanel/sane.cgi @ rev 18245

Add tazpanel-extra
author Pascal Bellard <pascal.bellard@slitaz.org>
date Fri Jul 31 23:33:17 2015 +0200 (2015-07-31)
parents 4ea96657834e
children a705d8e80b1c
line diff
     1.1 --- a/sane-backends/stuff/tazpanel/sane.cgi	Sun Jul 26 17:30:32 2015 +0200
     1.2 +++ b/sane-backends/stuff/tazpanel/sane.cgi	Fri Jul 31 23:33:17 2015 +0200
     1.3 @@ -37,11 +37,12 @@
     1.4      
     1.5  getgeometry() {
     1.6  	CMD=""
     1.7 -	for i in l t x y ; do
     1.8 +	ARGS=""
     1.9 +	for i in x y l t ; do
    1.10  		j=$(inrange $(xPOST geometry_$i) $(xPOST ${i}_min) $(xPOST ${i}_max))
    1.11  		eval "geometry_$i=$j"
    1.12  		CMD="$CMD -$i $j"
    1.13 -# convert -crop XxY+L+T -resize XxY
    1.14 +		ARGS="$ARGS $j"
    1.15  	done
    1.16  	for i in mode source contrast brightness ; do
    1.17  		[ "$(xPOST $i)" ] && CMD="$CMD --$i '$(xPOST $i)'"
    1.18 @@ -55,10 +56,35 @@
    1.19  			resolution=$(($resolution * 2))
    1.20  		done
    1.21  	fi
    1.22 +	case "$(xPOST mode)" in
    1.23 +	*lack*|*ineart*) mode="-monochrome" ;;
    1.24 +	*ray*) mode="-colorspace gray" ;;
    1.25 +	*) mode="" ;;
    1.26 +	esac
    1.27  	[ -d tmp ] || ln -s /tmp tmp
    1.28  	case "$device" in
    1.29 -	fake*)	echo "cat /usr/share/images/slitaz-background.jpg" ;;
    1.30 -	*)	echo "scanimage -d '$(echo $device | sed 's/,.*//')' --resolution '$(inrange $resolution $(xPOST res_min) $(xPOST res_max))dpi'$CMD"
    1.31 +	fake*)	f=/usr/share/images/slitaz-banner.png
    1.32 +		c="$(echo $ARGS $(identify $f | sed \
    1.33 +		    's/.* \([0-9]*\)x.*/\1/') $(GET width) $(POST x_max) | awk '
    1.34 +function a(x) { return int(($x * $5)/ $7); }
    1.35 +{ printf "%dx%d+%d+%d -resize %dx%d",a(1),a(2),a(3),a(4),$6,int(($2*$6)/$1)}
    1.36 +')"
    1.37 +		cat <<EOT
    1.38 +if convert -crop $c $mode $f /tmp/sane$$.png 2> /dev/null ; then
    1.39 +	cat /tmp/sane$$.png
    1.40 +	rm -f /tmp/sane$$.png
    1.41 +else
    1.42 +	cat $f
    1.43 +fi
    1.44 +EOT
    1.45 +		;;
    1.46 +	*)	echo -n "scanimage -d '$(echo $device | sed 's/,.*//')' --resolution '$(inrange $resolution $(xPOST res_min) $(xPOST res_max))dpi'$CMD"
    1.47 +		if [ -z "$1" -a "$(which convert)" ]; then
    1.48 +			echo -n "> /tmp/sane$$.pnm ; convert -resize "
    1.49 +			echo $ARGS $(GET width) | awk '{ printf "%dx%d",$5,int(($2*$5)/$1)}'
    1.50 +			echo -n " /tmp/sane$$.pnm /tmp/sane$$.png ;"
    1.51 +			echo -n "cat /tmp/sane$$.png ; rm -f /tmp/sane$$.pn?"
    1.52 +		fi
    1.53  	esac
    1.54  }
    1.55  
    1.56 @@ -151,20 +177,31 @@
    1.57  xhtml_header
    1.58  [ -n "$error" ] && msg warn "$error"
    1.59  [ -n "$info" ] && msg tip "$info"
    1.60 -[ "$(which convert 2> /dev/null)" ] ||
    1.61 -msg tip "$(_ "You should install %s to preview images." \
    1.62 -	     "<a href=\"/user/pkgs.cgi?info=imagemagick\">imagemagick</a>")"
    1.63  if [ -z "$device" ]; then
    1.64 -	[ -s sane-fake.log ] && all="$(sed 's/|/\n/g' sane-fake.log)" ||
    1.65 -	all="$(scanimage -f '%d,%v %m|' | sed 's/|/\n/g')"
    1.66 +	all="$(scanimage -f '%d,%v %m|'|cat - sane-fake.log|sed 's/|/\n/g')"
    1.67  	case "$(echo "$all" | wc -l)" in
    1.68  	1)	if [ -z "$all" ]; then
    1.69 -			msg warn 'No scanner found'
    1.70 +			msg warn "$(_ "No scanner found")"
    1.71 +			msg tip "$(_ "You can test this GUI with ")\
    1.72 +<a href=\"/user/pkgs.cgi?info=fake-sane\">fake-sane</a>"
    1.73  			xhtml_footer
    1.74  			exit 0
    1.75  		fi
    1.76  		device="${all%|}" ;;
    1.77 -	*)	cat <<EOT
    1.78 +	*)
    1.79 +		suggested=""
    1.80 +		while read exe pkg msg; do
    1.81 +			[ "$(which $exe 2> /dev/null)" ] && continue
    1.82 +			suggested="$suggested
    1.83 +<li><a href=\"/user/pkgs.cgi?info=$pkg\">$pkg</a>&nbsp;$msg</li>"
    1.84 +		done <<EOT
    1.85 +convert		imagemagick	$(_ "to preview images and support more image formats")
    1.86 +gocr		gocr		$(_ "a basic optical character recognition")
    1.87 +tesseract	tesseract-ocr	$(_ "a better optical character recognition")
    1.88 +EOT
    1.89 +		[ "$suggested" ] &&
    1.90 +		msg tip "$(_ "You may need to install:") <ol>$suggested</ol>"
    1.91 +		cat <<EOT
    1.92  <section>
    1.93  	<header>
    1.94  		<form name="scanner" method="post">
    1.95 @@ -190,7 +227,7 @@
    1.96  <script language="JavaScript" type="text/javascript">
    1.97  <!--
    1.98  function new_width() {
    1.99 -	document.parameters.action = "?width="+document.width
   1.100 +	document.parameters.action = "?width="+(document.width-30)
   1.101  }
   1.102  
   1.103  window.onresize = new_width
   1.104 @@ -202,7 +239,7 @@
   1.105  $(echo $device | sed 's/.*,//')
   1.106  <div class="float-right">
   1.107  	<button name="scan" data-icon="start">$(_ "Scan")</button>
   1.108 -	<button name="reset" data-icon="stop">$(_ "Reset")</button>
   1.109 +	<button name="reset" data-icon="refresh">$(_ "Reset")</button>
   1.110  	<button name="preview" data-icon="view">$(_ "Preview")</button>
   1.111  </div>
   1.112  </header>
   1.113 @@ -256,7 +293,8 @@
   1.114  }
   1.115  ')"
   1.116  fi
   1.117 -output="$(echo "$params" | while read name def min max ; do
   1.118 +output="$(n=$(echo "$params" | wc -l); echo "$params" | \
   1.119 +while read name def min max ; do
   1.120  	name="${name##*-}"
   1.121  	def="${def//=/ }"
   1.122  	if [ "$min" == "enum" ]; then
   1.123 @@ -283,7 +321,7 @@
   1.124  		[ "$(xPOST $name)" ] && def=$(xPOST $name)
   1.125  		[ $def -lt $min ] && def=$min
   1.126  		[ $def -gt $max ] && def=$max
   1.127 -		f="$(_ "$name")<input name=\"$name\" value=\"$def\""
   1.128 +		f="$(_ "$name") <input name=\"$name\" value=\"$def\""
   1.129  		u=""
   1.130  		case "$name" in
   1.131  		x|y|l|t) cat <<EOT
   1.132 @@ -304,8 +342,6 @@
   1.133  x	Width		width	$max
   1.134  y	Height		height	$max
   1.135  EOT
   1.136 -			[ "$newline" ] || echo "</tr><tr>"
   1.137 -			newline=$name
   1.138  		esac
   1.139  		[ "$name" == "resolution" ] && f="$f onchange=showGeometry()"
   1.140  		echo "<td>$f type=\"text\" title=\"$min .. $max\" size=4 maxlength=4>$u"
   1.141 @@ -320,6 +356,10 @@
   1.142  EOT
   1.143  	esac
   1.144  	echo "</td>"
   1.145 +	n=$(($n - 2))
   1.146 +	case "$n" in
   1.147 +	1|2) echo "</tr><tr>"
   1.148 +	esac
   1.149  done)"
   1.150  echo "$output" | sed '/^:/d'
   1.151