webif/webif/lib/setup

178 lines
4.2 KiB
Plaintext

if {![exists -proc require]} {
proc require {args} {{done {}}} {
foreach file $args {
if {$file ni $done} {
lappend done $file
uplevel source "/mod/webif/lib/$file"
}
}
}
require system.class
set ::mws::headerdone 0
set ::mws::js {}
set ::mws::css {}
set ::mws::q "[system pkgver]"
require fileops overrides utils
# Jim 0.75 removes legacy 'case'; some plugins still use it.
# This will fix the simple cases.
alias case switch
proc httpredirect {url {extra ""}} {
puts -nonewline "Status: 302 redirect\r\n"
puts -nonewline "Location: $url\r\n"
if {$extra ne ""} {
puts -nonewline "$extra\r\n"
}
puts -nonewline "\r\n"
puts "Redirecting to $url"
exit
}
proc httpheader {{type "text/html"} {cache 0} {extra {}}} {{done 0}} {
if {$done} return
if {!$cache} {
set hdr [dict create \
"Content-Type" "$type; charset=\"UTF-8\"; no-cache" \
"Expires" "-1" \
"Connection" "close" \
"Pragma" "no-cache" \
"Cache-Control" "no-cache"]
} else {
set hdr [dict create "Content-Type" "$type; charset=\"UTF-8\""]
}
if {![catch {dict size $extra}]} {
set hdr [dict merge $hdr $extra]
set extra ""
}
dict for {k v} $hdr {
puts -nonewline "$k: $v\r\n"
}
if {$extra ne ""} { puts -nonewline "$extra" }
puts -nonewline "\r\n"
set done 1
}
proc setpagetag {name} {
set ::mws::pagetag $name
}
proc ::mws::setpagetitle {} {
global env
if {[info exists ::mws::pagetitle]} return
if {![dict exists $env REQUEST_URI]} {
set ::mws::pagetitle "CLI"
return
}
if {![info exists ::mws::pagetag]} {
switch -glob -- $env(REQUEST_URI) {
"/sched/*" { set ::mws::pagetag "Schedule" }
"/diag/queue/*" { set ::mws::pagetag "Queued Tasks" }
"/diag/*" { set ::mws::pagetag "Diagnostics" }
"/browse/*" { set ::mws::pagetag "Browse Files" }
"/xepg/*" { set ::mws::pagetag "EPG" }
"/settings/*" { set ::mws::pagetag "Settings" }
"/services/*" { set ::mws::pagetag "Services" }
"/pkg/*" { set ::mws::pagetag "Packages" }
"/cgi-bin/*" { set ::mws::pagetag "" }
default {
set _xpath [split $env(REQUEST_URI) /]
if {[llength $_xpath] > 2} {
set ::mws::pagetag [string totitle [\
lindex $_xpath 1]]
} else {
set ::mws::pagetag ""
}
}
}
}
set ::mws::pagetitle "Humax [system model] Fox T2 ([\
system hostname])"
if {$::mws::pagetag ne ""} {
append ::mws::pagetitle " - $::mws::pagetag"
}
}
proc header {{type "text/html"} {cache 0}} {
httpheader $type $cache
::mws::setpagetitle
uplevel source /mod/webif/html/lib/header.jim
incr ::mws::headerdone
}
proc noheader {{type "text/html"} {cache 0}} {
httpheader $type $cache
uplevel source /mod/webif/html/lib/noheader.jim
incr ::mws::headerdone
}
proc footer {} {
uplevel source /mod/webif/html/lib/footer.jim
}
proc mheader {} {
uplevel source /mod/webif/html/m/lib/header.jim
}
proc mfooter {} {
uplevel source /mod/webif/html/m/lib/footer.jim
}
proc ::mws::_css {file} {
if {$::mws::headerdone} {
puts "<link href=\"$file?$::mws::q\" rel=stylesheet type=text/css />"
} else {
lappend ::mws::css $file
}
}
proc ::mws::_js {file} {
if {$::mws::headerdone} {
puts "<script type=text/javascript src=\"$file?$::mws::q\"></script>"
} else {
lappend ::mws::js $file
}
}
proc ::mws::emit_jscss {} {
foreach js $::mws::js { ::mws::_js $js }
foreach css $::mws::css { ::mws::_css $css }
}
proc ::mws::_jqplugin_sort {a b} {
return $([string length $a] - [string length $b])
}
proc jqplugin {args} {{done {}}} {
foreach name $args {
if {$name in $done} continue
lappend done $name
set dir "/mod/webif/html/lib/jquery.plugin/$name"
if {![file isdirectory $dir]} {
error "Unknown JQ Plugin - '$name'"
}
foreach file [lsort -command ::mws::_jqplugin_sort [\
glob -nocomplain "$dir/*.js"]] {
set file [join [lrange [split $file /] 4 end] /]
::mws::_js "/$file"
}
foreach file [lsort -command ::mws::_jqplugin_sort [\
glob -nocomplain "$dir/*.css"]] {
set file [join [lrange [split $file /] 4 end] /]
::mws::_css "/$file"
}
}
}
proc jscss {{js ""} {css ""}} {
foreach j $js { ::mws::_js $j }
foreach c $css { ::mws::_css $c }
}
}