tazpanel annotate lib/libtazpanel @ rev 419

Bunch of changes. Development in progress, please note it have few known bugs.
author Aleksej Bobylev <al.bobylev@gmail.com>
date Tue Mar 24 03:39:08 2015 +0200 (2015-03-24)
parents f3a7fb3d92ec
children 2ce8e949aef9
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 #
al@419 5 # Copyright (C) 2011-2015 SliTaz GNU/Linux - BSD License
al@419 6 #
al@419 7
pankso@15 8
pascal@377 9 [ "$(id -un)" == "${REMOTE_USER:-root}" ] || exec su -c "$(realpath $0) $@" $REMOTE_USER
pascal@376 10
al@419 11
pascal@81 12 # Get parameters with GET, POST and FILE functions
al@419 13
mojo@310 14 . /usr/lib/slitaz/httphelper
pascal@81 15
al@419 16
pankso@109 17 # I18n
al@419 18
pankso@286 19 . /etc/locale.conf
pankso@40 20 . /usr/bin/gettext.sh
pankso@40 21 TEXTDOMAIN='tazpanel'
pankso@286 22 export TEXTDOMAIN LANG LC_ALL
pankso@40 23
al@419 24
pankso@15 25 # We need a config file first
al@419 26
pankso@15 27 get_config() {
al@419 28 CONFIG='/etc/slitaz/tazpanel.conf'
al@419 29 if [ -f "$CONFIG" ]; then
al@419 30 . $CONFIG
al@419 31 else
al@419 32 echo "No config file found: $CONFIG"
pankso@15 33 exit 1
al@419 34 fi
pankso@15 35 }
pankso@15 36
al@419 37
al@303 38 # Display < > &
al@419 39
al@303 40 htmlize() {
al@303 41 sed -e 's|\&|\&amp;|g; s|<|\&lt;|g; s|>|\&gt;|g'
al@303 42 }
al@303 43
al@419 44
pankso@74 45 # Syntax highlighting for config file and SHell scripts
al@419 46
pankso@74 47 syntax_highlighter() {
pankso@74 48 case $1 in
pankso@74 49 conf)
al@303 50 htmlize | sed \
al@419 51 -e 's|^\([ \t]*[A-Za-z0-9_][A-Za-z0-9_]*\)\(="*.*\)|<span class="conf-var">\1</span><span class="conf-val">\2</span>|g' \
al@419 52 -e 's|^[ \t]*#.*|<span class="conf-comment">\0</span>|g' ;;
al@419 53 #-e s"#^\#\([^']*\)#<span class='conf-comment'>\0</span>#"g \
al@419 54 #-e s"#^[A-Z]\([^']*\)=#<span class='conf-var'>\0</span>#"g \
al@419 55 #-e s"#^[a-z]\([^']*\)#<span class='conf-var'>\0</span>#"g \
al@419 56 #-e s"#[\"']\([^']*\)[\"']#<span class='conf-val'>\0</span>#"g ;;
pankso@75 57 sh)
al@303 58 htmlize | sed \
al@419 59 -e 's|^\([ \t]*[A-Za-z0-9_][A-Za-z0-9_]*\)\(="*.*\)|<span class="sh-var">\1</span><span class="sh-val">\2</span>|g' \
al@419 60 -e 's|^#.*|<span class="sh-comment">\0</span>|g' ;;
al@419 61 #-e s"#^\#\([^']*\)#<span class='sh-comment'>\0</span>#"g \
al@419 62 #-e s"#\"\([^']*\)\"#<span class='sh-val'>\0</span>#"g ;;
pascal@91 63 diff)
al@303 64 htmlize | sed \
al@419 65 -e 's|^-.*|<span class="diff-rm">\0</span>|g' \
al@419 66 -e 's|^+.*|<span class="diff-add">\0</span>|g' \
al@419 67 -e 's|^@.*|<span class="diff-at">\0</span>|g' ;;
pankso@120 68 activity)
al@419 69 # realize lazy quantification
al@419 70 sed -e "s|: |ⓒ|; s|^\(.*\)ⓒ|<span class='activity-log'>\1:</span> |" ;;
al@303 71 kernel)
al@419 72 # line with "ⓒ": realize lazy quantification
al@303 73 htmlize | sed \
al@303 74 -e "s|\([^0-9]\)\(0x[0-9a-f]\+\)|\1<span class='kernel-hex'>\2</span>|g" \
al@419 75 -e "s|: |ⓒ|; s|^\(.*\)ⓒ|<span class='kernel-id'>\1:</span> |" \
al@419 76 -e "s|\(\[[^ ]\+\]\)|<span class='kernel-id2'>\0</span>|g" \
al@419 77 -e "s|Call Trace:|<span class='kernel-trace'>\0</span>|" ;;
al@363 78 lsusb)
al@363 79 htmlize | sed \
al@363 80 -e 's|^[^:]*:[ x0-9a-f^:]*$|<span class="lsusb-t">\0</span>|g' \
al@363 81 -e 's|^Bus.*$|<span class="lsusb-h">\0</span>|g' ;;
al@363 82 lspci)
al@363 83 htmlize | sed \
al@363 84 -e 's|^[0-9a-f].*$|<span class="lspci-t">\0</span>|g' \
al@363 85 -e 's|^ \([^:]*:\)| <span class="lspci-h">\1</span>|g' ;;
al@419 86 xlog)
al@419 87 htmlize | sed \
al@419 88 -e 's|^[^]]*]|<span class="xlog xlog-timestamp">\0</span>|' \
al@419 89 -e 's|(--)|<span class="xlog xlog-probed" title="probed">\0</span>|' \
al@419 90 -e 's|(\*\*)|<span class="xlog xlog-config" title="from config file">\0</span>|' \
al@419 91 -e 's|(==)|<span class="xlog xlog-default" title="default setting">\0</span>|' \
al@419 92 -e 's|(++)|<span class="xlog xlog-cmdline" title="from command line">\0</span>|' \
al@419 93 -e 's|(!!)|<span class="xlog xlog-notice" title="notice">\0</span>|' \
al@419 94 -e 's|(II)|<span class="xlog xlog-info" title="informational">\0</span>|' \
al@419 95 -e 's|(WW)|<span class="xlog xlog-warn" title="warning">\0</span>|' \
al@419 96 -e 's|(EE)|<span class="xlog xlog-error" title="error">\0</span>|' \
al@419 97 -e 's|(NI)|<span class="xlog xlog-ni" title="not implemented">\0</span>|' \
al@419 98 -e 's|(??)|<span class="xlog xlog-unknown" title="unknown">\0</span>|' \
al@419 99 ;;
pankso@74 100 esac
pankso@53 101 }
pankso@53 102
al@419 103
pascal@99 104 # Remove status and ESC char from tazpkg/tazlito commands output
al@419 105
pascal@99 106 filter_taztools_msgs() {
al@419 107 sed \
al@419 108 -e 's|\\[0m|</span>|g' \
al@419 109 -e 's|\\[0;39m|</span>|g' \
al@419 110 -e 's|\\[0*\([0-7]*\);\([0-7]*\)m|<span class="color\1 color\2">|g' \
pascal@412 111 -e ':a;s/^\(.\{0,69\}\)\(\\[[0-9]*G\[\)/\1 \2/;ta' \
al@419 112 -e ':b;s|^\([^\]*\)\\[\([0-9]*\)G|<span style="display:inline-block;width:\2ex">\1</span>|;tb' \
al@419 113 -e 's/\[^Gm]*.//g'
pascal@99 114 }
pascal@99 115
al@419 116
pankso@51 117 # LOG activities
al@419 118
pankso@51 119 log() {
al@419 120 date=$(date "+%F %R")
al@419 121 filter_taztools_msgs | sed "s|[^']*|$date : \0|" >> $LOG_FILE
pankso@51 122 }
pankso@51 123
al@419 124
pankso@161 125 ok_status() {
al@419 126 echo '[<span class="diff-add"> OK </span>]'
pankso@161 127 }
pankso@161 128
al@419 129
pankso@40 130 # Network interface status
al@419 131
pankso@40 132 interface_status() {
al@419 133 if ifconfig | grep -A1 $1 | grep -q inet; then
al@419 134 ip=$(ifconfig | grep -A1 $1 | grep inet | awk '{ print $2 }' | cut -d: -f2)
al@419 135 cat <<EOT
al@419 136 <td>$(gettext 'connected')</td>
al@419 137 <td>$ip</td>
al@419 138 <td><a data-icon="scan" href='network.cgi?scan=$ip&amp;back=network.cgi'>$(gettext 'Scan')</a></td>
al@419 139 EOT
pankso@40 140 else
pascal@136 141 echo "<td>----</td><td>----</td><td></td>"
pankso@40 142 fi
pankso@40 143 }
pankso@40 144
al@419 145
pankso@40 146 # Catch network interface (used in summary and network main page)
al@419 147
pankso@40 148 list_network_interfaces() {
al@419 149 cat <<EOT
al@419 150 <table class="wide zebra center">
al@303 151 <thead>
al@303 152 <tr>
al@303 153 <td>$(gettext 'Interface')</td>
al@303 154 <td>$(gettext 'Name')</td>
al@303 155 <td>$(gettext 'Status')</td>
al@303 156 <td>$(gettext 'IP Address')</td>
al@303 157 <td>$(gettext 'Scan ports')</td>
al@303 158 </tr>
al@303 159 </thead>
al@303 160 <tbody>
pankso@40 161 EOT
al@419 162 for i in $(ls /sys/class/net); do
pankso@40 163 case $i in
pankso@40 164 eth*)
al@419 165 echo " <tr><td><a data-icon='eth' href='/network.cgi?eth'>$i</a></td>
al@419 166 <td>Ethernet</td> $(interface_status $i)</tr>" ;;
pankso@40 167 wlan*|ath*|ra*)
al@419 168 echo " <tr><td><a data-icon='wifi' href='/network.cgi?wifi'>$i</a></td>
al@419 169 <td>Wireless</td> $(interface_status $i)</tr>" ;;
pankso@40 170 lo)
al@419 171 echo " <tr><td><span data-icon='loopback'>$i</span></td>
al@419 172 <td>Loopback</td> $(interface_status $i)</tr>" ;;
pankso@40 173 *)
pankso@40 174 continue ;;
pankso@40 175 esac
pankso@40 176 done
al@419 177 cat <<EOT
al@303 178 </tbody>
al@303 179 </table>
al@303 180 EOT
pankso@40 181 }
pankso@40 182
al@419 183
slaxemulator@232 184 # Get the list of panel styles
al@419 185
slaxemulator@232 186 list_styles() {
slaxemulator@232 187 for style in $PANEL/styles/*
slaxemulator@232 188 do
slaxemulator@232 189 style=$(basename $style)
slaxemulator@232 190 echo "<option value='$style'>$style</option>"
slaxemulator@232 191 done
slaxemulator@232 192 }
slaxemulator@232 193
al@419 194
slaxemulator@232 195 # Get the list of system locales
al@419 196
slaxemulator@232 197 list_locales() {
slaxemulator@232 198 for locale in $(find /usr/share/i18n/locales -type f -name "[a-z][a-z]_[A-Z][A-Z]")
slaxemulator@232 199 do
slaxemulator@232 200 echo "<option value='$locale'>$locale</option>"
slaxemulator@232 201 done
slaxemulator@232 202 }
slaxemulator@232 203
al@419 204
slaxemulator@232 205 # Get the list of console keymaps
al@419 206
slaxemulator@232 207 list_keymaps() {
al@419 208 for keymap in /usr/share/kmap/*.kmap; do
slaxemulator@232 209 basename $keymap .kmap | sed "s|.*|<option value='&'>&</option>|"
slaxemulator@232 210 done
slaxemulator@232 211 }
slaxemulator@232 212
al@419 213
pankso@15 214 #
pankso@15 215 # xHTML 5 (header and footer skel are from the style)
pankso@15 216 #
pankso@15 217
pankso@44 218 loading_msg() {
al@419 219 local MSG=${1:-$LOADING_MSG}
al@419 220 cat <<EOT
al@419 221 <div id="loading"><img src="/styles/default/images/loader.gif"/>$MSG</div>
pankso@44 222 EOT
pankso@44 223 }
pankso@44 224
al@419 225
pankso@15 226 xhtml_header() {
al@292 227 . ${PANEL}$HEADER
pankso@67 228 if [ $DEBUG == "1" ]; then
pascal@81 229 local i
pascal@81 230 local j
pascal@81 231 local x
pascal@81 232 args=""
al@419 233 for x in GET POST COOKIE; do
al@419 234 for i in $($x); do
pascal@81 235 if [ $($x $i count) -gt 1 ]; then
pascal@81 236 for j in $(seq 1 $($x $i count)); do
pascal@81 237 args="$args $x($i,$j)='$($x $i $j)'"
pascal@81 238 done
pascal@81 239 else
pascal@81 240 args="$args $x($i)='$($x $i)'"
pascal@81 241 fi
pascal@81 242 done
pascal@81 243 done
pascal@81 244 for i in $(FILE); do
al@419 245 for j in name size type tmpname; do
pascal@81 246 args="$args FILE($i,$j)=$(FILE $i $j)"
pascal@81 247 done
pascal@81 248 done
al@419 249 cat <<EOT
al@419 250 <pre class="debug">
pascal@81 251 QUERY_STRING="$QUERY_STRING"$args
pankso@70 252 </pre>
pankso@70 253 EOT
pankso@67 254 fi
pankso@15 255 }
pankso@15 256
al@419 257
pankso@15 258 xhtml_footer() {
al@292 259 . ${PANEL}$FOOTER
pankso@15 260 }
pankso@15 261
al@419 262
pankso@15 263 table_start() {
al@303 264 echo '<table>'
pankso@15 265 }
pankso@15 266
al@419 267
pankso@282 268 table_end() {
al@303 269 echo '</table>'
pankso@15 270 }
pankso@153 271
al@419 272
pankso@153 273 df_thead() {
al@419 274 cat <<EOT
pankso@153 275 <thead>
pankso@153 276 <tr>
al@303 277 <td>$(gettext 'Disk')</td>
al@303 278 <td>$(gettext 'Label')</td>
al@303 279 <td>$(gettext 'Type')</td>
al@303 280 <td>$(gettext 'Size')</td>
al@303 281 <td>$(gettext 'Available')</td>
al@303 282 <td>$(gettext 'Used')</td>
al@303 283 <td>$(gettext 'Mount point')</td>
pascal@343 284 <td>UUID</td>
pankso@153 285 </tr>
pankso@153 286 </thead>
pankso@153 287 EOT
pankso@153 288 }
al@318 289
al@419 290
al@318 291 msg() {
al@318 292 msgtype="$1"; shift
al@318 293 case "$msgtype" in
al@318 294 tip) MSG_ICON="$IMAGES/msg-tip.png" ;;
al@318 295 warn|warning) MSG_ICON="$IMAGES/msg-warn.png" ;;
al@318 296 err|error) MSG_ICON="$IMAGES/msg-err.png" ;;
al@318 297 up) MSG_ICON="$IMAGES/msg-up.png" ;;
al@318 298 *) MSG_ICON="$IMAGES/msg.png" ;;
al@318 299 esac
al@419 300 cat <<EOT
al@318 301 <section class="box" style="width:50%;margin:0.5em auto;">
al@318 302 <image src="$MSG_ICON" alt="$msgtype" class="float-left" />
al@318 303 $@
al@318 304 </section>
al@318 305 EOT
al@318 306 }
al@318 307
al@419 308
al@318 309 is_installed() {
al@318 310 [ -d "$INSTALLED/$1" ]
al@318 311 }
pascal@364 312
al@419 313
pascal@364 314 blk2h() {
pascal@364 315 echo $1 | awk '{
pascal@364 316 n = $0/2
pascal@364 317 for (i = 1; n > 1024; i++)
pascal@364 318 n /= 1024
pascal@364 319 f = "%1.0f%c"
pascal@373 320 if (n < 100)
pascal@364 321 f = "%1.1f%c"
pascal@364 322 printf f,n,substr("KMGT", i, 1)
pascal@364 323 }'
pascal@364 324 }
al@419 325
al@419 326
al@419 327 # Show "Back" button
al@419 328
al@419 329 back_button() {
al@419 330 local URL="$1" default_caption="$(gettext 'Back')"
al@419 331 local caption="${2:-$default_caption}" icon="${3:-back}"
al@419 332
al@419 333 if [ -n "$1" ]; then
al@419 334 printf '<form action="%s" method="post"><button data-icon="%s">%s</button></form>' "$URL" "$icon" "$caption"
al@419 335 fi
al@419 336 }
al@419 337
al@419 338
al@419 339 # Mark select option as checked
al@419 340
al@419 341 selected() {
al@419 342 [ "$1" == "$2" ] && echo -n 'selected'
al@419 343 }