You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@roller.apache.org by sn...@apache.org on 2005/06/09 05:19:20 UTC

svn commit: r189695 [55/67] - in /incubator/roller/trunk: ./ contrib/ contrib/lib/ contrib/plugins/ contrib/plugins/src/ contrib/plugins/src/org/ contrib/plugins/src/org/roller/ contrib/plugins/src/org/roller/presentation/ contrib/plugins/src/org/roller/presentation/velocity/ contrib/plugins/src/org/roller/presentation/velocity/plugins/ contrib/plugins/src/org/roller/presentation/velocity/plugins/acronyms/ contrib/plugins/src/org/roller/presentation/velocity/plugins/bookmarks/ contrib/plugins/src/org/roller/presentation/velocity/plugins/email/ contrib/plugins/src/org/roller/presentation/velocity/plugins/jspwiki/ contrib/plugins/src/org/roller/presentation/velocity/plugins/radeox/ contrib/plugins/src/org/roller/presentation/velocity/plugins/readmore/ contrib/plugins/src/org/roller/presentation/velocity/plugins/smileys/ contrib/plugins/src/org/roller/presentation/velocity/plugins/textile/ contrib/plugins/src/org/roller/presentation/velocity/plugins/topictag/ custom/ custom/src/ custom/web/ docs/ docs/images/ docs/installguide/ docs/installguide/old/ docs/userguide/ docs/userguide/images/ docs/userguide/old/ metadata/ metadata/database/ metadata/database/hibernate/ metadata/xdoclet/ nbproject/ personal/ personal/eclipse/ personal/testing/ sandbox/ sandbox/planetroller/ sandbox/planetroller/metadata/ sandbox/planetroller/metadata/database/ sandbox/planetroller/src/ sandbox/planetroller/src/org/ sandbox/planetroller/src/org/roller/ sandbox/planetroller/src/org/roller/tools/ sandbox/planetroller/src/org/roller/tools/planet/ sandbox/planetroller/templates/ sandbox/planetroller/test/ sandbox/planetroller/test/org/ sandbox/planetroller/test/org/roller/ sandbox/planetroller/test/org/roller/model/ sandbox/planetroller/test/org/roller/tools/ sandbox/planetroller/test/org/roller/tools/planet/ sandbox/planetroller/testdata/ sandbox/planetroller/testdata/cache/ sandbox/planetroller/testdata/output/ sandbox/standalone/ sandbox/standalone/jspwiki/ sandbox/standalone/jspwiki/default/ sandbox/standalone/jspwiki/default/images/ sandbox/standalone/lib/ sandbox/standalone/src/ sandbox/standalone/src/org/ sandbox/standalone/src/org/roller/ sandbox/standalone/src/org/roller/jspwiki/ sandbox/standalone/src/org/roller/tomcat/ sandbox/standalone/src/org/roller/util/ sandbox/standalone/tests/ sandbox/standalone/tests/org/ sandbox/standalone/tests/org/roller/ sandbox/standalone/tests/org/roller/util/ sandbox/standalone/tomcat/ src/ src/org/ src/org/roller/ src/org/roller/business/ src/org/roller/business/hibernate/ src/org/roller/business/search/ src/org/roller/business/search/operations/ src/org/roller/business/utils/ src/org/roller/config/ src/org/roller/config/runtime/ src/org/roller/model/ src/org/roller/pojos/ src/org/roller/presentation/ src/org/roller/presentation/atomapi/ src/org/roller/presentation/bookmarks/ src/org/roller/presentation/bookmarks/actions/ src/org/roller/presentation/bookmarks/formbeans/ src/org/roller/presentation/bookmarks/tags/ src/org/roller/presentation/filters/ src/org/roller/presentation/forms/ src/org/roller/presentation/newsfeeds/ src/org/roller/presentation/pagecache/ src/org/roller/presentation/pagecache/rollercache/ src/org/roller/presentation/pings/ src/org/roller/presentation/planet/ src/org/roller/presentation/tags/ src/org/roller/presentation/tags/calendar/ src/org/roller/presentation/tags/menu/ src/org/roller/presentation/util/ src/org/roller/presentation/velocity/ src/org/roller/presentation/weblog/ src/org/roller/presentation/weblog/actions/ src/org/roller/presentation/weblog/formbeans/ src/org/roller/presentation/weblog/tags/ src/org/roller/presentation/website/ src/org/roller/presentation/website/actions/ src/org/roller/presentation/website/formbeans/ src/org/roller/presentation/website/tags/ src/org/roller/presentation/xmlrpc/ src/org/roller/util/ src/org/roller/util/rome/ tests/ tests/org/ tests/org/roller/ tests/org/roller/ant/ tests/org/roller/business/ tests/org/roller/presentation/ tests/org/roller/presentation/atomapi/ tests/org/roller/presentation/bookmarks/ tests/org/roller/presentation/filters/ tests/org/roller/presentation/velocity/ tests/org/roller/presentation/velocity/plugins/ tests/org/roller/presentation/velocity/plugins/smileys/ tests/org/roller/presentation/velocity/plugins/textile/ tests/org/roller/presentation/weblog/ tests/org/roller/presentation/xmlrpc/ tests/org/roller/util/ tests/org/roller/util/rome/ tools/ tools/buildtime/ tools/buildtime/ant-1.6.2/ tools/buildtime/findbugs/ tools/buildtime/findbugs/lib/ tools/buildtime/findbugs/plugin/ tools/buildtime/mockrunner-0.3/ tools/buildtime/mockrunner-0.3/lib/ tools/buildtime/mockrunner-0.35/ tools/buildtime/mockrunner-0.35/lib/ tools/buildtime/tomcat-4.1.24/ tools/buildtime/xdoclet-1.2/ tools/buildtime/xdoclet-1.2/lib/ tools/hibernate-2.1/ tools/hibernate-2.1/lib/ tools/lib/ tools/standard-1.0.3/ tools/standard-1.0.3/lib/ tools/standard-1.0.3/tld/ tools/struts-1.2.4/ tools/struts-1.2.4/lib/ web/ web/WEB-INF/ web/WEB-INF/classes/ web/WEB-INF/classes/flavors/ web/WEB-INF/classes/themes/ web/bookmarks/ web/editor/ web/editor/images/ web/images/ web/images/editor/ web/images/midas/ web/images/preview/ web/images/smileys/ web/planet/ web/tags/ web/templates/ web/theme/ web/theme/images/ web/theme/lavender/ web/theme/scripts/ web/theme/scripts/classes/ web/themes/ web/themes/basic/ web/themes/berkley/ web/themes/berkley/images/ web/themes/brushedmetal/ web/themes/brushedmetal/images/ web/themes/cheb/ web/themes/cheb/images/ web/themes/cheb/scripts/ web/themes/clean/ web/themes/currency-i18n/ web/themes/currency-i18n/images/ web/themes/currency/ web/themes/currency/images/ web/themes/grey2/ web/themes/moonshine/ web/themes/movablemanila/ web/themes/movablemanila/images/ web/themes/pacifica/ web/themes/robot/ web/themes/rolling/ web/themes/rolling/images/ web/themes/sotto/ web/themes/sotto/images/ web/themes/sotto/styles/ web/themes/sunsets/ web/themes/sunsets/images/ web/themes/sunsets/scripts/ web/themes/sunsets/styles/ web/themes/werner/ web/themes/x2/ web/themes/x2/images/ web/themes/x2/scripts/ web/themes/x2/styles/ web/weblog/ web/website/

Added: incubator/roller/trunk/web/WEB-INF/classes/weblog.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/weblog.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/weblog.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/weblog.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,479 @@
+#**
+ * Macros for displaying weblog entries, comments, and related links.
+ * @author Lance Lavandowska (conversion to Velocimacros)
+ * @author David M Johnson (comment macros)
+ *#
+
+#**
+ * Print status/error message if exists.
+ * Note: "error" and "status" styles should be moved out into
+ * invididual Themes' theme.css files.
+ **#
+#macro( showStatusMessage )
+    #if( $errorMessage )
+        <span class="error">$errorMessage</span>
+    #end
+    #if( $statusMessage )
+        <span class="status">$statusMessage</span>
+    #end
+#end
+
+#**
+ * Sets content type header for page, must be first line in template.
+**#
+#macro( setContentType $ctype )
+$pageHelper.setContentType($ctype)## comment here kills trailing whitespace
+#end
+
+#**
+ * Set the META tag for ContentType.  We do this in addition to
+ * setting the Response header because the header does not get
+ * cached.  So in order to maintain the ContentType we must present
+ * it inside the rendered page itself.
+**#
+#macro( showContentType $ctype )
+    <meta http-equiv="Content-Type" content="$ctype">
+#end
+
+#**
+ * Set the META tag for ContentLanguage.  We do this rather than
+ * setting the Response header because the header does not get
+ * cached.  So in order to maintain the ContentType we must present
+ * it inside the rendered page itself.
+**#
+#macro( showContentLanguage $lang )
+    <meta http-equiv="Content-Language" content="$lang">
+#end
+
+#**
+ * Use this macro in your day template if you want to override
+ * entry rendering in both your HTML and RSS weblog output by defining
+ * a page template named _entry.
+ *
+ * <p>It is no longer necessary to use a page template named _entry
+ * if you want to override entry rendering in both your
+ * HTML and RSS weblog output (for support of PagePlugins).
+ * However, backwards compatibility for such use is still included,
+ * or if you have some other need to override entry rendering.
+ * The _entry page is now loaded by ContextLoader as $entryPage.</p>
+ *#
+#macro( showEntryText $entry )
+   #if(  $entryPage )
+      #parse($entryPage.id)
+   #else
+      #if ( $entry.plugins )
+         #set( $entryText = $pageHelper.renderPlugins( $entry ) )
+      #else
+         #set( $entryText = $entry.text )
+      #end
+      #if( $entryLength == -1 )
+        $utilities.textToCDATA($entryText)
+      #else
+        #set( $entryText = $utilities.textToCDATA($utilities.removeHTML($entryText)) )
+        $stringUtils.left( $entryText, $entryLength )... [$entryText.length() characters]
+      #end
+   #end
+#end
+
+#**
+ * Use this macro in your day template if you want to override
+ * entry rendering in both your HTML and RSS weblog output by defining
+ * a page template named _desc.
+ *
+ * <p>It is no longer necessary to use a page template named _desc
+ * if you want to override entry rendering in both your
+ * HTML and RSS weblog output (for support of PagePlugins).
+ * However, backwards compatibility for such use is still included,
+ * or if you have some other need to override entry rendering.
+ * The _desc page is now loaded by ContextLoader as $descPage.</p>
+ *#
+#macro( showEntryDescription $entry )
+   #if(  $descPage )
+      #parse($descPage.id)
+   #else
+      #if ( $entry.plugins )
+         #set( $entryText = $pageHelper.renderPlugins( $entry ) )
+      #else
+         #set( $entryText = $entry.text )
+      #end
+      #if( $entryLength == -1 )
+        $utilities.textToXML($entryText)
+      #else
+        #set( $entryText = $stringUtils.left( $entryText, $entryLength ) )
+        #set( $entryText = $utilities.textToXML($utilities.removeHTML($entryText)) )
+        $entryText... [$entryText.length() characters]
+      #end
+   #end
+#end
+
+#**
+ * Display Permalink for Date.
+ * @param day Date object that specifies day (type java.util.Date).
+ *#
+#macro( showDayPermalink $day )
+    <a href="$baseURL/page/$userName/#formatDate($plainFormat $day )"><img
+        class="daypermalink"
+        src="$ctxPath/images/permalink.gif"
+        title="$text.get( "macro.weblog.daypermalink.title" )"
+        alt="#formatDate( $plainFormat $day )" /></a>
+#end
+
+#**
+ * Display the default Date.toString for date using the 'macro.weblog.date.toStringFormat'
+ * format as defined in the resource bundle.
+ * @param toStringFormat Format string (see java.text.SimpleDateFormat).
+ * @param day Date object that specifies day (type java.util.Date).
+ *#
+#macro( showEntryDate $day )
+    #set( $format=$text.get("macro.weblog.date.toStringFormat") )
+    #formatDate( $format $day )
+    ##formatDate( $toStringFormat $day )
+#end
+
+#**
+ * Display the timestamp for the $day using the 'macro.weblog.date.timestampFormat'
+ * format as defined in the resource bundle.
+ *
+ * @param timestampFormat Format string (see java.text.SimpleDateFormat).
+ * @param day Date object that specifies day (type java.util.Date).
+ *#
+#macro( showTimestamp $day )
+    #set( $format = $text.get("macro.weblog.date.timestampFormat") )
+    #formatDate( $format $day )
+    ##formatDate( $timestampFormat $day )
+#end
+
+#**
+ * Display the Permalink for a weblog entry.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showEntryPermalink $entry )
+    <a href="$baseURL$entry.permaLink"
+        title="$text.get( "macro.weblog.entrypermalink.title" )"
+        class="entrypermalink">Permalink</a>
+    #if ($pageHelper.isUserAuthorizedToEdit())
+        [<a href="$pageHelper.getEntryEditUrl($entry)">$text.get( "macro.weblog.entrypermalink.edit" )</a>]
+    #end
+#end
+
+#**
+ * Display the Trackback URL for a weblog entry.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showTrackbackURL $entry )
+$absBaseURL/trackback/$userName/$page.link/$utilities.encode($entry.anchor)#end
+
+#**
+ * Display search form for searching a weblog.  This is only a form, no div
+ * or anything around it.
+ *#
+#macro( showSearchForm )
+    <form id="searchForm" method="get" action="$ctxPath/search/$userName"
+        style="margin: 0; padding: 0" onsubmit="return validateSearch(this)">
+        <p>
+          <input type="text" id="q" name="q" size="20"
+              maxlength="255" value="#if($term)$term#end" />
+          #set( $cats = $pageModel.getWeblogCategories("nil") )
+          <select name="c">
+          <option value="">- In Category -</option>
+          #foreach( $cat in $cats )
+              <option #if($cat.name == $req.getParameter('c'))selected="selected"#end>$cat.name</option>
+          #end
+          </select>
+          <input type="submit" value="$text.get( "macro.weblog.searchbutton" )" />
+        </p>
+    </form>
+    <script type="text/javascript">
+        function validateSearch(form) {
+            if (form.q.value == "") {
+                alert("$text.get( "macro.weblog.searchalert" )");
+                form.q.focus();
+                return false;
+            }
+            return true;
+        }
+    </script>
+#end
+
+#**
+ * Display search again form
+ *#
+#macro( showSearchAgainForm )
+    <div id="searchAgain">
+        $text.get( "macro.weblog.searchdictionary", [$term, $term, $term] )
+
+        $text.get( "macro.weblog.searchhits", [$hits])
+
+        <form method="get" action="$ctxPath/search/$userName"
+            style="margin: 5px">
+            <input type="text" id="q" name="q" size="31"
+                maxlength="255" value="$term"
+                style="padding-left: 1px" />
+            #set( $cats = $pageModel.getWeblogCategories("nil") )
+            <select name="c">
+            <option value="">- Restrict By Category -</option>
+            #foreach( $cat in $cats )
+              <option #if($cat.name == $req.getParameter('c'))selected="selected"#end>$cat.name</option>
+            #end
+            </select>
+            <input type="submit" value="$text.get( "macro.weblog.searchagain" )" />
+        </form>
+
+        $text.get( "macro.weblog.searchgoogle", [$term, $absBaseURL, $ctxPath, $userName] )
+    </div>
+    <script type="text/javascript"
+        src="$ctxPath/theme/scripts/searchhi.js"></script>
+#end
+
+#**
+ * Displays header like "1 - 10 of 20 found.".
+**#
+#macro( showSearchSummary )
+    #set( $min = $offset + 1 )
+    #set( $max = $offset + $limit )
+    #if( $max > $hits )#set( $max = $hits )#end
+    <h3>
+        $min - $max of $hits found.
+    </h3>
+#end
+
+#**
+ * Display list of search result pages (for pagination).
+**#
+#macro( showSearchPager )
+    <h3 style="text-align:center;">
+    #set( $numPages = $hits / $limit )
+    #set( $remainder = $hits % $limit )
+    #if( $remainder > 0 )#set( $numPages = $numPages + 1 )#end
+    #if( $numPages > 1 )
+        #foreach( $pageNum in [1..$numPages] )
+            #set( $i = $pageNum - 1 )
+            #set( $start = $limit * $i )
+            <a href="?q=${utilities.encode($term)}&${USERNAME_KEY}=$!{username}&n=${limit}&o=${start}"
+               >$pageNum</a>#if( $pageNum != $numPages) | #end
+        #end
+    #end
+    </h3>
+#end
+
+#**
+ * Display link to chronologically previous entry in the
+ * same category (if specified).
+**#
+#macro( showPreviousEntryLink $category)
+    <span id="previousEntry">
+    #if( $pageModel.previousEntry )
+        #if ( $category != 'nil' )#set( $catPath = $category )#end  ## was a category supplied?
+        #set( $previousEntry = $pageModel.previousEntry )
+        <a href="$ctxPath$previousEntry.getPermaLink($catPath)"
+            title="Previous Entries"
+            >&laquo; $utilities.truncateNicely($previousEntry.title, 30, 30, "...")</a>
+    #end
+    </span>
+#end
+
+#**
+ * Display link to chronologically next entry in the
+ * same category (if specified).
+**#
+#macro( showNextEntryLink $category)
+    <span id="nextEntry">
+    #if( $pageModel.nextEntry )
+        #if ( $category != 'nil' )#set( $catPath = $category )#end  ## was a category supplied?
+        #set( $nextEntry = $pageModel.nextEntry )
+        <a href="$ctxPath$nextEntry.getPermaLink($catPath)"
+            title="Next Entries"
+            >$utilities.truncateNicely($nextEntry.title, 30, 30, "...") &raquo;</a>
+    #end
+    </span>
+#end
+
+#**
+ * Shows weblog entries from specified category 
+ * using specified page as a "day template" for the display of each day.
+ * If a specific weblog entry is specified by the current request (using
+ * the anchor tag), then shows the only the specified entry (using the day
+ * template) along with the comments associated with that entry.
+ *
+ * @param pageName   Page name of page to serve as day template.
+ * @param maxEntries Maximum number of entries to be shown.
+ * @param category   Only display weblog entries from this category.
+ *#
+#macro( showWeblogEntriesInCategory $pageName $maxEntries $category )
+    #if ( $pageModel.getWeblogEntry() )
+        #set( $entry = $pageModel.getWeblogEntry() )
+    #end
+    #set( $dayTemplateId = $pageModel.getPageIdByName($pageName) )
+    #if ( !$dayTemplateId ) ## if no page name, try Preview space
+        #set ( $dayTemplateId = $pageName )
+    #end
+    #if( $entry )
+        #set( $day = $entry.pubTime )
+        #set( $entries = [ $entry ] )
+        #parse( $dayTemplateId )
+        <div class="trackbackUrl">
+           $text.get( "macro.weblog.trackback" ) #showTrackbackURL($entry)
+        </div>
+        #showComments($entry)
+        #if($website.allowComments && $entry.commentsStillAllowed)
+            #showCommentForm($entry)
+        #else
+            $text.get("comments.disabled")
+        #end
+    #else
+        #if( $searchResults )
+            #set( $map = $searchResults )
+            #showSearchAgainForm()
+            #showSearchSummary()
+        #else
+            #set( $map = $pageModel.getRecentWeblogEntries($maxEntries, $category) )
+        #end
+        #foreach( $day in $map.keySet() )
+            #set( $entries = $map.get($day) )
+            #parse( $dayTemplateId )
+        #end
+        #if( $searchResults )
+            #showSearchPager()
+        #end
+
+        <div class="next-previous">
+        #showPreviousEntryLink($category)
+        #showNextEntryLink($category)
+        </div>
+    #end
+#end
+
+#**
+ * Shows weblog entries using specified page as a "day template" for
+ * the display of each day. If a specific weblog entry is specified
+ * by the current request (using the anchor tag), then shows the only
+ * the specified entry (using the day template) along with the comments
+ * associated with that entry.
+ *
+ * @param pageName Page name of page to serve as day template.
+ * @param maxEntries Maximum number of entries to be shown.
+ *#
+#macro( showWeblogEntries $pageName $maxEntries )
+#showWeblogEntriesInCategory($pageName $maxEntries 'nil')
+#end
+
+#**
+ * Show the last $maxEntries number of weblogentry titles in a category,
+ * as links to the individual posts.  Names of fields
+ * must be different than in showWeblogEntries (those
+ * values take precedence for some reason).
+**#
+#macro( showRecentEntriesInCategory $entryCount $catPath )
+   #set( $xmap = $pageModel.getRecentWeblogEntries($entryCount,$catPath) )
+   <ul class="recentposts">
+   #foreach( $day in $xmap.keySet() )
+       #set( $recentEntries = $xmap.get($day) )
+       #foreach ($var in $recentEntries)
+           <li class="recentposts"><a href="$baseURL/page/$userName/?anchor=$utilities.encode($var.anchor)">$var.title</a></li>
+       #end
+   #end
+   </ul>
+#end
+
+#**
+ * Show the last $maxEntries number of weblogentry titles,
+ * as links to the individual posts.  Names of fields
+ * must be different than in showWeblogEntries (those
+ * values take precedence for some reason).
+**#
+#macro( showRecentEntries $entryCount )
+#showRecentEntriesInCategory($entryCount "nil")
+#end
+
+#**
+ * Show the last $maxEntries number of weblogentry titles, as links to
+ * entry links.  Names of fields must be different than in showWeblogEntries
+ * (those values take precedence for some reason).
+**#
+#macro( showRecentEntryLinksInCategory $numEntries $cat)
+   #set( $xmap = $pageModel.getRecentWeblogEntries($numEntries, $cat) )
+   <ul class="linkblog">
+   #foreach( $day in $xmap.keySet() )
+       #set( $recentEntries = $xmap.get($day) )
+       #foreach ($var in $recentEntries)
+           <li class="linkblog">
+           #if ($var.link)
+              <a href="$var.link" title="$utilities.removeAndEscapeHTML($var.text)">$var.title</a>
+           #else
+              $var.title
+           #end
+           #if ($pageHelper.isUserAuthorizedToEdit())
+              &nbsp;[<a href="$pageHelper.getEntryEditUrl($var)">$text.get( "macro.weblog.editentry" )</a>]
+           #end
+           </li>
+       #end
+   #end
+   </ul>
+#end
+
+#**
+ * Show the last $maxEntries number of weblogentry titles, as links to
+ * entry links.  Names of fields must be different than in showWeblogEntries
+ * (those values take precedence for some reason).
+**#
+#macro( showRecentEntryLinks $numEntries )
+#showRecentEntryLinksInCategory($numEntries "nil")
+#end
+
+#**
+ * Display language form for selection a different language.  This is only a form, no div
+ * or anything around it.
+ *#
+#macro( showLanguageForm )
+    ## first check for errors during possible previous langauge change
+    #if ($languageError)
+        <p>$languageError</p>
+    #end
+
+    #set( $locales = $pageHelper.getSupportedLanguages() )
+    #if ($locales)
+       #foreach($locale in $locales)
+          <a class="imageLink" href="$ctxPath/language${pageHelper.getPathInfo()}?language=${locale}">
+             <img src="$ctxPath/images/flag_${locale.toString().toLowerCase()}.gif" alt="${locale.getDisplayLanguage()}" />
+          </a>
+          <br />
+       #end
+    #else
+        <p>$text.get("macro.weblog.nolanguages")</p>
+    #end
+#end
+
+#**
+ * Display links to Previous and/or Next chronological Entry.  Also
+ * display link to "main" page if either is present.
+**#
+#macro( showNextPreviousLinks )
+    #set( $catLink = "" )
+    #if ( $catPath ) #set( $catLink = "?catname=$catPath" ) #end
+    <div class="next-previous">
+    #if ($pageModel.previousEntry)
+        #set( $previousEntry = $pageModel.previousEntry )
+        <a href="$ctxPath/page/$userName/$page.link/$utilities.encode($previousEntry.anchor)$catLink"
+            title="$previousEntry.title"
+            >&laquo; $utilities.truncateNicely($previousEntry.title, 30, 30, "...")</a> |
+    #end
+
+    #if ( $pageModel.previousEntry || $pageModel.nextEntry)
+        <a href="$ctxPath/page/$userName/$page.link$catLink">$page.name</a>
+    #end
+
+    #if ($pageModel.nextEntry)
+        #set( $nextEntry = $pageModel.nextEntry )
+        | <a href="$ctxPath/page/$userName/$page.link/$utilities.encode($nextEntry.anchor)$catLink"
+            title="$nextEntry.title"
+            >$utilities.truncateNicely($nextEntry.title, 30, 30, "...") &raquo;</a>
+    #end
+    </div>
+#end
+
+#**
+ * Method to retrieve a full encoded anchor tag for a WeblogEntry.
+**#
+#macro( showAnchorTag $entry )
+    <a name="$utilities.encode($entry.anchor)" id="$utilities.encode($entry.anchor)"></a>
+#end
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/website.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/website.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/website.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/website.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,118 @@
+#**
+ * Website and Page macros.
+ * @author  Lance Lavandowska (conversion to Velocimacros)
+ *#
+
+#**
+ * Display website title.
+ *#
+#macro( showWebsiteTitle )$website.Name#end
+
+#**
+ * Display website description.
+ *#
+#macro( showWebsiteDescription )$website.Description#end
+
+#**
+ * Include a page and evaluate it as a template.
+ * @param pageName Name of page to be included.
+ *#
+#macro( includePage $pageName )
+    #set( $iPageId = false )## This is required for such constructs; see velocity docs and ROL-689
+    #set( $iPageId = $pageModel.getPageIdByName( $pageName ) )
+    #if ( !$iPageId ) ## no page found, parse pageName
+        #set( $iPageId = $pageName )
+    #end
+    #parse( $iPageId )
+#end
+
+#**
+ * Show name of current page.
+ *#
+#macro( showPageName )$page.Name#end
+
+#**
+ * Show current page's description.
+ *#
+#macro( showPageDescription )$page.Description#end
+
+#**
+ * Show current page's update time.
+ *#
+#macro( showPageUpdateTime )$page.UpdateTime#end
+
+#**
+ * Display weblog calandar.
+ * @param big True to display a BIG calendar, good for an archive page.
+ *#
+#macro( displayWeblogCalendar $big $cat)
+    $pageHelper.showWeblogCalendar( $big, $cat )
+#end
+
+#**
+ * Shows weblog category chooser.
+ * To style completely with CSS, set $divider to "" (empty string).
+ * @param parentCategory The top level Category to display.
+ * @param divider The text to place between each Category.
+ *#
+#macro( showWeblogSubcategoryChooser2 $parentCategory $divider )
+    #set( $rawUrl = "$ctxPath/page/$userName/$page.link" )
+
+    <div class="rWeblogCategoryChooser">
+    #set( $weblogUrl = $rawUrl )
+    #set( $chosenCat = "" )
+    #if( $req.getParameter( $WEBLOGCATEGORYNAME_KEY ) )
+        #set( $chosenCat = $req.getParameter( $WEBLOGCATEGORYNAME_KEY ) )
+        <span class="rUnchosenCategory"><a href="$weblogUrl">$text.get( "macro.weblog.allcategories" )</a></span>
+    #else
+        <span class="rChosenCategory">$text.get( "macro.weblog.allcategories" )</span>
+    #end
+
+    #if ( $req.getParameter($PAGEID_KEY)  )
+        #set( $pageParam = "&$PAGEID_KEY=$req.getParameter($PAGEID_KEY)" )
+    #end
+    #set( $cats = $pageModel.getWeblogCategories($parentCategory) )
+    #foreach( $cat in $cats )
+        ## $pageHelper.strutsUrlHelper() wasn't working, so do it manually
+        #set( $catParam = "?$WEBLOGCATEGORYNAME_KEY=$utilities.encode($cat.path)" )
+        #set( $weblogUrl = "$rawUrl$catParam$!pageParam" )
+        $divider
+        #if( $chosenCat == $cat.path )
+            <span class="rChosenCategory">$cat.Name</span>
+        #else
+            <span class="rUnchosenCategory"><a href="$weblogUrl">$cat.Name</a></span>
+        #end
+    #end
+    </div>
+#end
+## backwards compatibility
+#macro( showWeblogSubcategoryChooser $parentCategory )
+    #showWeblogSubcategoryChooser2( $parentCategory "|" )
+#end
+
+#**
+ * Shows weblog category chooser.
+ *#
+#macro( showWeblogCategoryChooser )#showWeblogSubcategoryChooser2("nil" "|")#end
+
+#**
+ * Display weblog calandar.
+ * @param big True to display a BIG calendar, good for an archive page.
+ *#
+#macro( displayWeblogCalendar $big $cat)
+    $pageHelper.showWeblogCalendar( $big, $cat )
+#end
+
+#**
+ * Display weblog calandar.
+ *#
+#macro( showWeblogCalendar )
+    #displayWeblogCalendar( false 'nil' )
+#end
+
+#**
+ * Display a BIG weblog calendar, good for an archive page.
+ *#
+#macro( showBigWeblogCalendar )
+    #displayWeblogCalendar( true 'nil' )
+#end

Added: incubator/roller/trunk/web/WEB-INF/editor-menu.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/editor-menu.xml?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/editor-menu.xml (added)
+++ incubator/roller/trunk/web/WEB-INF/editor-menu.xml Wed Jun  8 20:18:46 2005
@@ -0,0 +1,55 @@
+
+<!-- Defines the Roller Editor GUI menu and roles allowed to use each menu. -->
+
+<menu-bar>
+
+    <menu name="tabbedmenu.main">
+        <menu-item name="tabbedmenu.planet" forward="planet" 
+        	   enabledProperty="planet.aggregator.enabled" />
+        <menu-item name="tabbedmenu.main" forward="main" 
+            disabledProperty="planet.aggregator.enabled" />
+    </menu>
+    
+    <menu name="tabbedmenu.weblog" roles="editor,admin">
+        <menu-item name="tabbedmenu.weblog.newEntry"   forward="weblogCreate" />
+        <menu-item name="tabbedmenu.weblog.archives"    forward="weblogQuery" />
+        <menu-item name="tabbedmenu.weblog.categories"  forward="categories" />
+        <menu-item name="tabbedmenu.weblog.referers"    forward="referers" />
+        <menu-item name="tabbedmenu.weblog.pingSetup"   forward="pingSetup"
+          disabledProperty="pings.disablePingUsage"/>
+        <menu-item name="tabbedmenu.weblog.customPingTargets" forward="customPingTargets"
+          disabledProperty="pings.disallowCustomTargets"/>
+        <!-- I haven't tested these yet...
+        <menu-item name="tabbedmenu.weblog.export"      forward="exportEntries" />
+        <menu-item name="tabbedmenu.weblog.import"      forward="importEntries" />
+        -->
+    </menu>
+
+    <menu name="tabbedmenu.bookmarks" roles="editor,admin">
+        <menu-item name="tabbedmenu.bookmarks.allFolders" forward="bookmarks" />
+        <menu-item name="tabbedmenu.bookmarks.import"     forward="importBookmarks" />
+    </menu>
+
+    <menu name="tabbedmenu.website" roles="editor,admin">
+        <menu-item name="tabbedmenu.website.settings" forward="editWebsite" />
+        <menu-item name="tabbedmenu.website.themes"   forward="editTheme" />
+        <menu-item name="tabbedmenu.website.pages"    forward="editPages" />
+        <menu-item name="tabbedmenu.website.files"    forward="uploadFiles" />
+        <menu-item name="tabbedmenu.website.user"     forward="editUser" />
+        <menu-item name="tabbedmenu.website.maintenance" forward="maintenance" />
+    </menu>
+
+    <menu name="tabbedmenu.admin" roles="admin">
+        <menu-item name="tabbedmenu.admin.config"     forward="rollerConfig" />
+        <menu-item name="tabbedmenu.admin.userAdmin"  forward="adminUser" />
+        <menu-item name="tabbedmenu.admin.createUser"  forward="createUser" />
+        <menu-item name="tabbedmenu.admin.pingTargets" forward="commonPingTargets"/>
+    </menu>
+
+    <menu name="tabbedmenu.planet" roles="admin" enabledProperty="planet.aggregator.enabled">
+        <menu-item name="tabbedmenu.admin.planetConfig"         forward="planetConfig" />
+        <menu-item name="tabbedmenu.admin.planetSubscriptions"  forward="planetSubscriptions" />
+        <menu-item name="tabbedmenu.admin.planetGroups"         forward="planetGroups" />
+    </menu>
+
+</menu-bar>