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.99 -r1.100 --- openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 18 Sep 2007 13:28:32 -0000 1.99 +++ openacs-4/packages/xowiki/tcl/xowiki-portlet-procs.tcl 28 Sep 2007 12:06:54 -0000 1.100 @@ -6,6 +6,24 @@ @cvs-id $Id$ } namespace eval ::xowiki::portlet { + # + # Define a meta-class for creating Portlet classes. + # We use a meta-class for making it easier to define properties + # on classes of portlets, which can be used without instantiating + # it. One can for example use the query from the page fragment + # cache the caching properties of the class. + # + Class create ::xowiki::PortletClass \ + -superclass ::xotcl::Class \ + -parameter { + {localized true} + {personalized true} + {cacheable false} + {aggregating false} + } + + # The general superclass for portlets + Class create ::xowiki::Portlet \ -superclass ::xo::Context \ -parameter { @@ -228,7 +246,7 @@ namespace eval ::xowiki::portlet { ############################################################################# - Class create available-includelets \ + ::xowiki::PortletClass create available-includelets \ -superclass ::xowiki::Portlet \ -parameter { {title "The following includelets can be used in a page"} @@ -239,12 +257,40 @@ return [::xowiki::Portlet available_includelets] } } - + namespace eval ::xowiki::portlet { ############################################################################# + # Page Fragment Cache + # + # The following mixin-class implements page fragment caching in the + # xowiki-cache. Caching can be turned on for every + # ::xowiki::PortletClass instance. + # + # Fragment caching depends in the class variables + # - cacheable (the mixin is only registered, when cacheable is set to true) + # - aggregating (requires flusing when items are added/edited/deleted) + # - localized (dependency on locale) + # - personalized (dependency on userid) + # + Class create ::xowiki::portlet::page_fragment_cache -instproc render {} { + set c [my info class] + # + # Construct a key based on the class parameters and the + # actual parameters + # + set key "PF-[my package_id]-" + append key [expr {[$c aggregating] ? "agg" : "ind"}] + append key "-$c [my set __caller_parameters]" + if {[$c localized]} {append key -[my locale]} + if {[$c personalized]} {append key -[::xo::cc user_id]} + return [ns_cache eval xowiki_cache $key next] + } +} +namespace eval ::xowiki::portlet { + ############################################################################# # dotlrn style portlet decoration for includelets # - Class ::xowiki::portlet::decoration=portlet -instproc render {} { + Class create ::xowiki::portlet::decoration=portlet -instproc render {} { my instvar package_id name title set class [namespace tail [my info class]] set id [expr {[my exists id] ? "id='[my id]'" : ""}] @@ -260,13 +306,13 @@ } : {
$link
[next]
} }] - Class ::xowiki::portlet::decoration=plain -instproc render {} { + Class create ::xowiki::portlet::decoration=plain -instproc render {} { set class [namespace tail [my info class]] set id [expr {[my exists id] ? "id='[my id]'" : ""}] return "
[next]
" } - Class ::xowiki::portlet::decoration=rightbox -instproc render {} { + Class create ::xowiki::portlet::decoration=rightbox -instproc render {} { set class [namespace tail [my info class]] set id [expr {[my exists id] ? "id='[my id]'" : ""}] return "
[next]
" @@ -275,7 +321,7 @@ namespace eval ::xowiki::portlet { - Class create get \ + ::xowiki::PortletClass create get \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -293,7 +339,7 @@ } } - Class create creation-date \ + ::xowiki::PortletClass create creation-date \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -312,7 +358,7 @@ ############################################################################# # rss button # - Class create rss-button \ + ::xowiki::PortletClass create rss-button \ -superclass ::xowiki::Portlet \ -parameter { {__decoration plain} @@ -333,7 +379,7 @@ ############################################################################# # set-parameter "includelet" # - Class create set-parameter \ + ::xowiki::PortletClass create set-parameter \ -superclass ::xowiki::Portlet \ -parameter {{__decoration none}} @@ -359,8 +405,9 @@ # open_page: name (e.g. en:iMacs) of the page to be opened initially # tree_style: boolean, default: true, display based on mktree - Class create categories \ + ::xowiki::PortletClass create categories \ -superclass ::xowiki::Portlet \ + -cacheable true -personalized false -aggregating true \ -parameter { {title "Categories"} {parameter_declaration { @@ -376,6 +423,7 @@ {-except_category_ids ""} }} } + categories instproc render {} { my get_parameters @@ -497,7 +545,7 @@ # tree_name: match pattern, if specified displays only the trees with matching names # max_entries: show given number of new entries - Class create categories-recent \ + ::xowiki::PortletClass create categories-recent \ -superclass ::xowiki::Portlet \ -parameter { {title "Recently Changed Pages by Categories"} @@ -567,7 +615,7 @@ # display recent entries # - Class create recent \ + ::xowiki::PortletClass create recent \ -superclass ::xowiki::Portlet \ -parameter { {title "Recently Changed Pages"} @@ -642,7 +690,7 @@ # display last visited entries # - Class create last-visited \ + ::xowiki::PortletClass create last-visited \ -superclass ::xowiki::Portlet \ -parameter { {title "Last Visited Pages"} @@ -685,7 +733,7 @@ # list the most popular pages # - Class create most-popular \ + ::xowiki::PortletClass create most-popular \ -superclass ::xowiki::Portlet \ -parameter { {title "Most Popular Pages"} @@ -767,7 +815,7 @@ # consider what to do with auto-created stuff (put it into 'production' state?) # - Class create unread-items \ + ::xowiki::PortletClass create unread-items \ -superclass ::xowiki::Portlet \ -parameter { {title "Unread Items"} @@ -821,7 +869,7 @@ # Show the tags # - Class create tags \ + ::xowiki::PortletClass create tags \ -superclass ::xowiki::Portlet \ -parameter { {title "Tags"} @@ -868,7 +916,7 @@ ""}] } - Class create my-tags \ + ::xowiki::PortletClass create my-tags \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -915,7 +963,7 @@ } - Class create my-categories \ + ::xowiki::PortletClass create my-categories \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -969,7 +1017,7 @@ return $content } - Class create my-general-comments \ + ::xowiki::PortletClass create my-general-comments \ -superclass ::xowiki::Portlet \ -parameter {{__decoration none}} @@ -989,7 +1037,7 @@ } } - Class create digg \ + ::xowiki::PortletClass create digg \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -1011,7 +1059,7 @@ return "Digg!" } - Class create delicious \ + ::xowiki::PortletClass create delicious \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -1043,7 +1091,7 @@ } - Class create my-yahoo-publisher \ + ::xowiki::PortletClass create my-yahoo-publisher \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -1065,7 +1113,7 @@ return "Add to My Yahoo!" } - Class create my-references \ + ::xowiki::PortletClass create my-references \ -superclass ::xowiki::Portlet \ -parameter {{__decoration none}} @@ -1104,7 +1152,7 @@ ############################################################################# # presence # - Class create presence \ + ::xowiki::PortletClass create presence \ -superclass ::xowiki::Portlet \ -parameter { {__decoration rightbox} @@ -1191,7 +1239,7 @@ ############################################################################# # portlets based on order # - Class create toc \ + ::xowiki::PortletClass create toc \ -superclass ::xowiki::Portlet \ -parameter { {__decoration plain} @@ -1515,7 +1563,7 @@ # Selection # # TODO: base book (and toc) on selection - Class create selection \ + ::xowiki::PortletClass create selection \ -superclass ::xowiki::Portlet \ -parameter { {__decoration plain} @@ -1593,7 +1641,7 @@ return $output } - Class create composite-form \ + ::xowiki::PortletClass create composite-form \ -superclass ::xowiki::portlet::selection \ -parameter { {parameter_declaration { @@ -1644,7 +1692,7 @@ ############################################################################# # book style # - Class create book \ + ::xowiki::PortletClass create book \ -superclass ::xowiki::Portlet \ -parameter { {__decoration plain} @@ -1728,7 +1776,7 @@ } namespace eval ::xowiki::portlet { - Class create item-button \ + ::xowiki::PortletClass create item-button \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -1765,7 +1813,7 @@ return $html } - Class create edit-item-button -superclass ::xowiki::portlet::item-button \ + ::xowiki::PortletClass create edit-item-button -superclass ::xowiki::portlet::item-button \ -parameter { {parameter_declaration { {-page_id} @@ -1793,7 +1841,7 @@ -src /resources/acs-subsite/Edit16.gif] } - Class create delete-item-button -superclass ::xowiki::portlet::item-button \ + ::xowiki::PortletClass create delete-item-button -superclass ::xowiki::portlet::item-button \ -parameter { {__decoration none} {src /resources/acs-subsite/Delete16.gif} @@ -1815,7 +1863,7 @@ -return_url [::xo::cc url]] } - Class create create-item-button -superclass ::xowiki::portlet::item-button \ + ::xowiki::PortletClass create create-item-button -superclass ::xowiki::portlet::item-button \ -parameter { {__decoration none} {src /resources/acs-subsite/Add16.gif} @@ -1849,7 +1897,7 @@ } } - Class create copy-item-button -superclass ::xowiki::portlet::item-button \ + ::xowiki::PortletClass create copy-item-button -superclass ::xowiki::portlet::item-button \ -parameter { {__decoration none} {src /resources/acs-subsite/Copy16.gif} @@ -1889,7 +1937,7 @@ namespace eval ::xowiki::portlet { - Class create graph \ + ::xowiki::PortletClass create graph \ -superclass ::xowiki::Portlet \ -parameter {{__decoration plain}} @@ -1957,7 +2005,7 @@ } namespace eval ::xowiki::portlet { - Class create collab-graph \ + ::xowiki::PortletClass create collab-graph \ -superclass ::xowiki::portlet::graph \ -parameter { {parameter_declaration { @@ -2039,7 +2087,7 @@ } - Class create activity-graph \ + ::xowiki::PortletClass create activity-graph \ -superclass ::xowiki::portlet::graph \ -parameter { {parameter_declaration { @@ -2137,7 +2185,7 @@ return $result } - Class create timeline \ + ::xowiki::PortletClass create timeline \ -superclass ::xowiki::Portlet \ -parameter { {parameter_declaration { @@ -2210,7 +2258,7 @@ }] } - Class create user-timeline \ + ::xowiki::PortletClass create user-timeline \ -superclass timeline \ -parameter { {parameter_declaration { @@ -2233,7 +2281,7 @@ namespace eval ::xowiki::portlet { ############################################################################# - Class create form-menu \ + ::xowiki::PortletClass create form-menu \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -2263,7 +2311,7 @@ } ############################################################################# - Class create form-entry-menu \ + ::xowiki::PortletClass create form-entry-menu \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none} @@ -2280,7 +2328,7 @@ } ############################################################################# - Class create form-usages \ + ::xowiki::PortletClass create form-usages \ -superclass ::xowiki::Portlet \ -parameter { {__decoration none}