webif/webif/html/settings/settings.jim

136 lines
2.9 KiB
Plaintext
Executable File

#!/mod/bin/jimsh
package require cgi
source /mod/webif/lib/setup
require settings.class plugin system.class spinner.class
cgi_input
httpheader
set modules {general auto tvdb web epg network advanced}
set settings [settings new]
if {![dict exists $env SCRIPT_NAME]} { set env(SCRIPT_NAME) "" }
proc _handle_update {class var old text {trim 1}} {
global _cgi
global settings
if {[dict exists $_cgi $var]} {
set new [dict get $_cgi $var]
if {$trim} {
set new [string trim $new]
}
if {$new == $old} {
puts "$text unchanged."
} elseif {[string is $class -strict $new]} {
$settings $var $new
puts "$text updated."
} else {
puts "Invalid value for $var."
}
exit
}
}
proc handle_int_update {var old {text "Value"} {trim 1}} {
_handle_update digit $var $old $text $trim
}
proc handle_str_update {var old {text "Value"} {class alnum} {trim 1}} {
_handle_update $class $var $old $text $trim
}
######################################################################
# Settings Modules
set moddir /mod/webif/html/settings/modules
foreach mod $modules {
if {[file exists "$moddir/$mod/.disabled"]} continue
if {[catch {source "$moddir/$mod/init.hook"} msg]} {
puts "ERROR: $msg"
}
}
######################################################################
# Web Page
jqplugin form actual iphone-style-checkboxes touchpunch
jscss settings.js
header
[spinner new {
text "Loading Settings..."
size "1.2em"
style "margin: 1em;"
}] start
puts {
<div id=accordion class=hidden>
}
proc setting_toggle {name attr checked {invert 0} {val 0}} {
puts -nonewline "
<tr>
<th class=key>$name</th>
<td><input class=setting_toggle type=checkbox value=yes"
if {$checked} { puts -nonewline " checked" }
puts -nonewline " attr=$attr"
if {$invert} { puts -nonewline " invert=1" }
if {$val} { puts -nonewline " useval=1" }
puts -nonewline ">
<div id=${attr}_output></div>
</td>
</tr>
"
}
proc setting_number {name descr val} {
puts -nonewline "
<tr>
<form class=auto id=${name} method=get action=$::env(SCRIPT_NAME)>
<th class=key>$descr</th>
<td>
<input name=${name} size=5 type=number
class=\"text ui-widget-content ui-corner-all\"
maxlength=10 value=\"$val\">
<small>
<input value=\"set\" type=submit>
</small>
<div id=${name}_output></div>
</td>
</form>
</tr>
"
}
######################################################################
# Settings Modules
foreach mod $modules {
if {[file exists "$moddir/$mod/.disabled"]} continue
if {[catch {source "$moddir/$mod/settings.hook"} msg]} {
puts "ERROR: $msg"
}
}
######################################################################
# Plugins
proc plugin_callback {plugin hook} {
puts "<h4>Settings for <i>[file tail $plugin]</i> package</h4>"
puts "<div class=pluginsettings>"
if {[catch {uplevel source "$plugin/$hook"} msg]} {
puts "ERROR: $msg"
}
puts "</div>"
}
eval_plugins settings 0 plugin_callback
puts "</div>"
footer