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 [54/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/comments.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/comments.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/comments.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/comments.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,390 @@
+
+#**
+ * Display the pop-up comments link for a weblog entry.
+ * Use the URL for the href attribute for those who have disabled
+ * javascript or who desire to open the comments window in another (Mozilla) tab.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showCommentsLink $entry )
+    #set( $commentCount = $pageModel.getCommentCount($entry.Id) )
+    #if (($entry.commentsStillAllowed && $website.allowComments) || $commentCount > 0)
+        #set( $link = "$ctxPath/comments/$userName/$page.link/$utilities.encode($entry.anchor)?popup=true#comments" )
+        <a href="$link " onclick="window.open('$link', 'comments',
+            'width=480,height=480,scrollbars=yes,status=yes,resizable'); return false;"
+            class="entrycommentslink">$text.get( "macro.weblog.comments" ) [$commentCount]</a>
+    #end
+#end
+
+#**
+ * Display the in-page comments link for a weblog entry.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showCommentsPageLink $entry )
+    #set( $commentCount = $pageModel.getCommentCount($entry.Id) )
+    #if (($entry.commentsStillAllowed && $website.allowComments) || $commentCount > 0)
+        #set( $link = "$ctxPath/comments/$userName/$page.link/$utilities.encode($entry.anchor)#comments" )
+        <a href="$link" class="entrycommentslink">$text.get( "macro.weblog.comments" ) [$commentCount]</a>
+    #end
+#end
+
+#**
+ * Display link for comments that renders a dynamically (DHTML) generated
+ * comments form - Matt Raible style.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showCommentsDiv $entry )
+    #set( $commentCount = $pageModel.getCommentCount($entry.Id) )
+    #if (($entry.commentsStillAllowed && $website.allowComments) || $commentCount > 0)
+        <div class="comments" id="comments">
+            <div id="commentTwisty$entry.Id" class="commentTwisty"
+                onclick="toggleComments('$entry.Id', '$ctxPath/page/$userName'); return false;">
+            <a href="$ctxPath/comments/$userName/$page.link/$utilities.encode($entry.anchor)" class="plain">
+            #if($commentCount == 0)
+                $text.get( "macro.weblog.addcomment" )
+            #elseif($commentCount == 1)
+                $commentCount $text.get( "macro.weblog.comment" )
+            #else
+                $commentCount $text.get( "macro.weblog.comments" )
+            #end</a></div>
+        </div>
+    #end
+#end
+
+#**
+ * PRIVATE. Macro for displaying Comment details (not content).
+**#
+#macro( showCommentDetails $comment $showPermalink )
+    $dateFormatter.applyPattern($text.get( "macro.weblog.datepattern" ))
+    #set($email = $utilities.hexEncode($comment.email))
+    <p class="comment-details">
+    $text.get("macro.weblog.postedby")
+    #if (!$stringUtils.isEmpty($comment.name) && !$stringUtils.isEmpty($email) && !$stringUtils.isEmpty($comment.remoteHost))
+        <a href="mailto:$email" title="$comment.remoteHost">$comment.name</a>
+    #elseif (!$stringUtils.isEmpty($comment.name) && !$stringUtils.isEmpty($email))
+        <a href="mailto:$email">$comment.name</a>
+    #elseif (!$stringUtils.isEmpty($email) && !$stringUtils.isEmpty($comment.remoteHost))
+        <a href="mailto:$email">$comment.remoteHost</a>
+    #elseif (!$stringUtils.isEmpty($comment.name) && !$stringUtils.isEmpty($comment.remoteHost))
+        <b>$comment.name</b> ($comment.remoteHost)
+    #elseif (!$stringUtils.isEmpty($comment.name))
+        <b>$comment.name</b>
+    #elseif (!$stringUtils.isEmpty($comment.remoteHost))
+        <b>$comment.remoteHost</b>
+    #end
+    $text.get("macro.weblog.on") $dateFormatter.format($comment.postTime)
+    #if( $stringUtils.isNotEmpty($comment.url) )
+        $text.get( "macro.weblog.postedbywebsite", [$comment.url, $comment.url] )
+    #end
+    #if( $showPermalink )
+    <a href="${ctxPath}/comments/${userName}/${page.link}/${entry.anchor}#comment${velocityCount}"
+       class="entrypermalink"
+       title="$text.get( "macro.weblog.commentpermalink.title" )">#</a>
+    #end
+    </p>
+#end
+
+#**
+ * Display comments for an entry.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showComments $entry )
+    <div class="comments" id="comments">
+    #if( $previewComments )
+        #set( $comments = $previewComments )
+        <div class="comments-head">$text.get( "macro.weblog.preview" ):</div>
+    #else
+        <div class="comments-head">$text.get( "macro.weblog.comments" ):</div>
+        #set( $comments = $entry.comments )
+    #end
+    <br/>
+    #foreach( $comment in $comments )
+        #set($content = $utilities.encodeEmail($comment.content))
+        #if($escapeHtml)
+            #set($content = $utilities.escapeHTML($content))
+        #end
+        #if($autoformat)
+            #set($content = $utilities.autoformat($content))
+        #end
+        #set($content = $utilities.addNofollow($content))
+        <div class="comment" id="comment${velocityCount}">
+        ${content}
+
+        #showCommentDetails($comment true)
+        </div>
+    #end
+    </div>
+#end
+
+#**
+ * Display recent comments for whole blog (not just one entry).
+**#
+#macro( showRecentComments $numComments )
+    #if( !$numComments ) #set( $numComments = 20 ) #end
+    #if( $numComments > 100 ) #set( $numComments = 50 ) #end
+    #set( $comments = $pageModel.getRecentComments($numComments) )
+    <div class="comments" id="comments">
+    #foreach( $comment in $comments )
+        #set($content = $utilities.encodeEmail($comment.content))
+        #if($escapeHtml)
+            #set($content = $utilities.escapeHTML($content))
+        #end
+        #if($autoformat)
+            #set($content = $stringUtils.replace($content,"\n","<br />"))
+        #end
+        #set($content = $utilities.addNofollow($content))
+        <div class="comment" style="border: 1px solid #dadada; padding-left: 3px; padding-right: 5px;" >
+        <p>Commenting on <a class="entrypermalink"
+            href="${ctxPath}${comment.weblogEntry.permaLink}">${comment.weblogEntry.title}</a>:</p>
+        ${content}
+        #showCommentDetails($comment false)
+        </div>
+    #end
+    </div>
+#end
+
+#**
+ * Display list of recent comments.  $maxWidth determines the amount of text
+ * from the comment to display in the list.
+**#
+#macro( showRecentCommentsListWidth $numComments $maxWidth )
+    #if( !$numComments ) #set( $numComments = 20 ) #end
+    #if( $numComments > 100 ) #set( $numComments = 100 ) #end
+    #set( $minWidth = $maxWidth - 5 )
+    #set( $comments = $pageModel.getRecentComments($numComments) )
+    <ul class="commentsList">Recent Comments
+    #foreach( $comment in $comments )
+        #set($content = $utilities.encodeEmail($comment.content))
+        #set($content = $utilities.addNofollow($content))
+        <li class="commentsListItem"><a
+           href="${ctxPath}/comments/${userName}/${page.link}/${comment.weblogEntry.anchor}#comments"
+           class="entrypermalink"
+           title="$text.get( "macro.weblog.commentpermalink.title" ) to
+               '$utilities.removeHTML($comment.weblogEntry.title)'"
+           >$utilities.truncateNicely($utilities.removeHTML($content), $minWidth, $maxWidth, "...")</a>
+        </li>
+    #end
+    </ul>
+#end
+#**
+ * Convenience method. Show list with 25 character width.
+**#
+#macro( showRecentCommentsList $numComments )
+#showRecentCommentsListWidth( $numComments 25 )
+#end
+
+#**
+ * Display comment form for a weblog entry.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showCommentForm $entry )
+    <div class="comments-form">
+    <div class="comments-head">$text.get("macro.weblog.postcommentHeader")</div><br/>
+    <form method="post" action="$ctxPath/comments" focus="name"
+        name="form" onsubmit="fixURL(this); return validateComments(this)">
+        
+        #if($requestParameters.popup)
+        <input type="hidden" name="popup" value="true" />
+        #end
+
+        <!-- is this a post or a preview -->
+        <input type="hidden" name="method" value="post" />
+        <input type="hidden" name="entryid" value="$entry.id" />
+
+        <table cellspacing="0" cellpadding="1" border="0" width="95%">
+        <tr><th>$text.get( "macro.weblog.name" )</th>
+            <td><input type="text" name="name" value="$commentForm.name" size="50" maxlength="255" /></td>
+        </tr>
+
+        <tr><th>$text.get( "macro.weblog.email" )</th>
+            <td><input type="text" name="email" value="$commentForm.email" size="50" maxlength="255" /></td>
+        </tr>
+
+        <tr><th>$text.get( "macro.weblog.url" )</th>
+            <td><input type="text" name="url" value="$commentForm.url" size="50" maxlength="255" /></td>
+        </tr>
+        #if ($pageModel.emailComments)
+        <tr>
+            <td></td>
+            <td>
+                <input type="checkbox" id="notify" name="notify" />
+                <label for="notify">$text.get( "macro.weblog.notifyMeOfComments" )</label>
+            </td>
+        </tr>
+        #end
+        <tr>
+            <td></td>
+            <td>
+                <input type="checkbox" id="rememberInfo" name="rememberInfo" />
+                <label for="rememberInfo">$text.get( "macro.weblog.rememberinfo" )</label>
+            </td>
+        </tr>
+        </table>
+        <br/>
+
+        <table>
+        <tr><th align="left">$text.get( "macro.weblog.yourcomment" )</th></tr>
+        <tr>
+            <td>
+            <textarea name="content" cols="50" rows="10">$commentForm.content</textarea><br />
+            <span style="comments-syntax-indicator">
+            $text.get( "macro.weblog.htmlsyntax" )
+            #if( $escapeHtml )
+                <span class="disabled">$text.get( "macro.weblog.htmldisabled" )</span>
+            #else
+                <span class="enabled">$text.get( "macro.weblog.htmlenabled" )</span>
+            #end
+            </span>
+            </td>
+        </tr>
+        </table>
+        
+        #showStatusMessage()
+        <p class="commentAuthenticator">
+        $pageHelper.commentAuthenticatorHtml
+        </p>
+ 
+        <table cellspacing="0" cellpadding="1" border="0" width="95%">
+        <tr>
+            <td align="left" nowrap="nowrap">
+               <input type="button" name="post" value="&nbsp;$text.get( "macro.weblog.preview" )&nbsp;"
+                  onClick="this.form.method.value='preview';this.form.submit()" />
+               <input type="submit" name="post" value="&nbsp;$text.get( "macro.weblog.post" )&nbsp;" />
+            </td>
+            <td align="right">
+               <!-- <input type="button" value="&nbsp;$text.get( "macro.weblog.clear" )&nbsp;" /> -->
+            </td>
+        </tr>
+        </table>
+
+    </form>
+
+    <script type="text/javascript" src="$ctxPath/theme/scripts/roller.js"></script>
+    <script type="text/javascript">
+    var author = getCookie("commentAuthor");
+    var email = getCookie("commentEmail");
+    var url = getCookie("commentUrl");
+    // check each field - IE will render "null"
+    if (author) {
+        theForm.name.value = author;
+    }
+    if (email) {
+        theForm.email.value = email;
+    }
+    if (url) {
+        theForm.url.value = url;
+    }
+
+    if (author || email || url) {
+        theForm.rememberInfo.checked = true;
+    }
+
+    function fixURL(theForm) {
+        if (theForm.url.value != "" &&
+            theForm.url.value.indexOf("http://") == -1) { //prepend http://
+            theForm.url.value = "http://"+theForm.url.value;
+        }
+        saveUserInformation(theForm);
+    }
+
+    function saveUserInformation(theForm) {
+        if (theForm.rememberInfo.checked) {
+            rememberUser(theForm);
+        } else {
+            forgetUser(theForm);
+        }
+    }
+
+    function validateComments(theForm) {
+        if (theForm.content.value == "") {
+            alert("$text.get( "macro.weblog.commentwarning" )");
+            theForm.content.focus();
+            return false;
+        }
+    }
+    </script>
+    </div>
+#end
+
+#**
+ * Display hidden comment form for a weblog entry.
+ * @param entry WeblogEntry object.
+ *#
+#macro( showHiddenCommentForm )
+  <div style="display: none" class="comments">
+    <div id="commentBoxTemplate" class="commentBox">
+    <form class="commentFormBox" id="commentForm"
+        method="post" action="$ctxPath/comments"
+        onsubmit="onSubmitComments(this.entryid.value);fixURL(this);return validateComments(this)">
+
+        <table>
+            <tr class="commentFormRow">
+                <td>$text.get( "macro.weblog.name" )</td>
+                <td>
+                    <input name="name" type="text" class="commentFormInput" size="50"/>
+                    <input type="hidden" name="method" value="updateFromPage" />
+                    <input type="hidden" name="entryid" value="" id="entryid" />
+                </td>
+            </tr>
+            <tr class="commentFormRow">
+                <td>$text.get( "macro.weblog.email" )</td>
+                <td><input name="email" type="text" class="commentFormInput" size="50"/></td>
+           </tr>
+           <tr class="commentFormRow">
+                <td>$text.get( "macro.weblog.url" )</td>
+                <td><input name="url" type="text" class="commentFormInput" size="50"/></td>
+           </tr>
+           #if ($model.emailComments)
+           <tr>
+              <td></td>
+              <td>
+                 <input type="checkbox" id="notify" name="notify" />
+                <label for="notify">$text.get( "macro.weblog.notifyMeOfComments" )</label>
+             </td>
+          </tr>
+          #end
+          <tr>
+                <td></td>
+                <td>
+                    <input type="checkbox" id="rememberInfo" name="rememberInfo" />
+                    <label for="rememberInfo">$text.get( "macro.weblog.rememberinfo" )</label>
+                </td>
+           </tr>
+        </table>
+        <div class="commentFormRow">
+            <textarea name="content" class="commentFormTextarea" rows="4" cols="60"></textarea>
+            <div class="htmlSyntax">
+            $text.get( "macro.weblog.htmlsyntax" )
+            #if( $escapeHtml )
+                <span class="disabled">$text.get( "macro.weblog.htmldisabled" )</span>
+            #else
+                <span class="enabled">$text.get( "macro.weblog.htmlenabled" )</span>
+            #end
+            </div>
+        </div>
+        
+        $pageHelper.commentAuthenticatorHtml
+
+        <div class="commentFormRow">
+           <input type="submit" name="post" value="&nbsp;$text.get( "macro.weblog.postcomment" )&nbsp;" />
+        </div>
+      </form>
+    </div>
+    <script type="text/javascript">
+        // add a target to the iframe on the commentForm
+        var commentForm = document.getElementById("commentForm");
+        commentForm.target = "commentFrame";
+    </script>
+
+    <div id="commentTemplate" class="comment">
+      <div class="commentBody" id="commentBody"></div>
+      <div class="commentByline">
+        <a class="commentAuthor" id="commentAuthorLink"></a>
+        <span>&nbsp;on&nbsp;</span><span id="commentTimestamp"></span>
+      </div>
+    </div>
+
+    <iframe name="commentFrame" src="about:blank"></iframe>
+
+    <script type="text/javascript" src="$ctxPath/theme/scripts/roller.js"></script>
+  </div>
+#end

Added: incubator/roller/trunk/web/WEB-INF/classes/commons-logging.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/commons-logging.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/commons-logging.properties (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/commons-logging.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1 @@
+org.apache.commons.logging.LogFactory=org.apache.commons.logging.impl.Log4jFactory
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/atom.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/atom.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/atom.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/atom.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,29 @@
+$pageHelper.setContentType("application/atom+xml;charset=utf-8")<?xml version="1.0" encoding='utf-8'?>
+<feed version="0.3" xmlns="http://purl.org/atom/ns#">
+    <title>$utilities.textToHTML($website.name,true)</title>
+    <tagline>$utilities.textToHTML($website.description,true)</tagline>
+    <link rel="alternate" type="text/html" href="$websiteURL" />
+    <modified>$utilities.formatIso8601Date($updateTime)</modified>
+    <generator url="http://www.rollerweblogger.org" version="#showVersion() ($rollerBuildTime:$rollerBuildUser)">Roller Weblogger</generator>
+    #if( $userName != "zzz_none_zzz" )
+    <author>
+      <name>$fullName</name>
+      <url>$websiteURL</url>
+    </author>
+    #end
+    #set( $entries = $pageModel.getRecentWeblogEntriesArray($entryCount, 'nil') )
+    #foreach( $entry in $entries )
+    <entry>
+        <title>$utilities.textToHTML($entry.title,true)</title>
+        <issued>$utilities.formatIso8601Date($entry.pubTime)</issued>
+        <created>$utilities.formatIso8601Date($entry.pubTime)</created>
+        <modified>$utilities.formatIso8601Date($entry.updateTime)</modified>
+        #if( $userName == "zzz_none_zzz" )
+        <author><name>$entry.website.user.fullName</name></author>
+        #end
+        <link rel="alternate" type="text/html" href="$absBaseURL$entry.permaLink"/>
+        <id>tag:$host,$utilities.formatIso8601Day($entry.pubTime):/$entry.website.user.userName?anchor=$entry.anchor</id>
+        <content type="text/html" mode="escaped">#showEntryDescription($entry)</content>
+    </entry>
+    #end
+</feed>

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/foaf.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/foaf.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/foaf.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/foaf.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:foaf="http://xmlns.com/foaf/0.1/">
+  <foaf:Person>
+    <foaf:name>$fullName</foaf:name>
+    #if ($shaEmail)
+      <foaf:mbox_sha1sum>$shaEmail</foaf:mbox_sha1sum>
+    #elseif ($encodedEmail)
+      <foaf:mbox rdf:resource="mailto:$encodedEmail" />
+    #end
+    <foaf:homepage rdf:resource="$websiteURL" />
+    #if ($weblog)
+      <foaf:weblog rdf:resource="$weblog" />
+    #end
+  </foaf:Person>
+</rdf:RDF>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/opml.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/opml.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/opml.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/opml.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding='utf-8'?>
+$pageHelper.setContentType("text/xml")
+<opml version="1.1">
+<head>
+<title>Roller-generated OPML</title>
+</head>
+#macro( spaces $depth )#foreach( $i in [0..$depth] )    #end#end
+#**
+* Recursive VelociMacro to render OPML for folder.
+* @param folder Folder to be rendered as OPML or null to render from top.
+*#
+#macro( genOpml $folder $depth )
+    #set( $depth = $depth + 1 )
+    #if( !$folder )
+        <outline text="Roller-generated OPML">
+        #set( $topfolders = $pageModel.getTopLevelFolders() )
+        #foreach( $topfolder in $topfolders )
+            #genOpml( $topfolder $depth )
+        #end
+        </outline>
+    #else
+        #spaces($depth)<outline text="$utilities.textToXML($folder.name)">
+        #set( $bookmarks = $folder.getBookmarks() )
+        #foreach( $bookmark in $bookmarks )
+            #if( $bookmark.feedUrl && $bookmark.feedUrl.trim().length()>0 )
+                #set($feedUrl = $bookmark.feedUrl)
+            #end
+            #spaces($depth)<outline #if($bookmark.url)text="$utilities.textToXML($bookmark.name)"#end
+            #spaces($depth)   #if($feedUrl)type="rss"#end
+            #spaces($depth)   #if($bookmark.url)htmlUrl="$utilities.textToXML($bookmark.url)"#end
+            #spaces($depth)   #if($feedUrl)xmlUrl="$utilities.textToXML($feedUrl)"#end
+            #spaces($depth) />
+        #end
+        #set( $subfolders = $folder.getFolders() )
+        #foreach( $subfolder in $subfolders )
+            #genOpml( $subfolder $depth )
+        #end
+        #spaces($depth)</outline>
+    #end
+    #set( $depth = $depth - 1 )
+#end
+<body>
+#set( $folderPath = $pageModel.getRequestParameter("path") )
+#if( $folderPath )
+    #set( $folder = $pageModel.getFolderByPath($folderPath) )
+#end
+#genOpml( $folder 0 )
+</body>
+</opml>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/rss.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/rss.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/rss.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/rss.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,37 @@
+$pageHelper.setContentType("application/rss+xml;charset=utf-8")<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<channel>
+  <title>$utilities.textToHTML($website.name,true)</title>
+  <link>$websiteURL</link>
+  <description>$utilities.textToHTML($website.description,true)</description>
+  <language>en-us</language>
+  <copyright>Copyright #formatDate("yyyy" $now)</copyright>
+  <lastBuildDate>$utilities.formatRfc822Date($updateTime)</lastBuildDate>
+  <generator>Roller Weblogger #showVersion() ($rollerBuildTime:$rollerBuildUser)</generator>
+  #set( $entries = $pageModel.getRecentWeblogEntriesArray($entryCount, 'nil') )
+  #foreach( $entry in $entries )
+  <item>
+    <title>$utilities.textToHTML($entry.title,true)</title>
+    #if( $entry.link && !$entry.link.trim().equals("") )
+    <source url="$utilities.textToHTML($entry.link)">$utilities.textToHTML($entry.link)</source>
+    #end
+    <description>#showEntryDescription($entry)</description>
+    <category>$utilities.textToHTML($entry.category.name,true)</category>
+    <link>$absBaseURL$entry.permaLink</link>
+    <guid isPermaLink="true">$absBaseURL$entry.permaLink</guid>
+    #if( $website.allowComments )
+    <comments>$absBaseURL$utilities.textToHTML($entry.commentsLink)</comments>
+    #end
+    <pubDate>$utilities.formatRfc822Date($entry.pubTime)</pubDate>
+    <dc:creator>$utilities.textToHTML($entry.website.user.fullName,true)</dc:creator>
+    #set( $mc_url = $entry.findEntryAttribute("att_mediacast_url") )
+    #set( $mc_type = $entry.findEntryAttribute("att_mediacast_type") )
+    #set( $mc_length = $entry.findEntryAttribute("att_mediacast_length") )
+    #if( $mc_url && $mc_length && $mc_type )
+       <enclosure url="$mc_url" type="$mc_type" length="$mc_length" />
+       #set($mc_url = false) #set($mc_type = false) #set($mc_length = false)
+    #end
+  </item>
+  #end
+</channel>
+</rss>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/rss091.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/rss091.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/rss091.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/rss091.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+$pageHelper.setContentType("text/xml;charset=utf-8")
+<rss version="0.91">
+    <channel>
+    <title>$utilities.textToHTML($website.name,true)</title>
+    <link>$websiteURL</link>
+    <description>$utilities.textToHTML($website.description,true)</description>
+    <language>en-us</language>
+    <copyright>Copyright #formatDate("yyyy" $now)</copyright>
+    <managingEditor>$emailAddress</managingEditor>
+    <webMaster>$emailAddress</webMaster>
+    #set( $entries = $pageModel.getRecentWeblogEntriesArray($entryCount, 'nil') )
+    #foreach( $entry in $entries )
+    <item>
+        <title>$utilities.textToHTML($entry.title,true)</title>
+        <link>$absBaseURL$entry.permaLink</link>
+        <description>#showEntryDescription($entry)</description>
+    </item>
+    #end
+    </channel>
+</rss>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/flavors/rss092.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/flavors/rss092.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/flavors/rss092.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/flavors/rss092.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+$pageHelper.setContentType("text/xml;charset=utf-8")
+<rss version="0.92">
+    <channel>
+    <title>$utilities.textToHTML($website.name,true)</title>
+    <link>$websiteURL</link>
+    <description>$utilities.textToHTML($website.description,true)</description>
+    <lastBuildDate>#formatDate("E, dd MMM yyyy hh:mm:ss z" $updateTime)</lastBuildDate>
+    <docs>$websiteURL</docs>
+    <managingEditor>$emailAddress</managingEditor>
+    <webMaster>$emailAddress</webMaster>
+    <!-- cloud domain="" port="" path="" registerProcedure="" protocol=""/ -->
+    #set( $entries = $pageModel.getRecentWeblogEntriesArray($entryCount, 'nil') )
+    #foreach( $entry in $entries )
+    <item>
+        <description>#showEntryDescription($entry)</description>
+        <!-- source url=""></source -->
+        <!-- enclosure url="" length="" type=""/ -->
+    </item>
+    #end
+    </channel>
+</rss>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/log4j.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/log4j.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/log4j.properties (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/log4j.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1,57 @@
+# Properties for configuring Log4j for this application
+# This is the configuring for logging displayed in the Application Server
+# log4j.rootCategory=INFO, stdout, R, mail
+log4j.rootCategory=INFO, stdout, R
+
+log4j.appender.stdout=org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
+
+# Pattern to output the caller's file name and line number.
+#log4j.appender.stdout.layout.ConversionPattern=%p [%t] [%c] %C{1}.%M(%L) | %m%n
+log4j.appender.stdout.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} | %C{1}:%M | %m%n
+
+log4j.appender.R=org.apache.log4j.RollingFileAppender
+log4j.appender.R.File=${catalina.base}/logs/roller.log
+
+# Keep two 1MB log backup files
+log4j.appender.R.MaxFileSize=1MB
+log4j.appender.R.MaxBackupIndex=2
+
+log4j.appender.R.layout=org.apache.log4j.PatternLayout
+#log4j.appender.R.layout.ConversionPattern=%5p %t %c - %m%n
+log4j.appender.R.layout.ConversionPattern=%-5p %d{yyyy-MM-dd HH:mm:ss,SSS} %C{1}:%M - %m%n
+
+# If programmed properly the most messages would be at DEBUG
+# and the least at FATAL.
+
+# Options are: DEBUG, INFO, WARN, ERROR, FATAL
+log4j.category.org.roller=INFO
+log4j.category.com.ecyrd.jspwiki=ERROR
+log4j.category.com.opensymphony.oscache=ERROR
+log4j.category.net.sf.hibernate=ERROR
+log4j.category.org.roller.business.utils=INFO
+log4j.category.org.apache.struts=ERROR
+log4j.category.org.tuckey.web.filters.urlrewrite=DEBUG
+
+#log4j.category.org.roller.presentation.MainPageAction=DEBUG
+#log4j.category.org.roller.presentation.pagecache.rollercache.LRUCacheHandler=DEBUG
+#log4j.category.org.roller.presentation.filters.IfModifiedFilter=DEBUG
+#log4j.category.org.roller.persistence.hibernate.HibernateStrategy=DEBUG
+
+# Tomcat's ClientAbortExceptions cause Velocity to talk way
+# too much so by default Velocity is set to STFU mode.
+log4j.category.org.apache.velocity=FATAL
+
+# Configuration for receiving e-mails when ERROR messages occur.
+#log4j.appender.mail=org.apache.log4j.net.SMTPAppender
+#log4j.appender.mail.To=you@yours.com
+#log4j.appender.mail.From=you@yours.com
+#log4j.appender.mail.SMTPHost=127.0.0.1
+#log4j.appender.mail.Threshold=ERROR
+#log4j.appender.mail.BufferSize=1
+#log4j.appender.mail.Subject=Roller Exception
+
+#log4j.appender.mail.layout=org.apache.log4j.PatternLayout
+#log4j.appender.mail.layout.ConversionPattern=%p [%d{yyyy-MM-dd HH:mm:ss,SSS}] %C{1}.%M(%L) | %m%n
+
+

Added: incubator/roller/trunk/web/WEB-INF/classes/menu-tabbed.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/menu-tabbed.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/menu-tabbed.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/menu-tabbed.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,55 @@
+
+
+<table class="tmTabTable" cellspacing="0" >
+<tr>
+  #foreach( $menu in $menuModel.getMenus() )
+    #if( $menu.isPermitted( $req ) )
+	    #if( $menu.isSelected( $req ) )
+	  	<td class="tmSelectedSepLeft"></td>
+	    <td class="tmSelectedMenu">
+	    #else
+	  	<td class="tmSepLeft"></td>
+	    <td class="tmMenu">
+	    #end
+	
+	    <a href="$menu.getUrl( $ctx )">$text.get( $menu.getName() )</a> 
+	
+	    </td>
+	    #if( $menu.isSelected( $req ))
+	  	<td class="tmSelectedSepRight"></td>
+	    #else
+	  	<td class="tmSepRight"></td>
+	    #end
+    #end
+  #end
+</tr>
+</table>
+
+<table class="tmItemTable" cellspacing="0">
+<tr>
+  <td class="tmItemLeft"></td>
+  <td class="tmItemCell">
+  #set( $count = 0 )
+  #set( $currentMenu = $menuModel.getSelectedMenu( $req ) )
+  #if( $currentMenu.isPermitted( $req ) ) 
+    #foreach( $item in $currentMenu.getMenuItems() )
+      #if ($item.isPermitted($req))
+          #if ( $count > 0 )
+            &nbsp;|&nbsp; 
+          #end
+    
+          #if ( $item.isSelected( $req ) )
+          <a class="tmItemLinkSelected" href="$item.getUrl($ctx)">$text.get( $item.getName() )</a> 
+    	      #else
+          <a class="tmItemLink" href="$item.getUrl($ctx)">$text.get( $item.getName() )</a> 
+          #end
+    
+          #set( $count = $count + 1 )
+      #end
+    #end
+  #end
+  </td>
+  <td class="tmItemRight"></td>
+</tr>
+</table>
+

Added: incubator/roller/trunk/web/WEB-INF/classes/navbar-css.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/navbar-css.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/navbar-css.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/navbar-css.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,18 @@
+#if( $req.getUserPrincipal() )
+    <ul class="rMenu">
+    #foreach( $menu in $menuModel.getMenus() )
+        #if ($menu.isPermitted($req))
+            #foreach( $item in $menu.getMenuItems() )
+               #if ($menu.isPermitted($req))
+                   #if( $item.isSelected( $req ) )<strong>#end
+                   <li class="rMenuItem"><a
+                      href="$item.getUrl( $ctx )"
+                      title="$text.get( $menu.getName() ):$text.get( $item.getName() )"
+                      >$text.get( $menu.getName() ):$text.get( $item.getName() )</a></li>
+                   #if( $item.isSelected( $req ) )</strong>#end
+               #end
+            #end
+        #end
+    #end
+    </ul>
+#end
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/navbar-horizontal.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/navbar-horizontal.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/navbar-horizontal.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/navbar-horizontal.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,22 @@
+
+#set($count = 0)
+#foreach($menu in $menuModel.getMenus())
+    #if ($menu.isPermitted($req))
+       #foreach( $item in $menu.getMenuItems())
+           #if ($menu.isPermitted($req))
+               #if ($count > 0)
+               &nbsp;|&nbsp;
+               #end
+               #if($item.isSelected( $req ))
+               <b>
+               #end
+               <a href="$item.getUrl( $ctx )">$text.get($item.getName())</a>
+               #if($item.isSelected( $req ))
+               </b>
+               #end
+               #set($count = $count + 1)
+           #end
+       #end
+    #end
+#end
+

Added: incubator/roller/trunk/web/WEB-INF/classes/navbar-vertical.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/navbar-vertical.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/navbar-vertical.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/navbar-vertical.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,16 @@
+#foreach( $menu in $menuModel.getMenus() )
+    #if ($menu.isPermitted($req))
+        #foreach( $item in $menu.getMenuItems() )
+            #if ($menu.isPermitted($req))
+                #if( $item.isSelected( $req ) )
+                <b>
+                #end
+                <a href="$item.getUrl( $ctx )">$text.get( $menu.getName() ):$text.get( $item.getName() )</a> <br />
+                #if( $item.isSelected( $req ) )
+                </b>
+                #end
+            #end
+        #end
+    #end
+#end
+

Added: incubator/roller/trunk/web/WEB-INF/classes/navbar.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/navbar.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/navbar.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/navbar.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,128 @@
+#**
+ * Macros to display the Roller Navigation bars.
+ * @author Lance Lavandowska (conversion to Velocimacros)
+ *#
+
+#**
+ * Show menu using specified model file and Velocity template.
+ * @param $model Name of XML file in WEB-INF that contains XML for menu.
+ * @param $template Name of Velocity template to display menu.
+ *#
+#macro( showMenu $model $template )
+    $pageHelper.showMenu($model, $template)
+#end
+
+#**
+ * Show Roller Editor Navigation Bar.
+ * @param vertical True if bar is to be displayed vertically.
+ *#
+#macro( showEditorNavBar $vertical )
+    $pageHelper.showEditorNavBar($vertical)
+#end
+
+#**
+ * Show Editor navbar using CSS friendly template.
+ *#
+#macro( showEditorMenu )
+    $pageHelper.showMenu("editor-menu.xml", "/navbar-css.vm")
+#end
+
+#**
+ * Print a link for a menu item.  Take into consideration:
+ * 1. Should this be particularly CSS friendly.
+ * 2. Or is this specifically a vertical menu.
+ * 3. Otherwise use the specified delimiter.
+ *
+ * @param linkUrl The URL to be used in the href attribute.
+ * @param linkValue The value used to look up the link's label.
+ * @param useCSS  Use CSS based formatting.
+ * @param vertical Use "hard-formatting" to create vertical menu.
+ * @param delimiter Seperate horizontal items with this value.
+ *#
+#macro( printNavLink $linkUrl $linkValue $useCSS $vertical $delimiter )
+    #if( $useCSS )<li class="rNavItem">
+    #elseif( $vertical ) <br />
+    #else $delimiter
+    #end<a href="$linkUrl">$linkValue</a>#if ($useCSS)</li>#end
+#end
+
+#**
+ * Show Roller Page Navigation Bar, includes links to all pages
+ * except those that are hidden (because the start with "_").
+ * @param vertical True if bar is to be displayed vertically.
+ * @param delimiter Delimiter between entries in bar.
+ *#
+#macro( showNavBar2 $vertical $delimiter $useCSS)
+    #set( $container = "div" )
+    #if ( $useCSS ) #set( $container = "ul" ) #end
+    #set( $rawUrl = "$ctxPath/page/$userName" )
+    <$container class="rNavigationBar">
+    #if ($siteName=="Main")
+        #set( $mainUrl = "$ctxPath?rmk=tabbedmenu.main&amp;rmik=tabbedmenu.main" )
+        #printNavLink( $mainUrl $text.get("navigationBar.main") $useCSS $vertical "" )
+    #else
+        #printNavLink( "$ctxPath/" $siteName $useCSS $vertical "" )
+    #end
+    #if( $website )
+        #foreach( $iPage in $pages )
+            #set( $invisible = $iPage.Name.startsWith("_") )
+            ## Again, there is no "break" in Velocity
+            #if( !$invisible )
+                #set( $isSelected = false )
+                #if( $page && $iPage.Id == $page.Id && !$editorui) #set($isSelected = true) #end
+
+                #if( !$isSelected )
+                    #printNavLink( "$rawUrl/$iPage.Link" $iPage.Name $useCSS $vertical $delimiter )
+                #else
+                    #if( $useCSS )<li class="rNavItem">
+                    #elseif( $vertical ) <br />
+                    #else $delimiter
+                    #end
+                    $iPage.Name
+                #end
+            #end
+        #end
+    #end
+
+    ## strutsUrlHelper( useIds, isAction, path, val1, val2)
+    #if( $model.isUserAuthorizedToEdit() )
+        #set( $editUrl = $rawUrl )
+        #set( $editUrl = $pageHelper.strutsUrlHelper(false, true, "weblogCreate", "tabbedmenu.weblog", "tabbedmenu.weblog.newEntry") )
+        #printNavLink( $editUrl $text.get("navigationBar.newEntry") $useCSS $vertical $delimiter )
+
+        #set( $editUrl = $rawUrl )
+        #set( $editUrl = $pageHelper.strutsUrlHelper(false, true, "editWebsite", "tabbedmenu.website", "tabbedmenu.website.settings") )
+        #printNavLink( $editUrl $text.get("navigationBar.settings") $useCSS $vertical $delimiter )
+
+        #set( $editUrl = $rawUrl )
+        #set( $editUrl = $pageHelper.strutsUrlHelper(false, true, "logout-redirect", "", "") )
+        #printNavLink( $editUrl $text.get("navigationBar.logout") $useCSS $vertical $delimiter )
+    #else
+        #set( $editUrl = $pageHelper.strutsUrlHelper(false, true, "login-redirect", "", "") )
+        #printNavLink( $editUrl $text.get("navigationBar.login") $useCSS $vertical $delimiter )
+    #end
+    </$container >
+#end
+
+#**
+ * Backwards compatibility version.
+ *#
+#macro( showNavBar $vertical $delimiter )
+    #showNavBar2( $vertical $delimiter false)
+#end
+
+#**
+ * Show Roller Page Navigation Bar with "|" delimiter, includes links to all pages
+ * except those that are hidden (because the start with "_").
+ * @param vertical True if bar is to be displayed vertically.
+ *#
+#macro( showBasicNavBar $vertical )
+    #showNavBar2( $vertical '|' false )
+#end
+
+#**
+ * Create CSS friendly Navigation Bar, using Unordered List and List Item tags.
+**#
+#macro( showCssNavBar )
+    #showNavBar2( false '' true)
+#end

Added: incubator/roller/trunk/web/WEB-INF/classes/newsfeed.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/newsfeed.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/newsfeed.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/newsfeed.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,63 @@
+#**
+ * Macros to display RSS Newschannels.
+ * @author Lance Lavandowska (conversion to Velocimacros)
+ * @author Dave Johnson (conversion from Digestor to Flock)
+ *#
+
+#**
+ * Display an RSS newschannel as a list that may be styled via CSS.
+ * @param feedUrl URL of RSS newschannel you wish to display.
+ * @param showDescription True to show full content for each item in channel.
+ * @param maxItems Maximum number of news items to display from newschannel.
+ * @param expandingFolders True to display channel as a folding folder.
+ *#
+#macro( showNewsfeed $feedUrl $showDescription $maxItems $expandingFolders )
+#set( $channel = $newsfeedCache.getChannel( $feedUrl ) )
+#if( $channel )
+    #set( $channelId = $utilities.stringReplace( $channel.title, " ", "_" ) )
+    #set( $channelId = $utilities.stringReplace( $channelId, "'", "_" ) )
+    #if( $expandingFolders )
+        <div class="rNewsfeedTitle">
+           <a href="javascript:toggleFolder('$channelId')">
+           <span id="i$channelId">+</span> $channel.title</a>
+        </div>
+        <div id="$channelId" style="display:none">
+    #else
+        <span class="rNewsfeedTitle">$channel.title</span>
+    #end
+    <ul>
+    #foreach( $item in $channel.entries )
+        ## NOTE: Velocity does not have "break" command
+        #if ( $maxItems == -1 || $velocityCount <= $maxItems )
+            <li>#if( $item.title && $item.title!="<No Title>" && $item.guid )
+                <a class="rNewsfeedLink" href="$item.guid.location">$item.title</a>
+            #elseif( $item.title && $item.title!="<No Title>" && $item.link )
+                <a class="rNewsfeedLink" href="$item.link">$item.title</a>
+            #elseif( $item.description && $item.guid )
+                <a class="rNewsfeedLink" href="$item.guid.location">$utilities.truncateNicely($utilities.removeHTML($item.description.value),25,30,"...")</a>
+            #elseif($item.description && $item.link)
+                <a class="rNewsfeedLink" href="$item.link">$utilities.truncateNicely($utilities.removeHTML($item.description.value),25,30,"...")</a>
+            #elseif( $item.title )
+                <span class="rNewsfeedLink">$item.title</span>
+            #else
+                <span class="rNewsfeedLink">$utilities.truncateNicely($utilities.removeHTML($item.description.value),25,30,"...")</span>
+            #end
+            #if( $showDescription && $item.description )
+                <span class="rNewsfeedDesc">$item.description</span>
+            #end</li>
+        #end
+    #end
+    </ul>
+    #if( $expandingFolders )
+        </div>
+        <script type="text/javascript">
+        <!--
+        folderPreference("$channelId");
+        // -->
+        </script>
+    #end
+#else
+    <div class="rNewsfeedTitle">Unable to display <a href="$feedUrl">feed</a></div>
+#end
+#end
+

Added: incubator/roller/trunk/web/WEB-INF/classes/planetrss.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/planetrss.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/planetrss.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/planetrss.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/">
+<channel>
+  <title>$utilities.textToHTML($planet.configuration.title,true)</title>
+  <description>Aggregated Feed generated by Roller Planet aggregator</description>
+  <link>$utilities.textToHTML($planet.configuration.siteUrl)</link>
+  <lastBuildDate>$utilities.formatRfc822Date($planet.lastUpdated)</lastBuildDate>
+  <generator>Roller Planet 1.1-dev</generator>
+  #if($groupName)
+     #set($entries = $planet.getAggregation($groupName,50))
+  #else
+     #set($entries = $planet.getAggregation(50))
+  #end
+  #foreach( $entry in $entries )
+  <item>
+    #if($entry.title)<title>$utilities.textToHTML($entry.title,true)</title> #end
+    #if($entry.content)
+       <description>
+       $utilities.escapeHTML($utilities.truncate($entry.content,300,320,"...")) [&lt;a href="$utilities.textToHTML($entry.permalink,true)"&gt;Read More&lt;/a&gt;]
+       </description> 
+    #end
+    #if($entry.categories)
+        #foreach($cat in $entry.categories)
+     	   <category>$utilities.textToHTML($cat,true)</category>
+     	#end
+    #end
+    #if($entry.permalink)<link>$utilities.textToHTML($entry.permalink)</link> #end
+    <pubDate>$utilities.formatRfc822Date($entry.published)</pubDate>
+    #if($entry.author)
+       <dc:creator>$utilities.textToHTML($entry.author,true)</dc:creator>
+    #end
+  </item>
+  #end
+</channel>
+</rss>

Added: incubator/roller/trunk/web/WEB-INF/classes/popupcomments.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/popupcomments.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/popupcomments.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/popupcomments.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,71 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <title>#showWebsiteTitle() :: $text.get("comments.title") ::
+        $utilities.removeHTML($entry.title)
+    </title>
+    <script type="text/javascript"
+        src="$ctxPath/theme/scripts/roller.js"></script>
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/theme/layout.css" />
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/theme/roller.css" />
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/theme/menu.css" />
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/themes/base.css" />
+    <style type="text/css">
+    body {
+        background-color: #FFFFFF;
+        background-image: none;
+        color: #000000;
+        font-family: verdana, sans-serif;
+        font-size: small;
+    }
+    h3 {
+        margin-left: auto;
+        margin-right: auto;
+        text-align: center;
+    }
+    #footer {
+        display: none;
+    }
+    th {
+        vertical-align: middle;
+        text-align: right;
+        padding-right: 5px;
+        font-size: 12px;
+    }
+    </style>
+    <!-- Edit your _css Page Template -->
+    <link rel="stylesheet" type="text/css"
+         href="$ctxPath/page/$userName/_css" />
+</head>
+<body>
+
+<div class="commentTitle">
+    $utilities.removeHTML($entry.title)
+</div>
+
+<div class="comments">
+#showComments($entry)
+#if($website.allowComments && $entry.commentsStillAllowed)
+    #showCommentForm($entry)
+#else
+    $text.get("comments.disabled")
+#end
+</div>
+
+<div id="footer">       
+<a href="http://opensource.atlassian.com/projects/roller/Dashboard.jspa">
+   <fmt:message key="footer.reportIssue" /></a> | 
+<a href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=UserGuide">
+   <fmt:message key="footer.userGuide" /></a> | 
+<a href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=RollerMacros">
+   <fmt:message key="footer.macros" /></a> | 
+<a href="http://sourceforge.net/mail/?group_id=47722">
+   <fmt:message key="footer.mailingLists" /></a>
+</div>      
+</div>  
+</body>
+</html>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/referer.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/referer.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/referer.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/referer.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,79 @@
+#**
+ * Macros to display referers and Linkbacks.
+ * @author  Lance Lavandowska (conversion to Velocimacros)
+ *#
+
+#**
+ * Internal macro to build and display a link to a referer, use showReferers instead.
+ *#
+#macro( refererDisplayUrl $ref $maxWidth $includeHits )
+    #set( $qq = '"' )
+    #set( $url = $utilities.escapeHTML( $ref.RefererUrl ) )
+    #set( $displayUrl = $url )
+    #set( $restOfUrl = "" )
+    #set( $displayLink = "" )
+    #if ( $displayUrl.startsWith("http://") )
+        #set( $displayUrl = $displayUrl.substring( 7 ) )
+    #end
+    #if ( $displayUrl.length() > $maxWidth )
+        #set( $restOfUrl = "...$displayUrl.substring($maxWidth, $displayUrl.length())" )
+        #set( $displayUrl = $displayUrl.substring(0, $maxWidth) )
+    #end
+    #if ( $url.startsWith("http://") )
+        #set( $displayLink = "<a rel=${qq}nofollow${qq} href=${qq}$url${qq}" )
+        #if ( $restOfUrl )
+            #set( $displayLink = "$displayLink title=${qq}$restOfUrl${qq}" )
+        #end
+        #set( $displayLink = "$displayLink >" )
+    #end
+    #set( $displayLink = "$displayLink$displayUrl" )
+    #if ( $includeHits )
+        #set( $displayLink = "$displayLink ($ref.DayHits)" )
+    #end
+    #if ( $url.startsWith("http://") )
+        #set( $displayLink = "$displayLink</a>" )
+    #end
+    $displayLink
+#end
+
+#**
+ * Show top referers for today.
+ * @param max Number of referers to display.
+ * @param maxWidth Maximum width of referer text to be displayed.
+ *#
+#macro( showReferers $max $maxWidth )
+    <p>$text.get( "macro.referer.todaysHits" ) $pageModel.getDayHits()</p>
+    #set( $refs = $pageModel.getTodaysReferers() )
+    <ul class="rReferersList">
+    #foreach( $ref in $refs )
+        #if ($velocityCount <= $max)
+        <li class="rReferersListItem">#refererDisplayUrl( $ref $maxWidth true)</li>
+        #end
+    #end
+    </ul>
+#end
+
+#**
+ * Display the Linkbacks that have been extracted for a specified day.
+ * @param day Date object that specifies day (type java.util.Date).
+ *#
+#macro( showLinkbacks $day )
+    #set( $date = "#formatDate($plainFormat $day )" )
+    #set( $refs = $pageModel.getReferers($date) )
+    #if ( $refs.size() > 0 )
+       <p>
+       <b>$text.get( "macro.referer.furtherReading" )</b></p>
+       <ul>
+       #foreach( $ref in $refs )
+          #set( $url = $utilities.escapeHTML( $ref.getUrl() ) )
+          <li> $pageHelper.getToggleLinkbackDisplayHTML($ref)
+             <a class="linkback" href="$url">$ref.getTitle()</a>
+          #if( $ref.getVisible() )
+             : $utilities.removeHTML( $ref.getExcerpt() )
+          #end
+          </li>
+       #end
+       </ul>
+    #end
+#end
+

Added: incubator/roller/trunk/web/WEB-INF/classes/roller.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/roller.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/roller.properties (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/roller.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1,198 @@
+# roller.properties
+#
+# This file is for meant for Roller deployment properties
+# Any properties that don't change at runtime are defined here
+#
+# You can override the values in this file in a couple ways ..
+#   1. define a roller-custom.properties file and place it somewhere
+#       at the root of one of your classpath locations.
+#       for example:
+#           $TOMCAT_HOME/common/classes
+#           $ROLLER_LOCATION/WEB-INF/classes
+#
+#   2. specify a custom properties file via jvm option
+#       example:
+#           roller.custom.config=/path/to/properties/file
+#
+#   **NOTE: if you run multiple instances of roller on the same server
+#           then you should beware of the fact that the override options above
+#           may affect *all* of you running instances.  if you want to do
+#           custom overrides for each instance then you must do it by
+#           placing a roller-custom.properties file at WEB-INF/classes/ in
+#           each of you roller installations.
+#
+# properties in this file are accessed like this ...
+#    RollerConfig.getProperty("propname");
+
+#----------------------------------
+
+# upload settings
+uploads.dir=${user.home}/roller_data/uploads
+uploads.url=/resources
+
+#----------------------------------
+
+# search index settings
+search.index.dir=${user.home}/roller_data/search-index
+
+#----------------------------------
+
+# cache settings, remember ... times are in milliseconds
+
+# number of RSS feeds to cache  (and timeout)
+cache.filter.rss.size=100
+cache.filter.rss.timeout=3600
+
+# number of if-modified dates to cache (and timeout)
+cache.filter.ifmodified.size=100
+cache.filter.ifmodified.timeout=1800
+
+# number of blog pages to cache (and timeout)
+cache.filter.page.size=100
+cache.filter.page.timeout=3600
+
+#----------------------------------
+
+# secure login configs
+securelogin.enabled=false
+
+# these are only used if secure login is enabled
+securelogin.http.port=80
+securelogin.https.port=443
+#securelogin.https.headername=X-SSL
+#securelogin.https.headervalue=
+
+# password security settings
+passwds.encryption.enabled=false
+passwds.encryption.algorithm=SHA
+
+#----------------------------------
+
+# enabled plugins ... remember, order does matter!!
+
+# these are plugins available for a weblog
+plugins.page=\
+org.roller.presentation.velocity.plugins.topictag.TopicTagPlugin \
+,org.roller.presentation.velocity.plugins.textile.TextilePlugin \
+,org.roller.presentation.velocity.plugins.acronyms.AcronymsPlugin \
+,org.roller.presentation.velocity.plugins.bookmarks.BookmarkPlugin \
+,org.roller.presentation.velocity.plugins.email.ObfuscateEmailPlugin \
+,org.roller.presentation.velocity.plugins.smileys.SmileysPlugin \
+,org.roller.presentation.velocity.plugins.readmore.ReadMorePlugin
+
+#----------------------------------
+
+# scheduled tasks, each is comma separated list of classes
+
+tasks.daily=org.roller.presentation.BlacklistUpdateTask\
+,org.roller.presentation.TurnoverReferersTask\
+
+#,org.roller.presentation.planet.SyncWebsitesTask
+
+tasks.hourly=\
+
+#org.roller.presentation.planet.RefreshEntriesTask
+
+#----------------------------------
+
+# velocity settings
+velocity.properties=/WEB-INF/velocity.properties
+velocity.toolbox.file=/WEB-INF/toolbox.xml
+
+# Page model implementation
+velocity.pagemodel.classname=org.roller.presentation.velocity.PageModel
+# Experimental page model that allows user's access to planet aggregations
+#velocity.pagemodel.classname=org.roller.presentation.velocity.planet.PlanetPageModel
+
+#----------------------------------
+
+# persistence settings
+persistence.roller.classname=org.roller.business.hibernate.HibernateRollerImpl
+persistence.filemanager.classname=org.roller.business.FileManagerImpl
+
+# authenticator settings (experimental)
+authenticator.classname=org.roller.presentation.DefaultAuthenticator
+
+#----------------------------------
+
+# comment settings
+comment.authenticator.classname=org.roller.presentation.velocity.DefaultCommentAuthenticator
+comment.notification.separateOwnerMessage=false
+comment.notification.hideCommenterAddresses=false
+
+#----------------------------------
+
+# ping settings
+
+# The number of attempts to try to reach a ping target before refusing to requeue it for further retrials
+# If absent, this defaults to 3.
+pings.maxPingAttempts=3
+
+# The interval between ping queue processing runs in minutes.  Must be between 0 and 120.
+# If set to 0, ping queue processing is disabled on this server; this is for clustered environments.
+# Make sure it is nonzero on one host in a cluster.  Don't use the value 0 here to disable ping functionality,
+# you will instead get an infinitely growing ping queue.  See the documentation on the properties below
+# to disable ping functionality if you need to.
+# If absent, this defaults to 5.
+pings.queueProcessingIntervalMins=5
+
+# The set of initial common ping targets.  This is used to initialize the database if there are no common
+# ping targets at startup.  Ping targets are specified as a comma-separated list, each target in the form
+# {{name}{url}}.  To disable initialization of common ping targets, comment this out, or set it to the
+# empty value.  Common targets can be edited in the UI; this is just used to set up some typical ones.
+pings.initialCommonTargets=\
+{{Technorati}{http://rpc.technorati.com/rpc/ping}}\
+,{{Weblogs.com}{http://rpc.weblogs.com/RPC2}}\
+,{{blo.gs}{http://ping.blo.gs/}}\
+,{{java.blogs}{http://javablogs.com/xmlrpc}}\
+,{{blogrolling.com}{http://rpc.blogrolling.com/pinger/}}
+
+# This controls whether users are allowed to add custom ping targets.  Set this to false to disallow adding custom
+# targets; if false, the Weblog:Custom Ping Targets menu item will not appear and associated actions will result in
+# access denied messages.  Leave this false or commented for normal behavior.
+# CAUTION: Setting this to true will cause the server to remove all users' existing custom targets on startup.
+pings.disallowCustomTargets=false
+
+# This controls whether the Weblog:Pings menu item and its associated actions are enabled.  Set this to false to
+# disallow users from configuring autopings and doing manual pings.  If absent, this defaults to true.
+# NOTE: There is a separate runtime property (configurable from the Admin:Configuration page, that can be used to
+# suspend ping processing without disabling the UI.
+# CAUTION: Setting this to true will cause the server to remove all users' existing autoping
+# configurations on startup. Leave this false or commented for normal behavior.
+pings.disablePingUsage=false
+
+# Setting both pings.disallowCustomTarget=true and pings.disablePingUsage=true will effectively disable
+# the ping functionality.
+
+# This is used for debugging the ping mechanism in Roller.  If this is set to true,
+# pings that would normally be sent will cause log messages to be sent but will
+# NOT actually result in real pings being sent.  Leave this false or commented for normal behavior.
+pings.logOnly=false
+
+
+#----------------------------------
+
+# misc settings
+
+# Set to true to show the Planet tab in the Roller menu (only admins will see it)
+planet.aggregator.enabled=false
+
+loginfilter.rememberme.enabled=true
+breadcrumbs.stacksize=3
+debug.memory.enabled=false
+
+# settings for the rss aggregator (not related to planet stuff)
+aggregator.enabled=true
+aggregator.cache.enabled=true
+aggregator.cache.timeout=14400
+
+#---------------------------------
+# settings for various plugins
+
+# Optional site-wide customization settings for the TopicTag plugin.
+# n.b. these default settings match the coded default values that would be applied if these were omitted.
+org.roller.presentation.velocity.plugins.topictag.TopicTagPlugin.defaultTopicBookmarkName=Default Topic Site
+org.roller.presentation.velocity.plugins.topictag.TopicTagPlugin.defaultTopicSite=http://www.technorati.com/tag
+org.roller.presentation.velocity.plugins.topictag.TopicTagPlugin.tagRegexWithBookmark=topic:\\{(.*?)\\}\\[(.*?)\\]
+org.roller.presentation.velocity.plugins.topictag.TopicTagPlugin.tagRegexWithoutBookmark=topic:\\[(.*?)\\]
+org.roller.presentation.velocity.plugins.topictag.TopicTagPlugin.linkFormatString=<a rel=\"tag\" href=\"{0}{1}\">{2}</a>

Added: incubator/roller/trunk/web/WEB-INF/classes/roller.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/roller.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/roller.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/roller.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,96 @@
+#**
+ * General purpose, or not user-specific, macros.
+ * @author  Lance Lavandowska (conversion to Velocimacros)
+ *#
+
+#**
+ * General purpose date formatter. Need to be careful of whitespace.
+ * @param dateFormat Date format to be used (see java.text.SimpleDateFormat).
+ * @param date Date object to be formatted (see java.util.Date).
+ *#
+#macro( formatDate $dateFormat $date )$dateFormatter.applyPattern($dateFormat)#if ($date)$dateFormatter.format( $date )#else$dateFormat#end#end
+
+#**
+ * Show Roller version number string.
+ *#
+#macro( showVersion )$rollerVersion#end
+
+#**
+ * Show path to common images directory.
+ *#
+#macro( showImagePath )$ctxPath/images#end
+
+#**
+ * Show path to a theme directory.
+ * @param theme Name of the theme.
+ *#
+#macro( showThemePath $theme )$ctxPath/themes/$theme#end
+
+#**
+ * Show path to a theme image.
+ * @param theme Name of the theme.
+ * @param imageName Name of the image.
+ *#
+#macro( showThemeImagePath $theme $imageName )#showThemePath($theme)/images/$imageName#end
+
+#**
+ * Shows an IMG tag for a theme image.
+ * @param theme Name of the theme.
+ * @param imageName Name of the image.
+ *#
+#macro( showThemeImage $theme $imageName )
+<img alt="$imageName" src="#showThemeImagePath($theme $imageName)" />#end
+
+#**
+ * Shows path to a file in a theme's style directory.
+ * @param theme Name of the theme.
+ * @param stylesheet Name of the file.
+ *#
+#macro( showThemeStylePath $theme $stylesheet )#showThemePath($theme)/styles/$stylesheet#end
+
+#**
+ * Shows a STYLE or LINK REL tag for a file in a theme's style directory.
+ * @param theme Name of the theme.
+ * @param stylesheet Name of the file.
+ * @param useImport true to use STYLE tag, otherwhise uses LINK REL
+ *#
+#macro( showThemeStyle $theme $stylesheet $useImport )
+#if ($useImport)
+<style type="text/css">
+@import url(#showThemeStylePath($theme $stylesheet));
+</style>
+#else
+<link rel="stylesheet" type="text/css" href="#showThemeStylePath($theme $stylesheet)" />
+#end
+#end
+
+#**
+ * Shows a STYLE tag a file in a theme's style directory.
+ * @param theme Name of the theme.
+ * @param stylesheet Name of the file.
+ * @param useImport true to use STYLE tag, otherwhise uses LINK REL
+ *#
+#macro( showThemeStyleImport $theme $stylesheet )#showThemeStyle($theme $stylesheet true)#end
+
+#**
+ * Shows path to a file in a theme's scripts directory.
+ * @param theme Name of the theme.
+ * @param scriptFile Name of the file.
+ *#
+#macro( showThemeScriptPath $theme $scriptFile )#showThemePath($theme)/scripts/$scriptFile#end
+
+#**
+ * Shows SCRIPT tag for a file in a theme's scripts directory.
+ * @param theme Name of the theme.
+ * @param scriptFile Name of the file.
+ *#
+#macro( showThemeScript $theme $scriptFile )
+<script type="text/javascript" src="#showThemeScriptPath($theme $scriptFile)"></script>
+#end
+
+#**
+ * Evaluate string as a Velocity template.
+ * @param str String to be evaluated.
+ *#
+#macro( evaluateString $str )$pageHelper.evaluateString( $str )#end
+

Added: incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/rollerRuntimeConfigDefs.xml Wed Jun  8 20:18:46 2005
@@ -0,0 +1,140 @@
+<?xml version="1.0" encoding="ISO-8859-1" ?>
+
+<!--
+  This file defines what properties are made available to get/set
+  during the running of the Roller application.  These properties
+  are stored in the database and the code *must* be able to make
+  use of changed values during runtime.
+  
+  Also included in this file is meta-data which defines what class
+  of property we are dealing with, it's default value, and information
+  on how to populate the display that allows for changing the value.
+  
+  NOTE: order does matter!!  the display is populated in a linear fashion
+	starting from the first display-group and moving down.
+-->
+
+<runtime-configs> 
+
+ <!--
+   The global-properties represents the base set of roller runtime properties.
+   In *most* cases you should be putting your properties here and they can
+   then be changed from the admin configuration page at ...
+        /admin/rollerConfig.do
+ -->
+ <config-def name="global-properties">
+
+   <!-- Site Settings Group -->
+   <display-group name="siteSettings" key="configForm.siteSettings" >
+   
+      <property-def  name="site.name"  key="configForm.siteName">
+         <type>string</type>
+	 <default-value>Roller Site</default-value>
+      </property-def>
+      <property-def  name="site.description"  key="configForm.siteDescription">
+         <type>string</type>
+	 <default-value>Roller Site</default-value>
+      </property-def>
+      <property-def  name="site.adminemail"  key="configForm.siteAdminEmail">
+         <type>string</type>
+	 <default-value></default-value>
+      </property-def>
+      <property-def  name="site.absoluteurl"  key="configForm.absoluteUrl">
+         <type>string</type>
+	 <default-value></default-value>
+      </property-def>
+      <property-def name="site.linkbacks.enabled" key="configForm.enableLinkback">
+         <type>boolean</type>
+	 <default-value>false</default-value>
+      </property-def>
+      <property-def name="pings.suspendPingProcessing" key="configForm.suspendPingProcessing">
+         <type>boolean</type>
+	 <default-value>false</default-value>
+      </property-def>
+      
+   </display-group >
+
+   <!-- User Settings Group -->
+   <display-group name="userSettings" key="configForm.userSettings" >
+   
+      <property-def  name="users.registration.enabled"  key="configForm.allowNewUsers">
+         <type>boolean</type>
+	 <default-value>true</default-value>
+      </property-def>
+      <property-def  name="users.themes.path"  key="configForm.newUserThemes">
+         <type>string</type>
+	 <default-value>/themes</default-value>
+      </property-def>
+      <property-def  name="users.editor.pages"  key="configForm.editorPages">
+         <type>text</type>
+	 <default-value>editor-ekit.jsp,editor-text.jsp,editor-dhtml.jsp,editor-text-js.jsp,editor-wiki-js.jsp,editor-rte.jsp</default-value>
+         <rows>3</rows>
+         <cols>40</cols>
+      </property-def>
+      <property-def  name="users.comments.autoformat"  key="configForm.autoformatComments">
+         <type>boolean</type>
+	 <default-value>true</default-value>
+      </property-def>
+      <property-def  name="users.comments.escapehtml"  key="configForm.escapeCommentHtml">
+         <type>boolean</type>
+	 <default-value>false</default-value>
+      </property-def>
+      <property-def  name="users.comments.emailnotify"  key="configForm.emailComments">
+         <type>boolean</type>
+	 <default-value>true</default-value>
+      </property-def>
+
+   </display-group >
+   
+   <!-- File Upload Settings Group -->
+   <display-group name="uploadSettings" key="configForm.fileUploadSettings" >
+   
+      <property-def  name="uploads.enabled"  key="configForm.enableFileUploads">
+         <type>boolean</type>
+	 <default-value>true</default-value>
+      </property-def>
+      <property-def  name="uploads.types.allowed"  key="configForm.allowedExtensions">
+         <type>string</type>
+	 <default-value>jpg,jpeg,gif,png</default-value>
+      </property-def>
+      <property-def  name="uploads.types.forbid"  key="configForm.forbiddenExtensions">
+         <type>string</type>
+	 <default-value></default-value>
+      </property-def>
+      <property-def  name="uploads.file.maxsize"  key="configForm.maxFileSize">
+         <type>string</type>
+	 <default-value>1.00</default-value>
+      </property-def>
+      <property-def  name="uploads.dir.maxsize"  key="configForm.maxDirSize">
+         <type>string</type>
+	 <default-value>4.00</default-value>
+      </property-def>
+
+   </display-group >
+   
+   <!-- Debugging Settings Group -->
+   <!--
+   <display-group name="debuggingSettings" key="configForm.debuggingSettings" >
+   
+      <property-def  name="debug.memory.enabled"  key="configForm.enableMemoryDebugging">
+         <type>boolean</type>
+      </property-def>
+
+   </display-group >
+   -->
+   
+   <!-- Spam Prevention Settings Group -->
+   <display-group name="spamSettings" key="websiteSettings.spamPrevention" >
+   
+      <property-def  name="spam.referers.ignorewords"  key="websiteSettings.ignoreUrls">
+         <type>text</type>
+	 <default-value></default-value>
+         <rows>7</rows>
+         <cols>40</cols>
+      </property-def>
+
+   </display-group >
+   
+ </config-def>
+ 
+</runtime-configs>

Added: incubator/roller/trunk/web/WEB-INF/classes/rome.properties
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/rome.properties?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/rome.properties (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/rome.properties Wed Jun  8 20:18:46 2005
@@ -0,0 +1,43 @@
+
+# Some RSS 0.91 feeds have pubDates in items
+
+WireFeedParser.classes=org.roller.util.rome.PlanetRSS091UParser \
+	                   org.roller.util.rome.PlanetRSS091NParser    
+	                                
+Converter.classes     =org.roller.util.rome.PlanetConverterForRSS091U \
+	                   org.roller.util.rome.PlanetConverterForRSS091N \
+	                   org.roller.util.rome.PlanetConverterForRSS20
+	              
+# Handle funky RSS (RSS 2.0 with <dc:date> and/or <content:encoded>)
+
+rss_2.0.feed.ModuleGenerator.classes =com.sun.syndication.io.impl.DCModuleGenerator \
+                                      org.roller.util.rome.ContentModuleGenerator
+                                      
+rss_2.0.item.ModuleGenerator.classes =com.sun.syndication.io.impl.DCModuleGenerator \
+                                      org.roller.util.rome.ContentModuleGenerator
+                                      
+rss_2.0.feed.ModuleParser.classes    =com.sun.syndication.io.impl.DCModuleParser \
+                                      org.roller.util.rome.ContentModuleParser
+                                      
+rss_2.0.item.ModuleParser.classes    =com.sun.syndication.io.impl.DCModuleParser \
+                                      org.roller.util.rome.ContentModuleParser
+                                      
+# Handle <content:encoded> in RSS 1.0 
+
+rss_1.0.feed.ModuleParser.classes    =com.sun.syndication.io.impl.DCModuleParser \
+                                      org.roller.util.rome.ContentModuleParser
+                                      
+rss_1.0.item.ModuleParser.classes    =com.sun.syndication.io.impl.DCModuleParser \
+                                      org.roller.util.rome.ContentModuleParser
+                                      
+rss_1.0.feed.ModuleGenerator.classes =com.sun.syndication.io.impl.DCModuleGenerator \
+                                      org.roller.util.rome.ContentModuleGenerator
+
+rss_1.0.item.ModuleGenerator.classes =com.sun.syndication.io.impl.DCModuleGenerator \
+                                      org.roller.util.rome.ContentModuleGenerator
+                                  
+
+
+
+
+              
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/rssmacros.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/rssmacros.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/rssmacros.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/rssmacros.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,39 @@
+#**
+ * Macros for displaying RSS links and badges.
+ * @author  Lance Lavandowska (conversion to Velocimacros)
+ *#
+
+#**
+ * Show links to category feeds for categories that are immediate children
+ * of the specified category.
+ *#
+#macro( showRSSLinksForCategory $category )
+    <a href="$ctxPath/rss/$userName">$text.get("macro.rss.all")</a>
+    [<a href="$ctxPath/rss/$userName?excerpts=true">$text.get("macro.rss.excerpts")</a>]<br />
+    #set( $categories = $pageModel.getWeblogCategories($category) )
+    #foreach( $cat in $categories )
+        <a href="$ctxPath/rss/$userName?catname=$cat.path">$cat.path</a>
+        [<a href="$ctxPath/rss/$userName?catname=$cat.path&amp;excerpts=true">$text.get("macro.rss.excerpts")</a>]<br />
+    #end
+#end
+
+#**
+ * Show links to all available RSS feeds for your weblog.
+ *#
+#macro( showRSSLinks )#showRSSLinksForCategory("nil")#end
+
+#**
+ * Show RSS Autodiscovery link for your weblog.
+ *#
+#macro( showRSSAutodiscoveryLink )
+    <link rel="alternate" type="application/rss+xml"
+        title="RSS" href="$absBaseURL/rss/$userName" />
+#end
+
+#**
+ * Show RSS badge with link to your weblog's main RSS feed.
+ *#
+#macro( showRSSBadge )
+    <a href="$ctxPath/rss/$userName"><img class="rssbadge"
+        src="$ctxPath/images/rssbadge.gif" alt="XML" /></a>
+#end

Added: incubator/roller/trunk/web/WEB-INF/classes/searchresults.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/searchresults.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/searchresults.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/searchresults.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,92 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+## "no user" versions
+#macro( showSearchResults $dayTemplate )
+    #foreach( $day in $map.keySet() )
+        #set( $entries = $map.get($day) )
+        #parse( $dayTemplate )
+    #end
+#end
+<head>
+    <title>$siteName $text.get("macro.searchresults.results")</title>
+    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
+    <script type="text/javascript"
+        src="$ctxPath/theme/scripts/roller.js"></script>
+    <link rel="stylesheet" type="text/css" media="all"
+        href="$ctxPath/themes/base.css" />
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/theme/layout.css" />
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/theme/roller.css" />
+    <link rel="stylesheet" type="text/css" media="all"
+         href="$ctxPath/theme/menu.css" />
+</head>
+<body>
+<div id="header">
+    <span style="width:100%; text-align:right; margin: 3px">
+        #showBasicNavBar( false )
+    </span>
+    <span>
+        #showMenu( "editor-menu.xml" "/menu-tabbed.vm" )
+    </span>
+</div>
+
+<div id="content">
+    #showStatusMessage()
+
+    <center>
+      <h1>$siteName $text.get("macro.searchresults.results")</h1>
+    </center>
+
+    <p>
+    #set ( $siteText = "this site")
+    #set ( $inUrl = "")
+    #if ($username)
+        #set ($siteText = "$username's site")
+        #set ($inUrl = " inurl:$username" )
+    #end
+        $text.get("macro.searchresults.searchFor", [$siteText])
+        "<a href="http://dictionary.com/search?q=$utilities.encode($term)"
+        title="$text.get( "macro.searchresults.title", [$term])"
+        class="dictionary">$term</a>".
+
+        $text.get("macro.searchresults.hits_1", [$hits])
+        <a href="http://google.com/search?q=$utilities.encode($term)%20site:${absBaseURL}${inUrl}"
+        class="google">$text.get("macro.searchresults.hits_2")
+
+        <form method="get" action="$ctxPath/search"
+            style="margin: 5px">
+            <input type="text" id="q" name="q" size="31"
+                maxlength="255" value="$term"
+                style="padding-left: 1px" />
+            <input type="hidden" name="$USERNAME_KEY" value="$!{username}" />
+            #if ($categories)
+                <select name="c">
+                <option value="">- Restrict By Category -</option>
+                #foreach( $cat in $categories )
+                    <option #if($cat == $req.getParameter('c'))selected="selected"#end>$cat</option>
+                #end
+                </select>
+            #end
+            <input type="submit" value="$text.get("macro.searchresults.again")" />
+        </form>
+    </p>
+    <script type="text/javascript"
+        src="$ctxPath/theme/scripts/searchhi.js"></script>
+    <br />
+
+    #if ($hits > 0)
+        #set( $map = $searchResults )
+        #showSearchSummary()
+
+        #showSearchResults("searchresults_day.vm")
+
+        #showSearchPager()
+    #end
+    <div id="footer"></div>
+
+</div> <!-- close content div -->
+
+</body>
+</html>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/searchresults_day.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/searchresults_day.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/searchresults_day.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/searchresults_day.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,39 @@
+#macro( showEntryPermalink $entry )
+<a href="$baseURL/page/$entry.website.user.userName/?anchor=$entry.Anchor"
+    title="$text.get( "macro.searchresultsday.entrypermalink.title" )"
+    class="entrypermalink">posted</a>
+#end
+
+## you have to be so damn careful with whitespace in Velocity
+#macro( showUserPermalink $entry )
+<a href="$baseURL/page/$entry.website.user.userName/"
+    title="$text.get( "macro.searchresultsday.userpermalink.title" )"
+    class="entrypermalink">$entry.website.user.userName</a>#if ($entry.category),
+in #showCategoryPermalink($entry) #end
+#end
+
+## you have to be so damn careful with whitespace in Velocity
+#macro( showCategoryPermalink $entry )
+<a href="$baseURL/page/$entry.website.user.userName/?catname=#$utilities.encode($entry.category.name)"
+    title="$text.get( "macro.searchresultsday.categorypermalink.title" )"
+    class="entrypermalink">$entry.category.name</a>,
+#end
+
+<div class="box">
+    <div class="entry">
+       <img src="$ctxPath/images/permalink.gif" alt="#formatDate( $plainFormat $day )" />
+       #showEntryDate( $day )
+    </div>
+    #foreach( $entry in $entries )
+    <p>
+       <b>$entry.title</b> $entry.text
+       #showEntryPermalink( $entry )
+       by #showUserPermalink( $entry )
+       on #showTimestamp($entry.pubTime).
+       <span style="font-size:x-small;">(<a
+         href="?q=${utilities.encode($term)}&${USERNAME_KEY}=$!{entry.website.user.userName}"
+         >restrict search</a> to just this blog)</span>
+    </p>
+    #end
+    <br />
+</div>

Added: incubator/roller/trunk/web/WEB-INF/classes/technorati.license
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/technorati.license?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/technorati.license (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/technorati.license Wed Jun  8 20:18:46 2005
@@ -0,0 +1 @@
+31fa7f1d0dad2fe1d2bc69fd200cb6d0
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/themes/css.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/themes/css.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/themes/css.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/themes/css.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,4 @@
+<link rel="stylesheet" type="text/css" href="$ctxPath/themes/base.css" />
+#if( $theme )
+    <link rel="stylesheet" type="text/css" href="#showThemePath($theme)/theme.css" />
+#end
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/themes/day.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/themes/day.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/themes/day.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/themes/day.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,16 @@
+<div class="entry">
+   #showDayPermalink( $day )
+   #showEntryDate( $day )
+</div>
+
+#foreach( $entry in $entries )
+<p>
+   <a name="$utilities.encode($entry.anchor)" id="$utilities.encode($entry.anchor)"></a>
+   <b>$entry.title</b> #showEntryText($entry)
+   <font class="date">(#showTimestamp($entry.pubTime))</font>
+   #showEntryPermalink( $entry )
+   #showCommentsPageLink( $entry )
+</p>
+#end
+
+#showLinkbacks( $day )
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/themes/new_page.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/themes/new_page.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/themes/new_page.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/themes/new_page.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,4 @@
+
+<h1>#showPageName()</h1>
+
+<p>#showPageDescription()</p>
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/themes/noop_decorator.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/themes/noop_decorator.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/themes/noop_decorator.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/themes/noop_decorator.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1 @@
+$decorator_body
\ No newline at end of file

Added: incubator/roller/trunk/web/WEB-INF/classes/user.vm
URL: http://svn.apache.org/viewcvs/incubator/roller/trunk/web/WEB-INF/classes/user.vm?rev=189695&view=auto
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/user.vm (added)
+++ incubator/roller/trunk/web/WEB-INF/classes/user.vm Wed Jun  8 20:18:46 2005
@@ -0,0 +1,37 @@
+#**
+ * Macros for displaying images and accessing uploaded files.
+ * @author Lance Lavandowska (conversion to Velocimacros)
+ *#
+
+#**
+ * Show an image IMG tag, optionally surrounded with an 'A HREF' link tag 
+ * @param imageUrl URL for the image.
+ * @param linkUrl URL for the link or empty string if none.
+ * @param alt ALT text for the IMG tag.
+ * @param border BORDER for the IMG tag.
+ * @param halign HALIGN horizontal alignment for the IMG tag.
+ * @pram valign VALIGN vertical ailignment for the IMG tag.
+ *#
+#macro( showImage $imageUrl $linkUrl $alt $border $halign $valign )
+    #if ($utilities.isNotEmpty($linkUrl))
+        <a href="$linkUrl"/><img src="$imageUrl" alt="$alt"
+            border="$border" halign="$halign" valign="$valign" /></a>
+    #else
+        <img src="$imageUrl" alt="$alt" border="$border"
+            halign="$halign" valign="$valign" />
+    #end
+#end
+
+#**
+ * Show an image IMG tag for an image you have uploaded to Roller, 
+ * optionally surrounded with an 'A HREF' link tag 
+ *#
+#macro( showResourceImage $fileName $linkUrl $alt $border $halign $valign )
+    #set( $imageUrl = $uploadPath/$userName/$fileName )
+    #showImage( $imageUrl $linkUrl $alt $border $halign $valign )
+#end
+
+#**
+ * Show path to your file upload directory, for use in building URLs.
+ *#
+#macro( showResourcePath )$uploadPath/$userName#end
\ No newline at end of file