tazpanel view settings.cgi @ rev 474

settings.cgi: add tweaks to quick change terminal prompt style, and LXPanel menu button style.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Fri May 01 19:30:01 2015 +0300 (2015-05-01)
parents 098e260f32cd
children 58e332bcef0b
line source
1 #!/bin/sh
2 #
3 # System settings CGI interface: user, locale, keyboard, date. Since we
4 # don't have multiple pages here there is only one case used to get command
5 # values and the full content is followed directly.
6 #
7 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
8 #
11 # Common functions from libtazpanel
13 . lib/libtazpanel
14 get_config
16 TITLE=$(_ 'TazPanel - Settings')
19 # Get system database. LDAP compatible.
21 getdb() {
22 getent $1 2>/dev/null || cat /etc/$1
23 }
25 listdb() {
26 for item in $(getdb $1 | cut -d ":" -f 1); do
27 echo "<option>$item</option>\n"
28 done
29 }
35 #
36 # Commands executed before page loading.
37 #
39 case " $(GET) " in
40 *\ do\ *)
41 users=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="user") print $2}')
42 groups=$(echo $QUERY_STRING | awk 'BEGIN{RS="&";FS="="}{if($1=="group")print $2}')
44 case $(GET do) in
46 # Groups page
47 delgroups)
48 for i in $groups; do delgroup $i; done ;;
49 addgroup)
50 addgroup $groups ;;
51 addmember)
52 addgroup $(GET member) $groups ;;
53 delmember)
54 delgroup $(GET member) $groups ;;
56 # Users page
57 delusers)
58 for i in $users; do deluser $i; done ;;
59 lockusers)
60 for i in $users; do passwd -l $i | log; done ;;
61 unlockusers)
62 for i in $users; do passwd -u $i | log; done ;;
63 chpasswd)
64 echo "$users:$(GET password)" | chpasswd -m | log ;;
65 adduser)
66 if [ -n "$users" ]; then
67 name=$(GET name); name=${name:-SliTaz User}
68 adduser -D -s /bin/sh -g "$name" -G users -h /home/$users $users
69 echo "$user:$(GET passwd)" | chpasswd -m | log
70 for i in audio cdrom floppy video tty; do addgroup $users $i; done
71 fi ;;
73 # System time
74 settz)
75 GET tz > /etc/TZ;;
76 date) # normalize to two digits
77 date $(printf '%02d%02d%02d%02d%d.%02d' "$(GET month)" "$(GET day)" "$(GET hour)" "$(GET min)" "$(GET year)" "$(GET sec)") >/dev/null;;
78 rdate)
79 rdate -s tick.greyware.com ;;
80 hwclock)
81 hwclock -w -u ;;
83 esac
84 ;;
87 *\ gen_locale\ *)
88 new_locale=$(GET gen_locale) ;;
89 *\ gen_keymap\ *)
90 new_keymap=$(GET gen_keymap) ;;
91 *\ apply_xorg_kbd\ *)
92 sed -i "s/XkbLayout.*/XkbLayout \" \"$(GET apply_xorg_kbd)\"/" \
93 /etc/X11/xorg.conf.d/40-Keyboard.conf ;;
94 *\ style*)
95 sed -i s/'^STYLE.*'/"STYLE=\"$(GET style)\""/ $CONFIG
96 . $CONFIG ;;
99 *\ tweak\ *)
100 HOME="$(awk -F: -vu=$REMOTE_USER '$1==u{print $6}' /etc/passwd)"
101 [ -z "$HOME" ] && exit 0
103 case $REMOTE_USER in
104 root) color=31; ind='#';;
105 *) color=32; ind='$';;
106 esac
108 case $(GET tweak) in
109 monochrome)
110 # PS1='\u@\h:\w\$ '
111 sed -i "s|^PS1=.*|PS1='\\\\u@\\\\h:\\\\w\\\\$ind '|" $HOME/.profile;;
112 colored)
113 # PS1='\[\e[0;32m\]\u@\h\[\e[0m\]:\[\e[0;33m\]\w\[\e[0m\]\$ '
114 sed -i "s|^PS1=.*|PS1='\\\\\\[\\\\e\[0;${color}m\\\\\\]\\\\u@\\\\h\\\\\\[\\\\e\\[0m\\\\\\]:\\\\\\[\\\\e\\[0;33m\\\\\\]\\\\w\\\\\\[\\\\e\\[0m\\\\\\]\\\\$ind '|" $HOME/.profile;;
115 slitaz-*)
116 lxpanel="$HOME/.config/lxpanel"
117 if [ ! -e "$lxpanel" ]; then
118 mkdir -p "$lxpanel"; cp /etc/lxpanel/default /etc/lxpanel/slitaz $lxpanel
119 fi
120 for panel in $(find /home/tux/.config/lxpanel -type f -iname panel); do
121 awk -vicon="/usr/share/pixmaps/$(GET tweak).png" '
122 BEGIN{ found = "0"; }
123 {
124 if ($1 == "Plugin") { found = "1"; }
126 if (found == "1" && $1 == "type") {
127 if ($3 == "menu") found = "2"; else found = "0";
128 }
130 if (found == "2" && $1 == "Plugin") { found = "0"; }
132 if (found == "2" && index($1, "image")) {
133 printf " image=%s\n", icon;
134 found = 0;
135 } else {
136 print;
137 }
138 }
139 ' $panel > $panel.new
140 mv -f $panel.new $panel
141 done
143 # `lxpanelctl restart` exists, but it breaks often leaving us without any panel
144 killall lxpanel; DISPLAY=':0.0' lxpanel &
145 ;;
146 menu-notext)
147 dd="$HOME/.local/share/desktop-directories"
148 mkdir -p $dd
149 echo -e '[Desktop Entry]\nType=Directory\nName=' > $dd/SliTazMenu.directory
150 killall lxpanel; DISPLAY=':0.0' lxpanel &
151 ;;
152 menu-text)
153 dd="$HOME/.local/share/desktop-directories/SliTazMenu.directory"
154 [ -f "$dd" ] && rm "$dd"
155 killall lxpanel; DISPLAY=':0.0' lxpanel &
156 ;;
157 esac
158 exit 0
159 ;;
162 *\ menuIcon\ *)
163 icon="/usr/share/pixmaps/$(GET menuIcon).png"
164 [ ! -r $icon ] && exit 0
165 header "Content-Type: image/png"; cat $icon; exit 0
166 ;;
167 esac
173 #
174 # Default xHTML content
175 #
177 header
178 xhtml_header
180 case " $(GET) " in
181 *\ group*)
182 #
183 # Groups management
184 #
185 check_root_tazpanel
187 cat <<EOT
188 <h2 id="groups">$(_ 'Manage groups')</h2>
191 <section>
192 <form class="wide">
193 <header>
194 <input type="hidden" name="groups"/>
195 <!-- $(_ 'Selection:') -->
196 <button name="do" value="delgroups" data-icon="delete">$(_ 'Delete group')</button>
197 </header>
199 <div class="scroll">
200 <table class="wide zebra scroll">
201 <thead>
202 <tr class="thead">
203 <td>$(_ 'Group')</td>
204 <td>$(_ 'Group ID')</td>
205 <td>$(_ 'Members')</td>
206 </tr>
207 </thead>
208 <tbody>
209 EOT
210 for group in $(getdb group | cut -d ":" -f 1); do
211 IFS=':'
212 set -- $(getdb group | grep "^$group:")
213 unset IFS
214 gid=$3
215 members=$4
216 cat <<EOT
217 <tr>
218 <td><input type="checkbox" name="group" value="$group" id="$group"/>
219 <label for="$group" data-icon="group">$group</label></td>
220 <td>$gid</td>
221 <td>${members//,/, }</td>
222 </tr>
223 EOT
224 done
225 cat <<EOT
226 </tbody>
227 </table>
228 </div>
229 </form>
230 </section>
233 <section>
234 <header>$(_ 'Add a new group')</header>
235 <form>
236 <input type="hidden" name="groups"/>
237 <table>
238 <tr><td>$(_ 'Group name:')</td>
239 <td><input type="text" name="group"/></td>
240 </tr>
241 <tr><td colspan="2">
242 <button type="submit" name="do" value="addgroup" data-icon="add">$(_ 'Create group')</button>
243 </td></tr>
244 </table>
245 </form>
246 </section>
249 <section>
250 <header>$(_ 'Manage group membership')</header>
251 <form>
252 <input type="hidden" name="groups"/>
253 <table>
254 <tr>
255 <td>$(_ 'Group name:')</td>
256 <td><select name="group">$(listdb group)</select></td>
257 <td>$(_ 'User name:')</td>
258 <td><select name="member">$(listdb passwd)</select></td>
259 </tr>
260 <tr>
261 <td colspan="2">
262 <button name="do" value="addmember" data-icon="add">$(_ 'Add user')</button>
263 </td>
264 <td colspan="2">
265 <button name="do" value="delmember" data-icon="delete">$(_ 'Remove user')</button>
266 </td>
267 </tr>
268 </table>
269 </form>
270 </section>
272 EOT
273 ;;
276 *\ user*)
277 #
278 # Users management
279 #
280 check_root_tazpanel
282 cat <<EOT
283 <h2 id="users">$(_ 'Manage users')</h2>
285 <section>
286 <form class="wide">
287 <header>
288 <!--$(_ 'Selection:')-->
289 <button name="do" value="delusers" data-icon="delete">$(_ 'Delete user')</button>
290 <button name="do" value="lockusers" data-icon="lock" >$(_ 'Lock user' )</button>
291 <button name="do" value="unlockusers" data-icon="unlock">$(_ 'Unlock user')</button>
292 </header>
294 <table class="wide zebra center">
295 <thead>
296 <tr>
297 <td>$(_ 'Login')</td>
298 <td>$(_ 'User ID')</td>
299 <td>$(_ 'Name')</td>
300 <td>$(_ 'Home')</td>
301 <td>$(_ 'Shell')</td>
302 </tr>
303 </thead>
304 </tbody>
305 EOT
306 for login in $(getdb passwd | cut -d ":" -f 1); do
307 if [ -d /home/$login ]; then
308 colorlogin=$login
309 grep -qs "^$login:!" /etc/shadow &&
310 colorlogin="<span style='color: red;'>$login</span>"
311 IFS=':'
312 set -- $(getdb passwd | grep "^$login:")
313 unset IFS
314 cat <<EOT
315 <tr>
316 <td style="white-space: nowrap">
317 <input type="checkbox" name="user" value="$login" id="$login"/>
318 <label for="$login" data-icon="user">$colorlogin</label></td>
319 <td>$3:$4</td>
320 <td>$(echo $5 | sed s/,.*//)</td>
321 <td>$6</td>
322 <td>$7</td>
323 </tr>
324 EOT
325 fi
326 done
327 cat <<EOT
328 </tbody>
329 </table>
330 EOT
331 cat <<EOT
332 <footer>
333 <div>
334 $(_ 'Password:')
335 <input type="password" name="password"/>
336 <button type="submit" name="do" value="chpasswd" data-icon="ok">$(_ 'Change password')</button>
337 </div>
338 </footer>
339 </form>
340 </section>
343 <section>
344 <header>$(_ 'Add a new user')</header>
346 <form>
347 <input type="hidden" name="users"/>
348 <table class="summary">
349 <tr><td>$(_ 'User login:')</td>
350 <td><input type="text" name="user" size="30" pattern="[a-z]*"/></td></tr>
351 <tr><td>$(_ 'User name:')</td>
352 <td><input type="text" name="name" size="30"/></td></tr>
353 <tr><td>$(_ 'User password:')</td>
354 <td><input type="password" name="passwd" size="30"/></td></tr>
355 </table>
357 <footer>
358 <button type="submit" name="do" value="adduser" data-icon="add">$(_ 'Create user')</button>
359 </footer>
360 </form>
361 </section>
362 EOT
364 # `who` output is empty in the Live mode
365 if [ -n "$(who)" ]; then
366 cat <<EOT
367 <section>
368 <header>$(_ 'Current user sessions')</header>
369 <pre>$(who)</pre>
370 </section>
371 EOT
372 fi
374 # `last` output is empty (just header) in the Live mode
375 if [ "$(last | wc -l)" != "1" ]; then
376 cat <<EOT
377 <section>
378 <header>$(_ 'Last user sessions')</header>
379 <div class="scroll"><pre>$(last)</pre></div>
380 </section>
381 EOT
382 fi
383 ;;
386 *\ locale*)
387 #
388 # Choose locale
389 #
390 check_root_tazpanel
392 LOADING_MSG="$(_ 'Please wait...')"; loading_msg
394 cur_loc=$(locale | grep LANG | cut -d= -f2)
395 cat <<EOT
396 <h2 id="locale">$(_ 'Choose locale')</h2>
398 <section>
399 <header>$(_ 'Current locale settings:')</header>
400 <div>
401 <pre>$(locale)</pre>
402 </div>
403 </section>
405 <section>
406 <header>$(_ 'Locales that are currently installed on the machine:')</header>
407 <div>
408 <pre>$(locale -a)</pre>
409 </div>
410 </section>
411 EOT
413 is_installed "glibc-locale"
414 [ $? = 1 ] &&
415 msg tip $(_ \
416 "Can't see your language?<br/>You can \
417 <a href='pkgs.cgi?do=Install&amp;glibc-locale'>install glibc-locale</a> \
418 to see a larger list of available locales.")
421 cat <<EOT
422 <section>
423 <header>$(_ 'Available locales:')</header>
424 <form class="wide">
425 <table class="wide zebra">
426 <thead>
427 <tr><td>$(_ 'Code')</td>
428 <td>$(_ 'Language')</td>
429 <td>$(_ 'Territory')</td>
430 <td>$(_ 'Description')</td>
431 </tr>
432 </thead>
433 <tbody>
434 EOT
435 for locale in $(find /usr/share/i18n/locales -type f | sort); do
436 locale_name=$(basename $locale)
437 locale_title=$(grep -m 1 -e '^ *title' $locale | cut -d'"' -f2)
438 if [ -n "$locale_title" ]; then
439 sel=''; [ "$locale_name" == "$cur_loc" ] && sel='checked="checked"'
440 cat <<EOT
441 <tr>
442 <td>
443 <input type="radio" name="gen_locale" value="$locale_name" $sel id="$locale_name"/>
444 <label for="$locale_name">$locale_name</label>
445 </td>
446 <td>$(gettext -d iso_639 "$(grep -m 1 -e '^ *language' $locale | cut -d '"' -f2)")</td>
447 <td>$(gettext -d iso_3166 "$(grep -m 1 -e '^ *territory' $locale | cut -d '"' -f2)")</td>
448 <td>$locale_title</td>
449 </tr>
450 EOT
451 fi
452 done
453 cat <<EOT
454 </tbody>
455 </table>
457 <footer>
458 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
459 </footer>
460 </form>
461 </section>
462 EOT
463 ;;
466 *\ tweaks\ *)
467 #
468 # Small tweaks for user
469 #
471 user="$REMOTE_USER"; host="$(hostname)"
472 HOME="$(awk -F: -vu=$user '$1==u{print $6}' /etc/passwd)"
473 font="${TERM_FONT:-monospace}"; palette=$(echo $TERM_PALETTE | tr A-Z a-z)
474 case $user in
475 root) color=31; ind="#";;
476 *) color=32; ind="$";;
477 esac
479 prompt_bw="$user@$host:/usr/bin$ind"
480 prompt_c="<span class=\"color$color\">$user@$host</span>:<span class=\"color33\">/usr/bin</span>$ind"
481 cursor="<span class=\"color47\">_</span>"
482 cat <<EOT
483 <script type="text/javascript">
484 function tweak(tweakName) {
485 // Send request to the server
486 var hiddenImg = document.createElement('IMG');
487 hiddenImg.src = "settings.cgi?tweak=" + tweakName;
488 }
489 </script>
491 <section>
492 <header>$(_ 'Small quick tweaks for user %s' "$user")</header>
494 <fieldset><legend>$(_ 'Terminal prompt')</legend>
495 <table class="wide">
496 <tr>
497 <td>
498 <label>
499 <input type="radio" name="termPrompt" onclick="tweak('monochrome')"/>
500 $(_ 'Monochrome')
501 </label>
502 <pre class="term $palette" style="font-family: '$font'; height: 5rem;">
503 $prompt_bw uname -r<br/>$(uname -r)<br/>$prompt_bw date<br/>$(date)<br/>$prompt_bw $cursor
504 </pre>
505 </td>
506 <td>
507 <label>
508 <input type="radio" name="termPrompt" onclick="tweak('colored')"/>
509 $(_ 'Colored')
510 </label>
511 <pre class="term $palette" style="font-family: '$font'; height: 5rem;">
512 $prompt_c uname -r<br/>$(uname -r)<br/>$prompt_c date<br/>$(date)<br/>$prompt_c $cursor
513 </pre>
514 </td>
515 </tr>
516 </table>
518 <p>$(_ 'Manual edit: %s' "<a data-icon=\"conf\" href="index.cgi?file=$HOME/.profile">~/.profile</a>")<br/>
519 $(_ 'To take effect: log out and log in to system or execute command in the terminal:')</p>
521 <pre>. ~/.profile</pre>
522 </fieldset>
524 <br/>
526 <fieldset>
527 <legend>$(_ 'Menu button appearance')</legend>
528 <table class="wide">
529 <tr>
530 <td style="vertical-align: top">
531 <fieldset>
532 <legend>$(_ 'Icon:')</legend>
533 <label>
534 <input type="radio" name="menuIcon" onclick="tweak('slitaz-menu-empty')"/>
535 $(_ 'Do not show')
536 </label><br/>
537 <label>
538 <input type="radio" name="menuIcon" onclick="tweak('slitaz-button-red')"/>
539 <img src="?menuIcon=slitaz-button-red"/>
540 </label><br/>
541 <label>
542 <input type="radio" name="menuIcon" onclick="tweak('slitaz-menu')"/>
543 <img src="?menuIcon=slitaz-menu"/>
544 </label><br/>
545 <label>
546 <input type="radio" name="menuIcon" onclick="tweak('slitaz-button')"/>
547 <img src="?menuIcon=slitaz-button"/>
548 </label>
549 </fieldset>
550 </td>
551 <td style="vertical-align: top">
552 <fieldset>
553 <legend>$(_ 'Text:')</legend>
554 <label>
555 <input type="radio" name="menuText" onclick="tweak('menu-notext')"/>
556 $(_ 'Do not show')
557 </label><br/>
558 <label>
559 <input type="radio" name="menuText" onclick="tweak('menu-text')"/>
560 $(_ 'Show text')
561 </label>
562 </fieldset>
563 </td>
564 </tr>
565 </table>
566 <p>$(_ 'Manual edit: %s' \
567 "<a data-icon=\"conf\" href=\"index.cgi?file=$HOME/.local/share/desktop-directories/SliTazMenu.directory\">~/.local/share/desktop-directories/SliTazMenu.directory</a>
568 $(
569 find $HOME/.config/lxpanel -type f -name panel | awk -vh="$HOME" \
570 '{ printf "<a data-icon=\"conf\" href=\"index.cgi?file=%s\">%s</a> ", $1, gensub(h, "~", "")}'
571 )")</p>
572 </fieldset>
573 </section>
574 EOT
575 ;;
578 *)
579 #
580 # Default system settings page
581 #
582 check_root_tazpanel
584 cat <<EOT
585 <h2>$(_ 'System settings')</h2>
587 <p>$(_ 'Manage system time, users or language settings')<p>
589 <form><!--
590 --><button name="users" data-icon="user" >$(_ 'Manage users' )</button><!--
591 --><button name="groups" data-icon="group">$(_ 'Manage groups')</button>
592 </form>
594 <section>
595 <header>$(_ 'System time')</header>
596 <div>
597 <form class="wide">
598 <fieldset><legend>$(_ 'Time zone:')</legend>
599 <select name="tz">
600 $(cd /usr/share/zoneinfo; find * -type f ! -name '*.tab' | sort | \
601 awk -vtz="$(cat /etc/TZ)" \
602 '{printf("<option%s>%s</option>", ($1 == tz)?" selected":"", $1)}')
603 </select>
604 <button name="do" value="settz" data-icon="ok">$(_ 'Change')</button>
605 </fieldset>
607 <fieldset><legend>$(_ 'System time:')</legend>
608 $(date | sed 's|[0-9][0-9]:[0-9:]*|<span id="time">&</span>|')
609 <button name="do" value="rdate" data-icon="sync">$(_ 'Sync online')</button>
610 </fieldset>
612 <fieldset id="hwclock1"><legend>$(_ 'Hardware clock:')</legend>
613 $(hwclock -ur | sed 's|0.000000 seconds||')
614 <button name="do" value="hwclock" id="hwclock" data-icon="clock">$(_ 'Set hardware clock')</button>
615 </fieldset>
617 <fieldset><legend>$(_ 'Set date')</legend>
618 <input type="number" name="day" value="$(date +%d)" min="1" max="31" size="4" required/>
619 <select name="month" value="$(date +%m)">
620 $(for i in $(seq 12); do
621 sel=''; [ "$i" == "$(date +%-m)" ] && sel=' selected'
622 printf "<option value=\"%s\"$sel>%s</option>" $(date -d $i.01-01:01 '+%m %B')
623 done)
624 </select>
625 <input type="number" name="year" value="$(date +%Y)" min="2015" max="2030" size="6" required/>
626 - <input type="number" name="hour" value="$(date +%H)" min="0" max="23" size="4" required/><!--
627 -->:<input type="number" name="min" value="$(date +%M)" min="0" max="59" size="4" required/><!--
628 -->:<input type="number" name="sec" value="00" min="0" max="59" size="4" required/>
629 <button name="do" value="date" data-icon="ok">$(_ 'Set date')</button>
630 </fieldset>
631 </form>
632 </div>
634 <script type="text/javascript">
635 // Live time on page
636 Date.prototype.timeNow = function() {
637 return ((this.getHours() < 10)?"0":"") + this.getHours() + ":" + ((this.getMinutes() < 10)?"0":"") + this.getMinutes() + ":" + ((this.getSeconds() < 10)?"0":"") + this.getSeconds();
638 }
639 setInterval(function(){document.getElementById('time').innerText = new Date().timeNow()}, 1000);
641 //document.getElementById('hwclock').disabled = 'disabled';
642 </script>
643 </section>
644 EOT
647 #
648 # Locale settings
649 #
650 cat <<EOT
651 <section>
652 <header id="locale">$(_ 'System language')</header>
653 <div>
654 <form>
655 EOT
656 # Check if a new locale was requested
657 if [ -n "$new_locale" ]; then
658 rm -rf /usr/lib/locale/$new_locale
659 localedef -i $new_locale -c -f UTF-8 \
660 /usr/lib/locale/$new_locale
661 # System configuration
662 echo "LANG=$new_locale" > /etc/locale.conf
663 echo "LC_ALL=$new_locale" >> /etc/locale.conf
664 msg warn "$(_ \
665 'You must logout and login again to your current session to use %s locale.' $new_locale)"
666 else
667 cat <<EOT
668 $(_ 'Current system locale:')
669 <strong>$(locale | grep LANG | cut -d= -f2)</strong>
670 <button name="locale" data-icon="locale">$(_ 'Change')</button>
671 EOT
672 fi
673 cat <<EOT
674 </div>
675 </form>
676 </section>
679 <section>
680 <header id="keymap">$(_ 'Keyboard layout')</header>
681 <div>
682 EOT
683 # Check if a new keymap was requested
684 if [ -n "$new_keymap" ]; then
685 echo "$new_keymap" > /etc/keymap.conf
686 if [ -x /bin/loadkeys ]; then
687 loadkeys $new_keymap
688 else
689 loadkmap < /usr/share/kmap/$new_keymap.kmap
690 fi
691 fi
693 keymap=$(cat /etc/keymap.conf)
694 _ 'Current console keymap: %s' $keymap
695 if [ -n "$keymap" ]; then
696 case "$keymap" in
697 fr_CH*)
698 keymap="ch" ;;
699 ru)
700 keymap="us,ru" ;;
701 slovene)
702 keymap=si ;;
703 *)
704 keymap=${keymap%-lat*}
705 keymap=${keymap%-abnt2} ;;
706 esac
707 keyboard_config=/etc/X11/xorg.conf.d/40-Keyboard.conf
708 cat <<EOT
709 <form id="settings"></form>
710 <form id="index" action="index.cgi"></form>
711 <br/>
712 $(_ 'Suggested keymap for Xorg:') $keymap
713 <button form="settings" name="apply_xorg_kbd" value="$keymap" data-icon="ok">$(_ 'Activate')</button>
714 <button form="index" name="file" value="$keyboard_config" data-icon="edit">$(_ 'Edit')</button>
715 <br/>
716 EOT
717 fi
718 cat <<EOT
719 <form>
720 $(_ 'Available keymaps:')
721 <select name="gen_keymap">
722 $(list_keymaps)
723 </select>
724 <button type="submit" data-icon="ok">$(_ 'Activate')</button>
725 </form>
726 </div>
727 </section>
730 <section>
731 <header>$(_ 'Panel configuration')</header>
732 <div>
733 <form class="wide">
734 <fieldset><legend>$(_ 'Style:')</legend>
735 <select name="style">$(list_styles)</select>
736 <button data-icon="ok">$(_ 'Activate')</button>
737 </fieldset>
738 </form>
740 <fieldset><legend>$(_ 'Configuration files:')</legend>
741 <button form="index" name="file" value="$CONFIG" data-icon="edit">$(_ 'Panel')</button>
742 <button form="index" name="file" value="$HTTPD_CONF" data-icon="edit">$(_ 'Server')</button>
743 </fieldset>
745 <p>$(_ 'TazPanel provides a debugging mode and page:')
746 <a href="index.cgi?debug">debug</a>
747 </p>
748 </div>
749 </section>
750 EOT
751 ;;
752 esac
754 xhtml_footer
755 exit 0