tazpanel annotate lib/libtazpanel @ rev 412

style.css: tabs are left aligned
author Pascal Bellard <pascal.bellard@slitaz.org>
date Mon Jan 19 17:29:35 2015 +0100 (2015-01-19)
parents 7475f4b95a7b
children 299f204b8f1f
rev   line source
pankso@15 1 #!/bin/sh
pankso@15 2 #
pankso@15 3 # Common functions for TazPanel CGI and cmdline interface
pankso@15 4 #
pankso@15 5
pascal@377 6 [ "$(id -un)" == "${REMOTE_USER:-root}" ] || exec su -c "$(realpath $0) $@" $REMOTE_USER
pascal@376 7
pascal@81 8 # Get parameters with GET, POST and FILE functions
mojo@310 9 . /usr/lib/slitaz/httphelper
pascal@81 10
pankso@109 11 # I18n
pankso@286 12 . /etc/locale.conf
pankso@40 13 . /usr/bin/gettext.sh
pankso@40 14 TEXTDOMAIN='tazpanel'
pankso@286 15 export TEXTDOMAIN LANG LC_ALL
pankso@40 16
pankso@15 17 # We need a config file first
pankso@15 18 get_config() {
pankso@15 19 CONFIG="/etc/slitaz/tazpanel.conf"
pankso@116 20 [ -f data/tazpanel.conf ] && CONFIG="data/tazpanel.conf"
pankso@110 21 [ -f "$CONFIG" ] && . $CONFIG
pankso@110 22 [ ! -f "$PANEL/lib/libtazpanel" ] && \
pankso@15 23 echo "No config file or libtazpanel found: $CONFIG" && \
pankso@15 24 exit 1
pankso@15 25 }
pankso@15 26
al@303 27 # Display < > &
al@303 28 htmlize() {
al@303 29 sed -e 's|\&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g'
al@303 30 }
al@303 31
pankso@74 32 # Syntax highlighting for config file and SHell scripts
pankso@74 33 syntax_highlighter() {
pankso@74 34 case $1 in
pankso@74 35 conf)
al@303 36 htmlize | sed \
slaxemulator@177 37 -e s"#^\#\([^']*\)#<span class='conf-comment'>\0</span>#"g \
pankso@74 38 -e s"#^[A-Z]\([^']*\)=#<span class='conf-var'>\0</span>#"g \
pankso@74 39 -e s"#^[a-z]\([^']*\)#<span class='conf-var'>\0</span>#"g \
pankso@74 40 -e s"#\"\([^']*\)\"#<span class='conf-val'>\0</span>#"g ;;
pankso@75 41 sh)
al@303 42 htmlize | sed \
pascal@176 43 -e s"#^\#\([^']*\)#<span class='sh-comment'>\0</span>#"g \
pascal@91 44 -e s"#\"\([^']*\)\"#<span class='sh-val'>\0</span>#"g ;;
pascal@91 45 diff)
al@303 46 htmlize | sed \
pascal@171 47 -e s"#^-\(.*\).#<span class='diff-rm'>\0</span>#"g \
pascal@171 48 -e s"#^+\(.*\).#<span class='diff-add'>\0</span>#"g \
pascal@171 49 -e s"#@@\(.*\)@@#<span class='diff-at'>@@\1@@</span>#"g ;;
pankso@120 50 activity)
al@303 51 sed -e s"#^\([^']*:\)#<span class='activity-log'>\0</span>#"g ;;
al@303 52 kernel)
al@303 53 htmlize | sed \
al@303 54 -e "s|\([^0-9]\)\(0x[0-9a-f]\+\)|\1<span class='kernel-hex'>\2</span>|g" \
al@303 55 -e "s|^\([^(,\[]\+: \)|<span class='kernel-id'>\0</span>|g" \
al@303 56 -e "s|\(\[[^ ]\+\]\)|<span class='kernel-id2'>\0</span>|g" ;;
al@363 57 lsusb)
al@363 58 htmlize | sed \
al@363 59 -e 's|^[^:]*:[ x0-9a-f^:]*$|<span class="lsusb-t">\0</span>|g' \
al@363 60 -e 's|^Bus.*$|<span class="lsusb-h">\0</span>|g' ;;
al@363 61 lspci)
al@363 62 htmlize | sed \
al@363 63 -e 's|^[0-9a-f].*$|<span class="lspci-t">\0</span>|g' \
al@363 64 -e 's|^ \([^:]*:\)| <span class="lspci-h">\1</span>|g' ;;
al@303 65
pankso@74 66 esac
pankso@53 67 }
pankso@53 68
pascal@99 69 # Remove status and ESC char from tazpkg/tazlito commands output
pascal@99 70 filter_taztools_msgs() {
pascal@412 71 sed -e s'|\\[1;32m|<span style="color: green">|g' \
pascal@412 72 -e s'|\\[1;31m|<span style="color: red">|g' \
pascal@412 73 -e s'|\\[1;33m|<span style="color: yellow">|g' \
pascal@412 74 -e s'|\\[1;34m|<span style="color: blue">|g' \
pascal@412 75 -e s'|\\[1;36m|<span style="color: lightblue">|g' \
pascal@412 76 -e s'|\\[0;39m|</span>|g' \
pascal@412 77 -e ':a;s/^\(.\{0,69\}\)\(\\[[0-9]*G\[\)/\1 \2/;ta' \
pascal@412 78 -e s'/\[^Gm]*.//g'
pascal@99 79 }
pascal@99 80
pankso@51 81 # LOG activities
pankso@51 82 log() {
pankso@96 83 date=$(date "+%Y-%m-%d %H:%M")
pascal@99 84 filter_taztools_msgs | \
pankso@94 85 sed s"#[^']*#$date : \0#" >> $LOG_FILE
pankso@51 86 }
pankso@51 87
pankso@161 88 ok_status() {
pankso@161 89 echo "[<span class='diff-add'> OK </span>]"
pankso@161 90 }
pankso@161 91
pankso@40 92 # Network interface status
pankso@40 93 interface_status() {
pankso@40 94 if ifconfig | grep -A 1 $i | grep -q inet; then
pankso@40 95 ip=`ifconfig | grep -A 1 $i | grep inet | \
pankso@40 96 awk '{ print $2 }' | cut -d ":" -f 2`
al@303 97 echo "<td>$(gettext 'connected')</td><td>$ip</td>"
pascal@136 98 echo "<td><a href='/network.cgi?scan=$ip'>"
pankso@148 99 echo "<img src='$IMAGES/recharge.png' /></a></td>"
pankso@40 100 else
pascal@136 101 echo "<td>----</td><td>----</td><td></td>"
pankso@40 102 fi
pankso@40 103 }
pankso@40 104
pankso@40 105 # Catch network interface (used in summary and network main page)
pankso@40 106 list_network_interfaces() {
pankso@40 107 cat << EOT
al@311 108 <table class="zebra outbox">
al@303 109 <thead>
al@303 110 <tr>
al@303 111 <td>$(gettext 'Interface')</td>
al@303 112 <td>$(gettext 'Name')</td>
al@303 113 <td>$(gettext 'Status')</td>
al@303 114 <td>$(gettext 'IP Address')</td>
al@303 115 <td>$(gettext 'Scan ports')</td>
al@303 116 </tr>
al@303 117 </thead>
al@303 118 <tbody>
pankso@40 119 EOT
pankso@40 120 for i in `ls /sys/class/net`
pankso@40 121 do
pankso@40 122 case $i in
pankso@40 123 eth*)
al@303 124 echo " <tr><td><a href='/network.cgi?eth'>
pankso@41 125 <img src='$IMAGES/ethernet.png' />$i</a></td>
pankso@148 126 <td>Ethernet</td> $(interface_status)</tr>" ;;
pankso@40 127 wlan*|ath*|ra*)
al@303 128 echo " <tr><td><a href='/network.cgi?wifi'>
pankso@41 129 <img src='$IMAGES/wireless.png' />$i</a></td>
pankso@148 130 <td>Wireless</td> $(interface_status)</tr>" ;;
pankso@40 131 lo)
al@303 132 echo " <tr><td><img src='$IMAGES/loopback.png' />$i</td>
pankso@148 133 <td>Loopback</td> $(interface_status)</tr>" ;;
pankso@40 134 *)
pankso@40 135 continue ;;
pankso@40 136 esac
pankso@40 137 done
al@303 138 cat << EOT
al@303 139 </tbody>
al@303 140 </table>
al@303 141 EOT
pankso@40 142 }
pankso@40 143
slaxemulator@232 144 # Get the list of panel styles
slaxemulator@232 145 list_styles() {
slaxemulator@232 146 for style in $PANEL/styles/*
slaxemulator@232 147 do
slaxemulator@232 148 style=$(basename $style)
slaxemulator@232 149 echo "<option value='$style'>$style</option>"
slaxemulator@232 150 done
slaxemulator@232 151 }
slaxemulator@232 152
slaxemulator@232 153 # Get the list of system locales
slaxemulator@232 154 list_locales() {
slaxemulator@232 155 for locale in $(find /usr/share/i18n/locales -type f -name "[a-z][a-z]_[A-Z][A-Z]")
slaxemulator@232 156 do
slaxemulator@232 157 echo "<option value='$locale'>$locale</option>"
slaxemulator@232 158 done
slaxemulator@232 159 }
slaxemulator@232 160
slaxemulator@232 161 # Get the list of console keymaps
slaxemulator@232 162 list_keymaps() {
slaxemulator@232 163 for keymap in /usr/share/kmap/*.kmap
slaxemulator@232 164 do
slaxemulator@232 165 basename $keymap .kmap | sed "s|.*|<option value='&'>&</option>|"
slaxemulator@232 166 done
slaxemulator@232 167 }
slaxemulator@232 168
pankso@15 169 #
pankso@15 170 # xHTML 5 (header and footer skel are from the style)
pankso@15 171 #
pankso@15 172
pankso@44 173 loading_msg() {
pankso@44 174 cat << EOT
pankso@44 175 <script type="text/javascript">
pankso@44 176 document.write('<div id="loading"><img src="/styles/default/images/loader.gif" />$LOADING_MSG</div>');
pankso@44 177 </script>
pankso@44 178 EOT
pankso@44 179 }
pankso@44 180
pankso@15 181 xhtml_header() {
al@292 182 . ${PANEL}$HEADER
pankso@67 183 if [ $DEBUG == "1" ]; then
pascal@81 184 local i
pascal@81 185 local j
pascal@81 186 local x
pascal@81 187 args=""
pascal@81 188 for x in GET POST COOKIE ; do
pascal@81 189 for i in $($x) ; do
pascal@81 190 if [ $($x $i count) -gt 1 ]; then
pascal@81 191 for j in $(seq 1 $($x $i count)); do
pascal@81 192 args="$args $x($i,$j)='$($x $i $j)'"
pascal@81 193 done
pascal@81 194 else
pascal@81 195 args="$args $x($i)='$($x $i)'"
pascal@81 196 fi
pascal@81 197 done
pascal@81 198 done
pascal@81 199 for i in $(FILE); do
pascal@81 200 for j in name size type tmpname ; do
pascal@81 201 args="$args FILE($i,$j)=$(FILE $i $j)"
pascal@81 202 done
pascal@81 203 done
pankso@70 204 cat << EOT
pankso@70 205 <pre class='debug'>
pascal@81 206 QUERY_STRING="$QUERY_STRING"$args
pankso@70 207 </pre>
pankso@70 208 EOT
pankso@67 209 fi
pankso@15 210 }
pankso@15 211
pankso@15 212 xhtml_footer() {
al@292 213 . ${PANEL}$FOOTER
pankso@15 214 }
pankso@15 215
pankso@15 216 table_start() {
al@303 217 echo '<table>'
pankso@15 218 }
pankso@15 219
pankso@282 220 table_end() {
al@303 221 echo '</table>'
pankso@15 222 }
pankso@153 223
pankso@153 224 df_thead() {
pankso@153 225 cat << EOT
pankso@153 226 <thead>
pankso@153 227 <tr>
al@303 228 <td>$(gettext 'Disk')</td>
al@303 229 <td>$(gettext 'Label')</td>
al@303 230 <td>$(gettext 'Type')</td>
al@303 231 <td>$(gettext 'Size')</td>
al@303 232 <td>$(gettext 'Available')</td>
al@303 233 <td>$(gettext 'Used')</td>
al@303 234 <td>$(gettext 'Mount point')</td>
pascal@343 235 <td>UUID</td>
pankso@153 236 </tr>
pankso@153 237 </thead>
pankso@153 238 EOT
pankso@153 239 }
al@318 240
al@318 241 msg() {
al@318 242 msgtype="$1"; shift
al@318 243 case "$msgtype" in
al@318 244 tip) MSG_ICON="$IMAGES/msg-tip.png" ;;
al@318 245 warn|warning) MSG_ICON="$IMAGES/msg-warn.png" ;;
al@318 246 err|error) MSG_ICON="$IMAGES/msg-err.png" ;;
al@318 247 up) MSG_ICON="$IMAGES/msg-up.png" ;;
al@318 248 *) MSG_ICON="$IMAGES/msg.png" ;;
al@318 249 esac
al@318 250 cat << EOT
al@318 251 <section class="box" style="width:50%;margin:0.5em auto;">
al@318 252 <image src="$MSG_ICON" alt="$msgtype" class="float-left" />
al@318 253 $@
al@318 254 </section>
al@318 255 EOT
al@318 256 }
al@318 257
al@318 258 is_installed() {
al@318 259 [ -d "$INSTALLED/$1" ]
al@318 260 }
pascal@364 261
pascal@364 262 blk2h() {
pascal@364 263 echo $1 | awk '{
pascal@364 264 n = $0/2
pascal@364 265 for (i = 1; n > 1024; i++)
pascal@364 266 n /= 1024
pascal@364 267 f = "%1.0f%c"
pascal@373 268 if (n < 100)
pascal@364 269 f = "%1.1f%c"
pascal@364 270 printf f,n,substr("KMGT", i, 1)
pascal@364 271 }'
pascal@364 272 }