Index: openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/xowiki/tcl/Attic/xowiki-portlet-procs.tcl,v diff -u -r1.10 -r1.11 --- openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 3 Jan 2007 23:13:39 -0000 1.10 +++ openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 6 Jan 2007 03:27:07 -0000 1.11 @@ -504,49 +504,63 @@ toc instproc position {} {return [my set navigation(position)]} toc instproc page_name {p} {return [my set page_name($p)]} - toc instproc get_nodes {open_page package_id expand_all} { + toc instproc get_nodes {open_page package_id expand_all remove_levels} { my instvar navigation page_name book_mode array set navigation {parent "" position 0 current ""} set js "" set node() root set node_cnt 0 + set folder_id [$package_id set folder_id] - db_foreach get_nodes "select page_id, page_order, name, title \ + set pages [::xowiki::Page instantiate_objects -sql "select page_id, page_order, name, title \ from xowiki_page_live_revision p \ where parent_id = $folder_id \ - and not page_order is NULL order by page_order asc" { - set label "$page_order $title" - set jsobj obj[set node($page_order) tmpNode[incr node_cnt]] - set page_name($node_cnt) $name - if {![regexp {^(.*)[.]([^.]+)} $page_order _ parent]} {set parent ""} + and not page_order is NULL"] + $pages mixin add ::xo::OrderedComposite::IndexCompare + $pages orderby page_order - if {$book_mode} { - regexp {^.*:([^:]+)$} $name _ anchor - set href [$package_id url]#$anchor - } else { - set href [$package_id pretty_link $name] - } + foreach o [$pages children] { + $o instvar page_order title page_id name title - if {$expand_all} { - set expand "true" - } else { - set expand [expr {$open_page eq $name} ? "true" : "false"] - if {$expand} { - set navigation(parent) $parent - set navigation(position) $node_cnt - set navigation(current) $page_order - for {set p $parent} {$p ne ""} {} { - append js "$node($p).expand();\n" - if {![regexp {^(.*)[.]([^.]+)} $p _ p]} {set p ""} - } - } - } - set parent_node [expr {[info exists node($parent)] ? $node($parent) : "root"}] - append js \ - "var $jsobj = {label: \"$label\", href:\"$href\"};" \ - "var $node($page_order) = new YAHOO.widget.TextNode($jsobj, $parent_node, $expand);\n" - } + my log "o: $page_order" + set displayed_page_order $page_order + for {set i 0} {$i < $remove_levels} {incr i} { + regsub {^[^.]+[.]} $displayed_page_order "" displayed_page_order + } + set label "$displayed_page_order $title" + set jsobj obj[set node($page_order) tmpNode[incr node_cnt]] + + set page_name($node_cnt) $name + if {![regexp {^(.*)[.]([^.]+)} $page_order _ parent]} {set parent ""} + + if {$book_mode} { + regexp {^.*:([^:]+)$} $name _ anchor + set href [$package_id url]#$anchor + } else { + set href [$package_id pretty_link $name] + } + + if {$expand_all} { + set expand "true" + } else { + set expand [expr {$open_page eq $name} ? "true" : "false"] + if {$expand} { + set navigation(parent) $parent + set navigation(position) $node_cnt + set navigation(current) $page_order + for {set p $parent} {$p ne ""} {} { + if {![info exists node($p)]} break + append js "$node($p).expand();\n" + if {![regexp {^(.*)[.]([^.]+)} $p _ p]} {set p ""} + } + } + } + set parent_node [expr {[info exists node($parent)] ? $node($parent) : "root"}] + append js \ + "var $jsobj = {label: \"$label\", href:\"$href\"};" \ + "var $node($page_order) = new YAHOO.widget.TextNode($jsobj, $parent_node, $expand);\n" + } set navigation(count) $node_cnt my log "--COUNT=$node_cnt" return $js @@ -558,6 +572,7 @@ {-open_page ""} {-book_mode false} {-expand_all false} + {-remove_levels 0} } my get_parameters switch -- $style { @@ -574,7 +589,7 @@ if {!$book_mode} { my set book_mode [[my set __including_page] exists __is_book_page] } - set js_tree_cmds [my get_nodes $open_page $package_id $expand_all] + set js_tree_cmds [my get_nodes $open_page $package_id $expand_all $remove_levels] return "