tazpanel rev 14
Massive improvement to inedx.cgi, up Makefile, smatter tazpanel cmdline
author | Christophe Lincoln <pankso@slitaz.org> |
---|---|
date | Sun Apr 03 17:43:32 2011 +0200 (2011-04-03) |
parents | 64f564036b88 |
children | 0f9a95d9ca89 |
files | Makefile index.cgi po/tazpkg-cgi/tazpkg-cgi.pot styles/default/header.html styles/default/style.css tazpanel tazpanel.conf tazpkg.cgi |
line diff
1.1 --- a/Makefile Sun Apr 03 03:21:00 2011 +0200 1.2 +++ b/Makefile Sun Apr 03 17:43:32 2011 +0200 1.3 @@ -6,11 +6,17 @@ 1.4 LINGUAS?=fr 1.5 PANEL?=/var/www/tazpanel 1.6 1.7 +VERSION:=$(shell grep ^VERSION tazpanel | cut -d '=' -f 2) 1.8 + 1.9 # i18n 1.10 1.11 pot: 1.12 xgettext -o po/tazpkg-cgi/tazpkg-cgi.pot -L Shell \ 1.13 - --package-name="Tazpkg CGI" ./tazpkg.cgi 1.14 + --package-name="Tazpkg CGI" \ 1.15 + --package-version="$(VERSION)" ./tazpkg.cgi 1.16 + xgettext -o po/tazpanel/tazpanel.pot -L Shell \ 1.17 + --package-name="TazPanel cmdline" \ 1.18 + --package-version="$(VERSION)" ./tazpanel 1.19 1.20 msgmerge: 1.21 @for l in $(LINGUAS); do \
2.1 --- a/index.cgi Sun Apr 03 03:21:00 2011 +0200 2.2 +++ b/index.cgi Sun Apr 03 17:43:32 2011 +0200 2.3 @@ -1,34 +1,15 @@ 2.4 #!/bin/sh 2.5 # 2.6 -# Main CGI interface for TazPanel. In on word: KISS 2.7 +# Main CGI interface for TazPanel. In on word: KISS. Use the main cas form 2.8 +# command so we are faster and dont load unneeded function. If nececarry 2.9 +# you can use the lib/ dir to handle external resources. 2.10 # 2.11 echo "Content-Type: text/html" 2.12 echo "" 2.13 2.14 -# We need a config file first 2.15 -CONFIG="/etc/slitaz/tazpanel.conf" 2.16 -[ -f $CONFIG ] && . $CONFIG 2.17 -[ -f tazpanel.conf ] && . tazpanel.conf 2.18 -[ -z $PANEL ] && echo "No config file found" && exit 1 2.19 - 2.20 -# xHTML 5 header 2.21 -xhtml_header() { 2.22 - cat $HEADER | sed s/'- %TITLE%'/"$TITLE"/ 2.23 -} 2.24 - 2.25 -table_start() { 2.26 - cat << EOT 2.27 -<table> 2.28 - <tbody> 2.29 -EOT 2.30 -} 2.31 - 2.32 -table_end () { 2.33 - cat << EOT 2.34 - </tbody> 2.35 -</table> 2.36 -EOT 2.37 -} 2.38 +# Common functions from libtazpanel 2.39 +. lib/libtazpanel 2.40 +get_config 2.41 2.42 # 2.43 # Commands 2.44 @@ -36,34 +17,32 @@ 2.45 2.46 case "$QUERY_STRING" in 2.47 boot) 2.48 + # 2.49 # Everything until user login 2.50 + # 2.51 TITLE="- Network" 2.52 xhtml_header 2.53 cat << EOT 2.54 <div id="wrapper"> 2.55 -<h2>`gettext "Boot & startup"`</h2> 2.56 -<p> 2.57 - `gettext "Everything that appends before user login."` 2.58 -</p> 2.59 + <h2>`gettext "Boot & startup"`</h2> 2.60 + <p> 2.61 + `gettext "Everything that appends before user login."` 2.62 + </p> 2.63 +</div> 2.64 2.65 <h3>`gettext "Kernel cmdline"`</h3> 2.66 <pre> 2.67 `cat /proc/cmdline` 2.68 </pre> 2.69 EOT 2.70 - echo '</div>' ;; 2.71 + ;; 2.72 users|user=*) 2.73 + # 2.74 # Manage system user accounts 2.75 + # 2.76 TITLE="- Users" 2.77 xhtml_header 2.78 - 2.79 cmdline=`echo ${QUERY_STRING#user*=} | sed s'/&/ /g'` 2.80 - #user=`echo ${cmdline} | sed s'/=/ /' | awk '{print $1}'` 2.81 - #cmd=`echo ${cmdline} | sed s'/=/ /' |awk '{print $2}'` 2.82 - 2.83 - [ $DEBUG == "1" ] && echo \ 2.84 - "<p class='debug'>$cmdline</p>" 2.85 - #$REQUEST_METHOD $QUERY_STRING 2.86 # Parse cmdline 2.87 for opt in $cmdline 2.88 do 2.89 @@ -92,8 +71,9 @@ 2.90 esac 2.91 cat << EOT 2.92 <div id="wrapper"> 2.93 -<h2>`gettext "Manage users"`</h2> 2.94 -<div>`gettext "Manage human users on your SliTaz system"`</div> 2.95 + <h2>`gettext "Manage users"`</h2> 2.96 + <p>`gettext "Manage human users on your SliTaz system"`</p> 2.97 +</div> 2.98 <form method="get" action="$SCRIPT_NAME"> 2.99 EOT 2.100 table_start 2.101 @@ -128,66 +108,101 @@ 2.102 fi 2.103 done 2.104 table_end 2.105 - #`gettext "Selection:"` 2.106 cat << EOT 2.107 -<div> 2.108 - <input type="submit" value="`gettext "Delete selected user"`" /> 2.109 -</div> 2.110 - 2.111 + <div> 2.112 + <input type="submit" value="`gettext "Delete selected user"`" /> 2.113 + </div> 2.114 </form> 2.115 -</div> 2.116 2.117 <h3>`gettext "Add a user"`</h3> 2.118 <form method="get" action="$SCRIPT_NAME"> 2.119 -<input type="hidden" name="user" size="30" /> 2.120 -<p> 2.121 - `gettext ""` 2.122 - <input type="text" name="adduser" size="30" /> 2.123 -</p> 2.124 -<p> 2.125 - `gettext ""` 2.126 - <input type="password" name="passwd" size="30" /> 2.127 -</p> 2.128 -<input type="submit" value="`gettext ""`Create user" /> 2.129 + <input type="hidden" name="user" size="30" /> 2.130 + <p> 2.131 + `gettext ""` 2.132 + <input type="text" name="adduser" size="30" /> 2.133 + </p> 2.134 + <p> 2.135 + `gettext ""` 2.136 + <input type="password" name="passwd" size="30" /> 2.137 + </p> 2.138 + <input type="submit" value="`gettext ""`Create user" /> 2.139 </form 2.140 EOT 2.141 ;; 2.142 network) 2.143 + # 2.144 # Network configuration 2.145 + # 2.146 TITLE="- Network" 2.147 xhtml_header 2.148 cat << EOT 2.149 <div id="wrapper"> 2.150 -<h2>`gettext "Connections`</h2> 2.151 + <h2>`gettext "Networking`</h2> 2.152 + <p>`gettext "Manage network connection and services`</p> 2.153 +</div> 2.154 + 2.155 +<h3>Output of: ifconfig -a</h3> 2.156 +<pre> 2.157 +`ifconfig -a` 2.158 +</pre> 2.159 EOT 2.160 - echo '<pre>' 2.161 - ifconfig 2.162 - echo '</pre>' 2.163 - echo '</div>' ;; 2.164 + ;; 2.165 hardware) 2.166 + # 2.167 + # Hardware drivers, devices, filesystem, screen 2.168 + # 2.169 TITLE="- Hardware" 2.170 xhtml_header 2.171 cat << EOT 2.172 <div id="wrapper"> 2.173 -<h2>`gettext "Drivers & Devices"`</h2> 2.174 + <h2>`gettext "Drivers & Devices"`</h2> 2.175 + <p>`gettext "Manage your computer hardware`</p> 2.176 +</div> 2.177 EOT 2.178 echo '<pre>' 2.179 - lspci 2.180 + fdisk -l | fgrep Disk 2.181 echo '</pre>' 2.182 - echo '</div>' ;; 2.183 + echo '<pre>' 2.184 + df -h | grep ^/dev 2.185 + echo '</pre>' 2.186 + echo '<pre>' 2.187 + lspci 2.188 + echo '</pre>' 2.189 + ;; 2.190 *) 2.191 + # 2.192 # Default xHTML content 2.193 + # 2.194 xhtml_header 2.195 cat << EOT 2.196 <div id="wrapper"> 2.197 -<h2>`gettext "Host:"` `hostname`</h2> 2.198 + <h2>`gettext "Host:"` `hostname`</h2> 2.199 + <p>`gettext "SliTaz administration et configuration Panel"`<p> 2.200 +</div> 2.201 + 2.202 +<h3>`gettext "Summary"`</h3> 2.203 +<div id="summary"> 2.204 + 2.205 <p> 2.206 - Uptime: `uptime` 2.207 + `gettext "Uptime:"` `uptime` 2.208 </p> 2.209 +<p> 2.210 + `gettext "Memory in Mb:"` 2.211 + `free -m | grep Mem: | awk \ 2.212 + '{print "| Total:", $2, "| Used:", $3, "| Free:", $4}'` 2.213 +</p> 2.214 +<p> 2.215 + `gettext "Filesystem usage statistics:"` 2.216 +</p> 2.217 +<pre> 2.218 +`df -h | grep ^/dev` 2.219 +</pre> 2.220 + 2.221 +<!-- Close summary --> 2.222 +</div> 2.223 EOT 2.224 - echo '</div>' 2.225 ;; 2.226 esac 2.227 2.228 -# xHTML 5 footer 2.229 -cat $FOOTER 2.230 +xhtml_footer 2.231 +exit 0
3.1 --- a/po/tazpkg-cgi/tazpkg-cgi.pot Sun Apr 03 03:21:00 2011 +0200 3.2 +++ b/po/tazpkg-cgi/tazpkg-cgi.pot Sun Apr 03 17:43:32 2011 +0200 3.3 @@ -6,9 +6,9 @@ 3.4 #, fuzzy 3.5 msgid "" 3.6 msgstr "" 3.7 -"Project-Id-Version: Tazpkg CGI\n" 3.8 +"Project-Id-Version: Tazpkg CGI 1.0\n" 3.9 "Report-Msgid-Bugs-To: \n" 3.10 -"POT-Creation-Date: 2011-04-03 03:19+0200\n" 3.11 +"POT-Creation-Date: 2011-04-03 17:41+0200\n" 3.12 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 3.13 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" 3.14 "Language-Team: LANGUAGE <LL@li.org>\n" 3.15 @@ -61,94 +61,94 @@ 3.16 msgid "Web" 3.17 msgstr "" 3.18 3.19 -#: tazpkg.cgi:126 3.20 -msgid "List:" 3.21 -msgstr "" 3.22 - 3.23 -#: tazpkg.cgi:127 tazpkg.cgi:181 3.24 +#: tazpkg.cgi:126 tazpkg.cgi:180 3.25 msgid "My packages" 3.26 msgstr "" 3.27 3.28 -#: tazpkg.cgi:128 tazpkg.cgi:213 tazpkg.cgi:231 3.29 +#: tazpkg.cgi:127 tazpkg.cgi:212 tazpkg.cgi:230 3.30 msgid "All packages" 3.31 msgstr "" 3.32 3.33 -#: tazpkg.cgi:129 tazpkg.cgi:246 3.34 +#: tazpkg.cgi:128 3.35 +msgid "Recharge list" 3.36 +msgstr "" 3.37 + 3.38 +#: tazpkg.cgi:129 3.39 +msgid "Upgrade" 3.40 +msgstr "" 3.41 + 3.42 +#: tazpkg.cgi:130 tazpkg.cgi:348 3.43 +msgid "Configuration" 3.44 +msgstr "" 3.45 + 3.46 +#: tazpkg.cgi:139 tazpkg.cgi:149 tazpkg.cgi:160 3.47 +msgid "Selection:" 3.48 +msgstr "" 3.49 + 3.50 +#: tazpkg.cgi:163 3.51 +msgid "Toogle all" 3.52 +msgstr "" 3.53 + 3.54 +#: tazpkg.cgi:245 3.55 msgid "Recharge" 3.56 msgstr "" 3.57 3.58 -#: tazpkg.cgi:130 3.59 -msgid "Upgradeable" 3.60 -msgstr "" 3.61 - 3.62 -#: tazpkg.cgi:131 tazpkg.cgi:349 3.63 -msgid "Configuration" 3.64 -msgstr "" 3.65 - 3.66 -#: tazpkg.cgi:140 tazpkg.cgi:150 tazpkg.cgi:161 3.67 -msgid "Selection:" 3.68 -msgstr "" 3.69 - 3.70 -#: tazpkg.cgi:164 3.71 -msgid "Toogle all" 3.72 -msgstr "" 3.73 - 3.74 -#: tazpkg.cgi:249 3.75 +#: tazpkg.cgi:248 3.76 msgid "Recharge lists will check for new or updated packages" 3.77 msgstr "" 3.78 3.79 -#: tazpkg.cgi:253 3.80 +#: tazpkg.cgi:252 3.81 msgid "Recharging the packages list... please wait" 3.82 msgstr "" 3.83 3.84 -#: tazpkg.cgi:257 3.85 +#: tazpkg.cgi:256 3.86 msgid "Packages lists are up-to-date" 3.87 msgstr "" 3.88 3.89 -#: tazpkg.cgi:264 3.90 +#: tazpkg.cgi:263 3.91 msgid "Upgradeable packages" 3.92 msgstr "" 3.93 3.94 -#: tazpkg.cgi:292 3.95 +#: tazpkg.cgi:291 3.96 msgid "Performing task on packages" 3.97 msgstr "" 3.98 3.99 -#: tazpkg.cgi:309 3.100 +#: tazpkg.cgi:308 3.101 msgid "Package info" 3.102 msgstr "" 3.103 3.104 -#: tazpkg.cgi:311 3.105 +#: tazpkg.cgi:310 3.106 msgid "Detailled information on:" 3.107 msgstr "" 3.108 3.109 -#: tazpkg.cgi:325 3.110 +#: tazpkg.cgi:324 3.111 msgid "Installed files" 3.112 msgstr "" 3.113 3.114 -#: tazpkg.cgi:351 3.115 +#: tazpkg.cgi:350 3.116 msgid "Tazpkg configuration and settings" 3.117 msgstr "" 3.118 3.119 -#: tazpkg.cgi:354 3.120 +#: tazpkg.cgi:353 3.121 msgid "Package in cache" 3.122 msgstr "" 3.123 3.124 -#: tazpkg.cgi:357 3.125 +#: tazpkg.cgi:356 3.126 msgid "Packages in the cache:" 3.127 msgstr "" 3.128 3.129 -#: tazpkg.cgi:363 3.130 +#: tazpkg.cgi:362 3.131 msgid "Current mirror list" 3.132 msgstr "" 3.133 3.134 -#: tazpkg.cgi:383 3.135 +#: tazpkg.cgi:384 3.136 msgid "Summary" 3.137 msgstr "" 3.138 3.139 -#: tazpkg.cgi:385 3.140 +#: tazpkg.cgi:386 3.141 msgid "Overview of all installed and mirrored packages" 3.142 msgstr "" 3.143 3.144 -#: tazpkg.cgi:390 3.145 +#: tazpkg.cgi:391 3.146 msgid "Latest log entries" 3.147 msgstr ""
4.1 --- a/styles/default/header.html Sun Apr 03 03:21:00 2011 +0200 4.2 +++ b/styles/default/header.html Sun Apr 03 17:43:32 2011 +0200 4.3 @@ -6,18 +6,19 @@ 4.4 <link rel="shortcut icon" href="styles/default/favicon.ico" /> 4.5 <link rel="stylesheet" type="text/css" href="styles/default/style.css" /> 4.6 </head> 4.7 -<body onLoad="init()"> 4.8 +<body> 4.9 + 4.10 +<div id="tazbar"> 4.11 + <div id="menu"><a href="./">Panel</a> 4.12 + <a href="tazpkg.cgi">Packages</a> 4.13 + <a href="index.cgi?boot">Boot</a> 4.14 + <a href="index.cgi?users">Users</a> 4.15 + <a href="index.cgi?network">Network</a> 4.16 + <a href="index.cgi?hardware">Hardware</a> 4.17 + </div> 4.18 +</div> 4.19 4.20 <h1>TazPanel - %TITLE%</h1> 4.21 4.22 -<div id="block"> 4.23 - <a href="./">Panel</a> 4.24 - | <a href="tazpkg.cgi">Packages</a> 4.25 - | <a href="index.cgi?boot">Boot</a> 4.26 - | <a href="index.cgi?users">Users</a> 4.27 - | <a href="index.cgi?network">Network</a> 4.28 - | <a href="index.cgi?hardware">Hardware</a> 4.29 -</div> 4.30 - 4.31 <!-- Page content --> 4.32 <div id="content">
5.1 --- a/styles/default/style.css Sun Apr 03 03:21:00 2011 +0200 5.2 +++ b/styles/default/style.css Sun Apr 03 17:43:32 2011 +0200 5.3 @@ -2,10 +2,10 @@ 5.4 CSS style for TazPanel - (C) 2011 SliTaz GNU/Linux 5.5 */ 5.6 5.7 -html { min-height: 102%; } 5.8 -body { padding: 20px 80px; font: 13px sans; } 5.9 +html { min-height: 102%; min-width: 300px; } 5.10 +body { padding: 0; font: 13px sans; } 5.11 h1 { color: #d66018; border-bottom: 1px dotted #ddd; } 5.12 -h2 { color: #444; margin: -20px 0 10px; } 5.13 +h2 { color: #444; margin: 10px 0 10px; } 5.14 h3 { color: #666; font-size: 140%; margin: 0; } 5.15 h4 { color: #888; font-size: 120%; } 5.16 img { border: 0pt none; vertical-align: middle; padding: 0 6px 0 0;} 5.17 @@ -53,13 +53,13 @@ 5.18 5.19 .search { 5.20 position: absolute; 5.21 - right: 88px; 5.22 + right: 48px; 5.23 top: 200px; 5.24 } 5.25 5.26 #actions { 5.27 position: absolute; 5.28 - left: 88px; 5.29 + left: 48px; 5.30 top: 200px; 5.31 } 5.32 5.33 @@ -74,7 +74,7 @@ 5.34 5.35 .debug { 5.36 position: fixed; 5.37 - top: 5px; 5.38 + top: 20px; 5.39 left: 5px; 5.40 padding: 6px 20px; 5.41 background-color: #f8f8f8; 5.42 @@ -102,6 +102,31 @@ 5.43 font-weight: bold; 5.44 } 5.45 5.46 +/* Desktop gui style */ 5.47 + 5.48 +#tazbar { 5.49 + position: fixed; 5.50 + top: 0; 5.51 + left: 0; 5.52 + height: 22px; 5.53 + width: 100%; 5.54 + padding: 0 0 0 0; 5.55 + background-color: #f1efeb; 5.56 + border-top: 1px solid #fefefe; 5.57 + border-bottom: 1px solid #d3cdc3; 5.58 + z-index: 200; 5.59 +} 5.60 +#menu { margin: 2px 8px; } 5.61 +#tazbar a { padding: 2px 4px; 5.62 +color: #000; border: 1px solid #ECE9E4; 5.63 +display: inline; } 5.64 +#tazbar a:hover { background-color: #fdfcfa ; 5.65 + border: 1px solid #827a6c; 5.66 + -moz-border-radius: 2px; 5.67 + -webkit-border-radius: 2px; 5.68 + border-radius: 2px;} 5.69 + 5.70 + 5.71 /* Round corner */ 5.72 5.73 table, pre, input[type=submit], .debug, .box {
6.1 --- a/tazpanel Sun Apr 03 03:21:00 2011 +0200 6.2 +++ b/tazpanel Sun Apr 03 17:43:32 2011 +0200 6.3 @@ -3,22 +3,49 @@ 6.4 # Tiny Tazpanel cmdline interface 6.5 # 6.6 6.7 +VERSION=1.0 6.8 + 6.9 +# Get the configuration file and functions 6.10 CONFIG="/etc/slitaz/tazpanel.conf" 6.11 +[ -f $CONFIG ] && . $CONFIG 6.12 +[ -f $PWD/tazpanel.conf ] && . tazpanel.conf 6.13 +[ ! -f $PANEL/lib/libtazpanel ] && \ 6.14 + echo "No config file or libtazpanel found: $CONFIG" && exit 1 6.15 +. $PANEL/lib/libtazpanel 6.16 +. /usr/lib/slitaz/libtaz 6.17 +source_lib commons 6.18 6.19 -[ -f $CONFIG ] && . $CONFIG 6.20 -[ -f tazpanel.conf ] && . tazpanel.conf 6.21 -[ -z $PANEL ] && echo "No config file found" && exit 1 6.22 +# Include gettext helper script. 6.23 +. /usr/bin/gettext.sh 6.24 + 6.25 +# Export package name for gettext. 6.26 +TEXTDOMAIN='tazpanel' 6.27 +export TEXTDOMAIN 6.28 + 6.29 +# 6.30 +# Commands 6.31 +# 6.32 6.33 case "$1" in 6.34 start) 6.35 - httpd -p $HTTPD_PORT -u root -c $HTTPD_CONF ;; 6.36 + gettext "Starting TazPanel web server on port $HTTPD_PORT..." 6.37 + httpd -p $HTTPD_PORT -u root -c $HTTPD_CONF \ 6.38 + -r "`gettext \"TazPanel Authentication\"`" & 6.39 + status ;; 6.40 stop) 6.41 - killall httpd ;; 6.42 + gettext "Stopping TazPanel web server..." 6.43 + killall httpd && status ;; 6.44 passwd|-p) 6.45 - echo -e "\nChanging password for TazPanel" 6.46 - echo -n "New password: " && read pass 6.47 + echo "" 6.48 + gettext "Changing password for TazPanel" 6.49 + gettext "New password: " && read pass 6.50 sed -i s"/\/:root:.*/\/:root:$pass/" $HTTPD_CONF 6.51 - echo -e "Password changed succeffuly\n" ;; 6.52 + gettext "Password changed succeffuly"; echo 6.53 + echo "" ;; 6.54 *) 6.55 - echo "Usage: `basename $0` [start|stop|passwd]" ;; 6.56 + echo "" 6.57 + gettext "Usage:" && echo "`basename $0` [start|stop|passwd]"; echo 6.58 + echo "" ;; 6.59 esac 6.60 + 6.61 +exit 0
7.1 --- a/tazpanel.conf Sun Apr 03 03:21:00 2011 +0200 7.2 +++ b/tazpanel.conf Sun Apr 03 17:43:32 2011 +0200 7.3 @@ -10,10 +10,10 @@ 7.4 HEADER="styles/$STYLE/header.html" 7.5 FOOTER="styles/$STYLE/footer.html" 7.6 7.7 -DEBUG="1" 7.8 +# Display some debug message 7.9 +DEBUG="0" 7.10 7.11 # Busybox HTTP deamon config 7.12 -# /etc/slitaz/httpd.conf 7.13 HTTPD_CONF="/etc/slitaz/httpd.conf" 7.14 HTTPD_PORT="8080" 7.15
8.1 --- a/tazpkg.cgi Sun Apr 03 03:21:00 2011 +0200 8.2 +++ b/tazpkg.cgi Sun Apr 03 17:43:32 2011 +0200 8.3 @@ -123,11 +123,10 @@ 8.4 sub_block() { 8.5 cat << EOT 8.6 <div id="sub_block"> 8.7 - `gettext "List:"` 8.8 <a href='$SCRIPT_NAME?list'>`gettext "My packages"`</a> | 8.9 <a href='$SCRIPT_NAME?list-all'>`gettext "All packages"`</a> | 8.10 - <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge"`</a> | 8.11 - <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgradeable"`</a> | 8.12 + <a href='$SCRIPT_NAME?recharge'>`gettext "Recharge list"`</a> | 8.13 + <a href='$SCRIPT_NAME?upgradeable'>`gettext "Upgrade"`</a> | 8.14 <a href='$SCRIPT_NAME?config'>`gettext "Configuration"`</a> 8.15 </div> 8.16 EOT 8.17 @@ -376,7 +375,9 @@ 8.18 EOT 8.19 ;; 8.20 *) 8.21 + # 8.22 # Default to summary 8.23 + # 8.24 search_form 8.25 sub_block 8.26 cat << EOT 8.27 @@ -398,6 +399,5 @@ 8.28 esac 8.29 8.30 # xHTML 5 footer 8.31 -cd $PANEL && cat $FOOTER 8.32 - 8.33 +cd $PANEL && xhtml_footer 8.34 exit 0