namespace eval ::page {
proc clear {} {
array set ::page {
user anonymous
username anonymous
userid anonymous
object ::community
title {}
print 0
redirect {}
layout page
javascript {}
menuNavigation {}
menuCommand {}
menuSearch {}
menuBackground {}
error 0
error_message {}
errorInfo {}
content {}
}
colors
}
proc menu {} {
set result {}
if { [set nav [get ::page(menuNavigation)]] != {} } {
append result \n "
"
}
append result \n "[clock format [clock seconds] -format "%A, %B %d %I:%M%p"]
"
append result \n {
}
if { [set menuCommand [get ::page(menuCommand)]] != {} } {
append result "| ${menuCommand} | "
}
if { [set selectform [::page selectform]] != {} } {
append result "| | ${selectform} | "
} elseif {[set menuSearch [get ::page(menuSearch)]] != {} } {
append result "| | ${menuSearch} | "
}
append result
return $result
}
proc colors {} {
array unset ::colors
array set ::colors [::ColorScheme]
set ::page(menuBackground) "bgcolor=$::colors(bgcolor)"
set ::page(background) "bgcolor=$::colors(maincolor)"
}
proc render {container node method queryDict} {
::page::clear
set ::query {}
set ::query $queryDict
::page query $queryDict
if [catch {::security::urlPrelim} result] {
return $result
}
::page::colors
set result {}
if { $container != $node } {
if { $node == {} } {
set object $container
set method noNodeSelected
} else {
set object [$object /node $node]
if { $method == {} } {
set method [$object defaultMethod]
}
set method [$object htmlMethod $method]
}
} else {
set object $node
}
::page object $object
::page container $container
set errstate [catch {$object $method $queryDict} objresult]
if { $errstate == 2 } { set errstate 0 }
if { $errstate } {
::page layout error
::page errorInfo $::errorInfo
}
::page content $objresult
if { [::page redirect] != {} } {
::page layout redirect
}
::page selectform {}
::page menuNavigation [menuNavigation $container $object]
::page menuCommand [menuCommand $container $object $method]
::page menuSearch [menuSearch $container $object]
puts [list pageRender $container $object $method $errstate [::page layout]]
set result [subst [::html-style::template [::page layout]]]
::security::urlPostlim
if [thanatos knock] {
thanatos cleanup
}
return $result
}
proc menuCommand {container object currentmethod} {
global colors
set bottomMenu {}
if { $object != {} } {
set cname [$object globalName]
set containerUrl [$container ModuleUrl]
set menulist [$object menuMethods]
if { $container == $object } {
foreach method $menulist {
if { $currentmethod == $method } {
append bottommenu " $method "
} else {
append bottommenu " [::html-style::button $method ${containerUrl}?node=${cname}&method=${method}] "
}
}
} else {
foreach {url method} $menulist {
if { [get currentMethod] == $method } {
append bottommenu " $method "
} else {
append bottommenu " [::html-style::button $method ${containerUrl}${url}] "
}
}
}
}
return $bottommenu
}
proc menuNavigation {container object} {
global colors
set leftmenu ""
set row 0
set sectionlist {}
set sectiondata(Record) {}
ladd sectionlist Site
lappend sectiondata(Site) {Home} /home {}
lappend sectiondata(Site) {Search} /home/search {}
foreach {section url label} [GlobalLinks] {
ladd sectionlist $section
lappend sectiondata($section) $label $url {}
}
if { $object != {} && $object != $container } {
###
# Build the leftmenu
####
foreach {section url label} [$object menuNavigation] {
ladd sectionlist $section
lappend sectiondata($section) $label $url {}
}
}
lappend sectiondata(Site) {Test} /home {Test /home {Test /home {}}} {
} {} {} {Log Out} /login/logout {}
lappend sectiondata(Site) {
} {} {} {Log Out} /login/logout {}
set url_list {}
set mresult {}
foreach sect $sectionlist {
lappend mresult $sect {} $sectiondata($sect)
}
return [::html-style::dropmenu $mresult]
}
proc menuSearch {container object} {
set bottommenu {}
if { $object != {} && $object != $container } {
set gname [$object NodeId]
append bottommenu [$container menuSearchForm $gname]
}
return $bottommenu
}
proc GlobalLinks {} {
lappend result Site /home {Home} Site /home/search {Search}
#set uobj [/node [CurrentUser]]
set user [CurrentUser]
set ucon [tdif Container users]
lappend result Site [$ucon nodeUrl $user] [$ucon nodeSummary $user]
foreach node [get ::global_nodes] {
set cobj [tdif Container $node]
set url [$cobj nodeUrl $node]
set label [$cobj nodeSummary $node]
if { $label == {} } {
set label $node
}
lappend result Databases $url $label
}
foreach {section url label} [community GlobalLinks] {
lappend result $section $url $label
}
}
}
proc ::page {field {newvalue NULL}} {
if { $newvalue == "NULL" } {
return [lindex [array get ::page $field] 1]
}
set ::page($field) $newvalue
return $newvalue
}