Class ::xowiki::includelet::book
::xowiki::includelet::book
create ... \
[ -__decoration (default "plain") ] \
[ -parameter_declaration (default "
{-category_id}
{-menu_buttons edit}
{-folder_mode false}
{-locale ""}
{-range ""}
{-allow_reorder ""}
{-orderby "page_order,asc"}
{-with_footer "false"}
{-publish_status "ready"}
") ]
Show contents in book mode.
Defined in /var/www/openacs.org/packages/xowiki/tcl/includelet-procs.tclClass 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)
- subclass: ::xowiki::includelet::slidy
, ::xowiki::includelet::jquery-spacegallery
, ::xowiki::includelet::jquery-infinite-carousel
, ::xowiki::includelet::jquery-cloud-carousel
, ::xowiki::includelet::jquery-carousel![[i]](/resources/acs-subsite/ZoomIn16.gif)
::xowiki::IncludeletClass create ::xowiki::includelet::book \
-superclass ::xowiki::Includelet \
-instmixin ::xowiki::includelet::PageReorderSupport
Methods (to be applied on instances)
__decoration (setter)
parameter_declaration (setter)
render (scripted)
:get_parameters
lappend ::xowiki_page_item_id_rendered [${:__including_page} item_id]
${:__including_page} set __is_book_page 1
set allow_reorder [:page_reorder_check_allow $allow_reorder]
lassign [split $orderby ,] order_attribute order_direction
if {$order_attribute ni {page_order title}} {
ns_log warning "book includelet: ignore invalid page order '$orderby'"
set order_attribute page_order
set order_direction asc
}
set page_order_clause [expr {$order_attribute eq "page_order"
? "and not page_order is NULL"
: ""}]
set extra_where_clause ""
set cnames ""
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 publish_status_clause [expr {[info exists publish_status]
? [::xowiki::Includelet publish_status_clause -base_table p $publish_status]
: ""}]
if {$folder_mode} {
set parent_id [${:__including_page} item_id]
} else {
set parent_id [${:__including_page} parent_id]
}
set sql "select page_id, page_order, name, title, item_id from xowiki_page_live_revision p where parent_id = [ns_dbquotevalue $parent_id] $page_order_clause $extra_where_clause $locale_clause $publish_status_clause [::xowiki::Page container_already_rendered item_id]"
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 ""} {
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 {[llength [$pages children]] < 1} {
set p [::xo::db::CrClass get_instance_from_db -item_id $parent_id]
set output "<p>No pages with parent object [$p name], page_order not NULL and an appropriate publish status found</p>\n"
} else {
set output [:render_items -menu_buttons $menu_buttons -with_footer $with_footer -pages $pages -cnames $cnames -allow_reorder $allow_reorder]
}
return $outputrender_images (scripted)
set imageList {}
foreach o [$pages children] {
set p [::xo::db::CrClass get_instance_from_db -item_id 0 -revision_id [$o set page_id]]
set html [$p render -with_footer false]
if {[regsub -nocase {^(.*)(<img\s*[^>]+>)(.*)$} $html {\2} html] < 1} continue
if {[info exists addClass]} {
regsub -nocase {class\s*=\s*'([^']+)'} $html "class='\\1 $addClass'" html
}
lappend imageList $html
}
return $imageListrender_item (scripted)
$object instvar page_order title name
set menu [list]
foreach b $menu_buttons {
if {[info commands ::xowiki::includelet::$b] eq ""} {
set b $b-item-button
}
set html [$object include [list $b -book_mode true]]
if {$html ne ""} {lappend menu $html}
}
set menu [join $menu " "]
if {$menu ne ""} {
set menu "<span class='book-item-menu'>$menu</span>"
}
set label "$page_order $title"
append output "<h$level class='book'>" $menu "<a name='[ns_quotehtml [toc anchor $name]]'></a>[ns_quotehtml $label]</h$level>" $contentrender_items (scripted)
set output ""
if {$cnames ne ""} {
append output "<div class='filter'>Filtered by categories: $cnames</div>"
}
:page_reorder_init_vars -allow_reorder $allow_reorder js last_level ID min_level
set renderer default
foreach o [$pages children] {
$o instvar page_order page_id
set level [expr {[regsub -all -- {[.]} $page_order _ page_order_js] + 1}]
if {$allow_reorder ne ""} {
if {![regexp {^(.*)[.][^.]+$} $page_order _ prefix]} {set prefix ""}
if {$last_level != $level} {
for {set l $last_level} {$l > $level} {incr l -1} {append output "</ul>\n" }
for {set l $last_level} {$l < $level} {incr l} {
regsub -all -- {[.]} $prefix _ prefix_js
append output [:page_reorder_open_ul -min_level $min_level -ID $ID -prefix_js $prefix_js $l]
}
set last_level $level
set last_prefix $prefix
}
set item_id [:page_reorder_item_id -ID $ID -prefix_js $prefix_js -page_order $page_order js]
append output "<li id='[ns_quotehtml $item_id]'>"
}
set p [::xo::db::CrClass get_instance_from_db -item_id 0 -revision_id $page_id]
$p references clear
switch [$p info class] {
::xowiki::Form {
set content [$p render]
}
default {
set content [$p render -with_footer false]
}
}
append output [:render_item -menu_buttons $menu_buttons -content $content -object $p -level $level]
if {$with_footer} {
append output [$p htmlFooter -content $content]
}
}
if {$allow_reorder ne ""} {
for {set l $last_level} {$l > 0} {incr l -1} {append output "</ul>\n" }
append output "<script type='text/javascript' nonce='[security::csp::nonce]'>$js</script>\n"
}
return $output