Class ::xowiki::includelet::toc
::xowiki::includelet::toc
create ... \
[ -__decoration (default "plain") ] \
[ -id id ] \
[ -parameter_declaration (default "
{-style ""}
{-renderer ""}
{-open_page ""}
{-book_mode false}
{-folder_mode false}
{-ajax false}
{-expand_all false}
{-remove_levels 0}
{-category_id}
{-locale ""}
{-orderby ""}
{-source ""}
{-range ""}
{-allow_reorder ""}
{-include_in_foldertree "true"}
{-CSSclass_top_ul ""}
{-CSSclass_ul ""}
") ]
Defined in Class Relations
- class: ::xowiki::IncludeletClass
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- superclass: ::xowiki::Includelet
![[i]](/resources/acs-subsite/ZoomIn16.gif)
- instmixin: ::xowiki::includelet::PageReorderSupport
![[i]](/resources/acs-subsite/ZoomIn16.gif)
::xowiki::IncludeletClass create ::xowiki::includelet::toc \
-superclass ::xowiki::Includelet \
-instmixin ::xowiki::includelet::PageReorderSupport
Methods (to be applied on instances)
<instance of xowiki::includelet::toc
> build_toc
- Testcases:
-
includelet_toc, xowiki
:get_parameters
array set :navigation {parent "" position 0 current ""}
set extra_where_clause ""
if {[info exists :category_id]} {
lassign [:category_clause ${:category_id}] cnames extra_where_clause
}
lassign [::xowiki::Includelet locale_clause -revisions p -items p $package_id $locale] locale locale_clause
set order_direction asc
set order_attribute page_order
if {$source ne ""} {
:get_page_order -source $source
set page_order_clause "and name in ([ns_dbquotelist [array names :page_order]])"
set page_order_att ""
} elseif {$orderby ne ""} {
lassign [split $orderby ,] order_attribute order_direction
if {$order_attribute ni {page_order title}} {
ns_log warning "toc includelet: ignore invalid page order '$orderby'"
set order_attribute page_order
set order_direction asc
set page_order_att "page_order,"
set page_order_clause "and not page_order is NULL"
} else {
set page_order_att "page_order,"
set page_order_clause ""
append extra_where_clause " and page_id != [${:__including_page} revision_id]"
}
} else {
set page_order_clause "and not page_order is NULL"
set page_order_att "page_order,"
}
if {$folder_mode} {
set parent_id [${:__including_page} item_id]
} else {
set parent_id [${:__including_page} parent_id]
}
set sql [::xo::dc select -vars "page_id, $page_order_att name, title" -from "xowiki_page_live_revision p" -where "parent_id = :parent_id $page_order_clause $extra_where_clause $locale_clause"]
set pages [::xowiki::Page instantiate_objects -sql $sql]
$pages orderby -order [expr {$order_direction in {asc ""} ? "increasing" : "decreasing"}] -type [ad_decode $order_attribute page_order index dictionary] $order_attribute
if {$range ne "" && $page_order_att ne ""} {
lassign [split $range -] from to
foreach p [$pages children] {
if {[$pages __value_compare [$p set page_order] $from 0] == -1
|| [$pages __value_compare [$p set page_order] $to 0] > 0} {
$pages delete $p
}
}
}
if {$source ne ""} {
foreach p [$pages children] {
$p set page_order [set :page_order([$p set name])]
}
}
return $pages <instance of xowiki::includelet::toc
> initialize
- Testcases:
-
includelet_toc, xowiki
:get_parameters
array set :navigation {count 0 position 0 current ""}
set list_mode 0
dict set :render_properties CSSclass_ul $CSSclass_ul
dict set :render_properties CSSclass_top_ul $CSSclass_top_ul
if {$renderer eq ""} {
switch -- $style {
"menu" {set renderer yuitree}
"folders" {set renderer yuitree}
"yuitree" {set renderer "yuitree"}
"list" {set style ""; set list_mode 1; set renderer list}
"none" {set style ""; set renderer none}
"default" {set style ""; set list_mode 1; set renderer list
if {$CSSclass_ul eq ""} {
dict set :render_properties CSSclass_ul xowiki-tree
}
}
}
set :use_tree_renderer 0
} else {
set :use_tree_renderer 1
}
set :include_in_foldertree $include_in_foldertree
set :renderer $renderer
set :style $style
set :list_mode $list_mode
set :book_mode $book_mode <instance of xowiki::includelet::toc
> render
- Testcases:
-
includelet_toc, xowiki
:get_parameters
if {![info exists :id]} {
set :id [::xowiki::Includelet html_id [self]]
}
if {[info exists category_id]} {
set :category_id $category_id
}
set pages [:build_toc $package_id $locale $source $range]
:build_navigation $pages
if {[nsf::is object ::__xowiki__MenuBar] && ${:include_in_foldertree}} {
::__xowiki__MenuBar additional_sub_menu -kind folder -pages $pages -owner [self]
}
if {${:renderer} eq "none"} {
} elseif {${:use_tree_renderer}} {
return [:render_tree -full 1 $pages]
} elseif {${:list_mode}} {
return [:render_list $pages]
} else {
return [:render_yui_list -full true $pages]
} <instance of xowiki::includelet::toc
> render_list
- Testcases:
-
includelet_toc, xowiki
:get_parameters
if {$open_page ne ""} {
set allow_reorder ""
} else {
set allow_reorder [:page_reorder_check_allow -with_head_entries false $allow_reorder]
}
set tree [::xowiki::Tree new -id [:id] -destroy_on_cleanup]
$tree array set open_node [array get :open_node]
$tree add_pages -full $full -remove_levels $remove_levels -book_mode $book_mode -open_page $open_page -expand_all $expand_all -owner [self] -properties ${:render_properties} $pages
if {$allow_reorder ne ""} {
:page_reorder_init_vars -allow_reorder $allow_reorder js last_level ID min_level
set HTML [$tree render -style listdnd -context [list min_level $min_level]]
} else {
set HTML [$tree render -style list -properties ${:render_properties}]
}
return $HTML <instance of xowiki::includelet::toc
> render_yui_list
- Testcases:
-
includelet_toc, xowiki
:get_parameters
if {$book_mode} {
set ajax 0
}
set :ajax $ajax
if {$ajax} {
set :js [:yui_ajax]
} else {
set :js [:yui_non_ajax]
}
set tree [::xowiki::Tree new -id [:id] -destroy_on_cleanup]
$tree array set open_node [array get :open_node]
$tree add_pages -full $full -remove_levels $remove_levels -book_mode $book_mode -open_page $open_page -expand_all $expand_all -owner [self] $pages
set HTML [$tree render -style yuitree -js ${:js}]
return $HTML