# -*- tcl-*-
# $Id: news.page,v 1.9 2007/12/20 09:17:36 gustafn Exp $
::xowiki::Object new -title "News" -text {
#
# A sample News object.
#
my initialize -parameter {
{-page_size:integer 10}
{-page_number:integer 1}
{-summary:boolean 0}
{-date ""}
{-tag ""}
{-ptag ""}
{-entries_of en:news-item|announcement-talk}
}
my get_parameters
#
# Don't add the footer (with tags, general comments, etc.) to the
# aggregated page, since this can be confusing..
#
[my info parent] set __no_footer 1
#
# Provide a tailored link for creating new pages in the wiki menu
#
set forms [::xowiki::Weblog instantiate_forms \
-entries_of $entries_of \
-package_id $package_id]
set template_id [lindex $forms 0]
set form_link [$package_id pretty_link [$template_id name]]
set new_link [$package_id make_link -link $form_link $template_id create-new return_url]
[my info parent] set __link(new) $new_link
#
# The following definition is the default rendering per
# news entry. This is executed in the context of every displayed page.
#
Class create EntryRenderer -instproc render {} {
my instvar package_id name title creator creation_user pretty_date description publish_date
[my set __parent] instvar weblog_obj
set link [::xowiki::Includelet detail_link \
-package_id $package_id -name $name \
-instance_attributes [my get_instance_attributes]]
regsub -all & $link "&" link
set more [expr {[$weblog_obj summary] ?
" \[#xowiki.weblog-more#\]" : ""}]
#append more "
"
set day [lc_time_fmt [my set publish_date] "%x"]
set my_footer [my htmlFooter]
set edit_button [my include [list edit-item-button -book_mode true]]
if {$edit_button ne ""} {set edit_button "$edit_button
"}
append content "" $edit_button \
"\n" \
$description $more $my_footer \n\
"
"
}
#
# The following definition is the renderer for the aggregated content.
# This is executed in the context of the whole weblog object
#
Class create NewsRenderer -instproc render {} {
my instvar filter_msg link name prev_page_link next_page_link title package_id
set filter ""
set prev ""
set next ""
if {[info exists filter_msg]} {
set filter "$filter_msg
"
}
if {[info exists prev_page_link]} {
set prev "\
"
}
if {[info exists next_page_link]} {
set next "\
"
}
#
# Include the RSS Button
#
set page [my set __page]
set rss [$page include "rss-button -title {[$page title]} -entries_of [my entries_of] -decoration none"]
#
# If the user has creation rights (on the first form), include the RSS Bookmarklet button
#
if {[my exists form_items]} {
set can_create_news_item [$package_id make_link [lindex [my set form_items] 0] create-new return_url]
if {$can_create_news_item ne ""} {
append rss "Bookmarklet: " [$page include "bookmarklet-button -label {[$page title]}"]
}
}
return " $filter [next] $prev $next
$rss
"
}
my proc content {} {
my get_parameters
set page [my info parent]
if {[$page exists __including_page]} {
set i [$page set __including_page]
set exclude_item_ids [$i item_id]
$i set render_adp 0 ;# no double substitutions
#my log "--W including page $i"
} else {
#my log "--W NO including page"
set exclude_item_ids [$page item_id]
}
# on the news page, an edit-new should not create an object
::xo::cc set_parameter object_type ::xowiki::Page
::xo::cc set_parameter autoname 1
# use the above defined custom renderers
set renderer [self]::NewsRenderer
set entry_renderer [self]::EntryRenderer
set w [::xowiki::Weblog new -destroy_on_cleanup \
-package_id $package_id \
-page_size $page_size \
-page_number $page_number \
-summary $summary \
-date $date \
-category_id [ns_queryget category_id] \
-tag $tag \
-ptag $ptag \
-entry_label "News Articles" \
-exclude_item_ids $exclude_item_ids \
-entry_renderer $entry_renderer \
-entry_flag __no_form_page_footer \
-entries_of $entries_of \
]
$w set __page $page
$w mixin add $renderer
return [$w render]
}
}