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 2006/07/18 19:11:57 UTC

svn commit: r423138 - in /incubator/roller/branches/roller_3.0: src/org/apache/roller/pojos/ src/org/apache/roller/ui/rendering/model/ src/org/apache/roller/ui/rendering/velocity/ web/WEB-INF/jsps/tiles/ web/WEB-INF/velocity/ web/WEB-INF/velocity/templ...

Author: snoopdave
Date: Tue Jul 18 10:11:56 2006
New Revision: 423138

URL: http://svn.apache.org/viewvc?rev=423138&view=rev
Log:

- These Roller 3.0 macros are now complete:
    #showWeblogEntryComments($entry)
    #showWeblogEntryCommentForm($entry)
    #showWeblogEntryLinksList($weblog $category $max)
    #showBookmarkLinksList($weblog $folder $expanding $subfolders)
    #showWeblogCategoryLinksList($weblog $category $expanding $subcats)
    #showPageLinksList($weblog)
    #showTrackbackAutodiscoveryRDF($entry)
    #showAutodiscoveryLinks($weblog)
    #showWeblogEntryCalendar($weblog $category)
    #showAuthorMenu($vertical)
    #includeTemplate($weblog $pageName)

  These still need some work and debugging:
    #showWeblogEntriesPager($pager)
    #showNextPrevControl($pager)

  And these remain to be done:
    #showSearchForm()
    #showSearchAgainForm()
    #showSearchSummary()
    #showSearchPager()

- Added error handling to VelocityRender and factory so that template authors
  can clearly see the parsing error that prevented their page from running.


Modified:
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogCategoryData.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WebsiteData.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CalendarModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/ConfigModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/MenuModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UtilitiesModel.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java
    incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java
    incubator/roller/branches/roller_3.0/web/WEB-INF/jsps/tiles/bannerStatus.jsp
    incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/templates/error-page.vm
    incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/weblog.vm
    incubator/roller/branches/roller_3.0/web/themes/andreas08/Weblog.vm

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogCategoryData.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogCategoryData.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogCategoryData.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WeblogCategoryData.java Tue Jul 18 10:11:56 2006
@@ -1,20 +1,20 @@
 /*
-* Licensed to the Apache Software Foundation (ASF) under one or more
-*  contributor license agreements.  The ASF licenses this file to You
-* under the Apache License, Version 2.0 (the "License"); you may not
-* use this file except in compliance with the License.
-* You may obtain a copy of the License at
-*
-*     http://www.apache.org/licenses/LICENSE-2.0
-*
-* Unless required by applicable law or agreed to in writing, software
-* distributed under the License is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-* See the License for the specific language governing permissions and
-* limitations under the License.  For additional information regarding
-* copyright in this work, please see the NOTICE file in the top level
-* directory of this distribution.
-*/
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ *  contributor license agreements.  The ASF licenses this file to You
+ * under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.  For additional information regarding
+ * copyright in this work, please see the NOTICE file in the top level
+ * directory of this distribution.
+ */
 package org.apache.roller.pojos;
 
 import java.util.Iterator;
@@ -36,33 +36,30 @@
  * @hibernate.class lazy="false" table="weblogcategory"
  * @hibernate.cache usage="read-write"
  */
-public class WeblogCategoryData extends HierarchicalPersistentObject
-{
+public class WeblogCategoryData extends HierarchicalPersistentObject {
     public static final long serialVersionUID = 1435782148712018954L;
-
+    
     private String id = null;
     private String name = null;
     private String description = null;
     private String image = null;
     
     private String cachedPath = null;
-
+    
     private WebsiteData website = null;
     private List weblogCategories = null;
     
-
-    public WeblogCategoryData()
-    {
+    
+    public WeblogCategoryData() {
     }
-
+    
     public WeblogCategoryData(
-        java.lang.String id,
-        WebsiteData website,
-        WeblogCategoryData parent,
-        java.lang.String name,
-        java.lang.String description,
-        java.lang.String image)
-    {
+            java.lang.String id,
+            WebsiteData website,
+            WeblogCategoryData parent,
+            java.lang.String name,
+            java.lang.String description,
+            java.lang.String image) {
         this.id = id;
         this.website = website;
         this.mNewParent = parent;
@@ -70,15 +67,13 @@
         this.description = description;
         this.image = image;
     }
-
-    public WeblogCategoryData(WeblogCategoryData otherData)
-    {
+    
+    public WeblogCategoryData(WeblogCategoryData otherData) {
         this.setData(otherData);
     }
-
+    
     /** Setter is needed in RollerImpl.storePersistentObject(). */
-    public void setData(org.apache.roller.pojos.PersistentObject otherData)
-    {
+    public void setData(org.apache.roller.pojos.PersistentObject otherData) {
         WeblogCategoryData other = (WeblogCategoryData) otherData;
         
         this.id = other.getId();
@@ -95,232 +90,198 @@
     }
     
     
-    /** 
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getAssocClass()
      */
-    public Class getAssocClass()
-    {
+    public Class getAssocClass() {
         return WeblogCategoryAssoc.class;
     }
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getObjectPropertyName()
      *
      * @roller.wrapPojoMethod type="simple"
      */
-    public String getObjectPropertyName()
-    {
+    public String getObjectPropertyName() {
         return "category";
     }
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getAncestorPropertyName()
      *
      * @roller.wrapPojoMethod type="simple"
      */
-    public String getAncestorPropertyName()
-    {
+    public String getAncestorPropertyName() {
         return "ancestorCategory";
     }
     
     //------------------------------------------------------- Simple properties
-
+    
     /**
      * @roller.wrapPojoMethod type="simple"
-     * @ejb:persistent-field 
+     * @ejb:persistent-field
      * @hibernate.id column="id"
      *  generator-class="uuid.hex" unsaved-value="null"
      */
-    public java.lang.String getId()
-    {
+    public java.lang.String getId() {
         return this.id;
     }
     /** @ejb:persistent-field */
-    public void setId(java.lang.String id)
-    {
+    public void setId(java.lang.String id) {
         this.id = id;
     }
-
-    /** 
+    
+    /**
      * @roller.wrapPojoMethod type="simple"
-     * @ejb:persistent-field 
+     * @ejb:persistent-field
      * @hibernate.property column="name" non-null="true" unique="false"
      */
-    public java.lang.String getName()
-    {
+    public java.lang.String getName() {
         return this.name;
     }
     /** @ejb:persistent-field */
-    public void setName(java.lang.String name)
-    {
+    public void setName(java.lang.String name) {
         this.name = name;
     }
-
-    /** 
+    
+    /**
      * Description
-     * 
+     *
      * @roller.wrapPojoMethod type="simple"
-     * @ejb:persistent-field 
+     * @ejb:persistent-field
      * @hibernate.property column="description" non-null="true" unique="false"
      */
-    public java.lang.String getDescription()
-    {
+    public java.lang.String getDescription() {
         return this.description;
     }
     /** @ejb:persistent-field */
-    public void setDescription(java.lang.String description)
-    {
+    public void setDescription(java.lang.String description) {
         this.description = description;
     }
-
-    /** 
+    
+    /**
      * @roller.wrapPojoMethod type="simple"
-     * @ejb:persistent-field 
+     * @ejb:persistent-field
      * @hibernate.property column="image" non-null="true" unique="false"
      */
-    public java.lang.String getImage()
-    {
+    public java.lang.String getImage() {
         return this.image;
     }
     /** @ejb:persistent-field */
-    public void setImage(java.lang.String image)
-    {
+    public void setImage(java.lang.String image) {
         this.image = image;
     }
-
+    
     /**
      * Get path in category hierarhcy.
      *
      * @roller.wrapPojoMethod type="simple"
      */
-    public String getPath()
-    {
-        if (null == cachedPath)
-        {
-            try
-            {
+    public String getPath() {
+        if (null == cachedPath) {
+            try {
                 cachedPath = RollerFactory.getRoller().getWeblogManager().getPath(this);
-            }
-            catch (RollerException e)
-            {
+            } catch (RollerException e) {
                 throw new RuntimeException(e);
             }
         }
         return cachedPath;
     }
-
+    
     //------------------------------------------------------------ Associations
-
-    /** 
+    
+    /**
      * @roller.wrapPojoMethod type="pojo"
      * @ejb:persistent-field
-     *  
+     *
      * @hibernate.many-to-one column="websiteid" cascade="none" not-null="true"
      */
-    public WebsiteData getWebsite()
-    {
+    public WebsiteData getWebsite() {
         return website;
     }
     /** @ejb:persistent-field */
-    public void setWebsite(WebsiteData website)
-    {
+    public void setWebsite(WebsiteData website) {
         this.website = website;
     }
-
-
-    /** 
+    
+    
+    /**
      * Return parent category, or null if category is root of hierarchy.
      *
      * @roller.wrapPojoMethod type="pojo"
      */
-    public WeblogCategoryData getParent() throws RollerException
-    {
-        if (mNewParent != null)
-        {
+    public WeblogCategoryData getParent() throws RollerException {
+        if (mNewParent != null) {
             // Category has new parent, so return that
             return (WeblogCategoryData)mNewParent;
-        }
-        else if (getParentAssoc() != null)
-        {
+        } else if (getParentAssoc() != null) {
             // Return parent found in database
             return ((WeblogCategoryAssoc)getParentAssoc()).getAncestorCategory();
-        }
-        else 
-        {
+        } else {
             return null;
         }
     }
-
+    
     /** Set parent category, database will be updated when object is saved. */
-    public void setParent(HierarchicalPersistentObject parent)
-    {
+    public void setParent(HierarchicalPersistentObject parent) {
         mNewParent = parent;
     }
-
+    
     /**
      * Query to get child categories of this category.
      *
      * @roller.wrapPojoMethod type="pojo-collection" class="org.apache.roller.pojos.WeblogCategoryData"
      */
-    public List getWeblogCategories() throws RollerException
-    {
-        if (weblogCategories == null)
-        {
+    public List getWeblogCategories() throws RollerException {
+        if (weblogCategories == null) {
             weblogCategories = new LinkedList();
             List childAssocs = getChildAssocs();
             Iterator childIter = childAssocs.iterator();
-            while (childIter.hasNext())
-            {
+            while (childIter.hasNext()) {
                 WeblogCategoryAssoc assoc =
-                    (WeblogCategoryAssoc) childIter.next();
+                        (WeblogCategoryAssoc) childIter.next();
                 weblogCategories.add(assoc.getCategory());
             }
         }
         return weblogCategories;
     }
-
+    
     /**
      * @roller.wrapPojoMethod type="simple"
      */
-    public boolean descendentOf(WeblogCategoryData ancestor) 
-        throws RollerException
-    {
+    public boolean descendentOf(WeblogCategoryData ancestor)
+    throws RollerException {
         return RollerFactory.getRoller().getWeblogManager().isDescendentOf(this, ancestor);
     }
     
-    /** 
-     * Determine if category is in use. Returns true if any weblog entries 
+    /**
+     * Determine if category is in use. Returns true if any weblog entries
      * use this category or any of it's subcategories.
      *
      * @roller.wrapPojoMethod type="simple"
      */
-    public boolean isInUse() 
-    {
-        try
-        {
+    public boolean isInUse() {
+        try {
             return RollerFactory.getRoller().getWeblogManager().isWeblogCategoryInUse(this);
-        }
-        catch (RollerException e)
-        {
+        } catch (RollerException e) {
             throw new RuntimeException(e);
         }
     }
     
     /** TODO: fix form generation so this is not needed. */
     public void setInUse(boolean dummy) {}
-
+    
     //------------------------------------------------------------------------
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#createAssoc(
-     * org.apache.roller.pojos.HierarchicalPersistentObject, 
+     * org.apache.roller.pojos.HierarchicalPersistentObject,
      * org.apache.roller.pojos.HierarchicalPersistentObject, java.lang.String)
      */
     public Assoc createAssoc(
-        HierarchicalPersistentObject object, 
-        HierarchicalPersistentObject associatedObject, 
-        String relation) throws RollerException
-    {
+            HierarchicalPersistentObject object,
+            HierarchicalPersistentObject associatedObject,
+            String relation) throws RollerException {
         return new WeblogCategoryAssoc(null,
                 (WeblogCategoryData)object,
                 (WeblogCategoryData)associatedObject,
@@ -328,7 +289,7 @@
     }
     
     
-    /** 
+    /**
      * Retrieve all weblog entries in this category and, optionally, include
      * weblog entries all sub-categories.
      *
@@ -337,22 +298,20 @@
      * @param subcats True if entries from sub-categories are to be returned.
      * @return List of WeblogEntryData objects.
      * @throws RollerException
-     */ 
-    public List retrieveWeblogEntries(boolean subcats) 
-        throws RollerException
-    {
+     */
+    public List retrieveWeblogEntries(boolean subcats)
+    throws RollerException {
         WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
         return wmgr.getWeblogEntries(this, subcats);
     }
-
+    
     //-------------------------------------------------------- Good citizenship
-
-    public String toString()
-    {
+    
+    public String toString() {
         StringBuffer str = new StringBuffer("{");
-
+        
         str.append(
-            "id="
+                "id="
                 + id
                 + " "
                 + "name="
@@ -364,15 +323,13 @@
                 + "image="
                 + image);
         str.append('}');
-
+        
         return (str.toString());
     }
-
-    public boolean equals(Object pOther)
-    {
+    
+    public boolean equals(Object pOther) {
         if (pOther == null) return false;
-        if (pOther instanceof WeblogCategoryData)
-        {
+        if (pOther instanceof WeblogCategoryData) {
             WeblogCategoryData lTest = (WeblogCategoryData) pOther;
             boolean lEquals = true;
             lEquals = PojoUtil.equals(lEquals, this.getId(), lTest.getId());
@@ -380,26 +337,23 @@
             lEquals = PojoUtil.equals(lEquals, this.getDescription(), lTest.getDescription());
             lEquals = PojoUtil.equals(lEquals, this.getImage(), lTest.getImage());
             return lEquals;
-        }
-        else
-        {
+        } else {
             return false;
         }
     }
-
-    public int hashCode()
-    {
+    
+    public int hashCode() {
         int result = 17;
         result = 37 * result + ((this.id != null) ? this.id.hashCode() : 0);
         result =
-            37 * result
+                37 * result
                 + ((this.website != null) ? this.website.hashCode() : 0);
         result = 37 * result + ((this.name != null) ? this.name.hashCode() : 0);
         result =
-            37 * result
+                37 * result
                 + ((this.description != null) ? this.description.hashCode() : 0);
         result =
-            37 * result + ((this.image != null) ? this.image.hashCode() : 0);
+                37 * result + ((this.image != null) ? this.image.hashCode() : 0);
         return result;
     }
     
@@ -414,37 +368,33 @@
     
     /** TODO: fix formbean generation so this is not needed. */
     public void setPath(String string) {}
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getParentAssoc()
      */
-    public Assoc getParentAssoc() throws RollerException
-    {
+    public Assoc getParentAssoc() throws RollerException {
         return RollerFactory.getRoller().getWeblogManager().getWeblogCategoryParentAssoc(this);
     }
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getChildAssocs()
      */
-    public List getChildAssocs() throws RollerException
-    {
+    public List getChildAssocs() throws RollerException {
         return RollerFactory.getRoller().getWeblogManager().getWeblogCategoryChildAssocs(this);
     }
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getAllDescendentAssocs()
      */
-    public List getAllDescendentAssocs() throws RollerException
-    {
+    public List getAllDescendentAssocs() throws RollerException {
         return RollerFactory.getRoller().getWeblogManager().getAllWeblogCategoryDecscendentAssocs(this);
     }
-
-    /** 
+    
+    /**
      * @see org.apache.roller.pojos.HierarchicalPersistentObject#getAncestorAssocs()
      */
-    public List getAncestorAssocs() throws RollerException
-    {
+    public List getAncestorAssocs() throws RollerException {
         return RollerFactory.getRoller().getWeblogManager().getWeblogCategoryAncestorAssocs(this);
     }
-
+    
 }

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WebsiteData.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WebsiteData.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WebsiteData.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/pojos/WebsiteData.java Tue Jul 18 10:11:56 2006
@@ -35,6 +35,7 @@
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.ThemeNotFoundException;
 import org.apache.roller.config.RollerRuntimeConfig;
+import org.apache.roller.model.BookmarkManager;
 import org.apache.roller.model.PluginManager;
 import org.apache.roller.model.Roller;
 import org.apache.roller.model.ThemeManager;
@@ -330,6 +331,7 @@
     
     /**
      * Get a list of all pages that are part of this website.
+     * @roller.wrapPojoMethod type="pojo-collection" class="org.apache.roller.pojos.Template"
      */
     public List getPages() {
         
@@ -1133,6 +1135,7 @@
     }
     
     /**
+     * Returns categories under the default category of the weblog.
      * @roller.wrapPojoMethod type="pojo-collection" class="org.apache.roller.pojos.WeblogCategoryData"
      */
     public List getWeblogCategories() {
@@ -1162,17 +1165,35 @@
             }
             ret = category.getWeblogCategories();
         } catch (RollerException e) {
-            log.error("ERROR: fetching categories", e);
+            log.error("ERROR: fetching categories for path: " + categoryPath, e);
         }
         return ret;
     }
 
-
+    /**
+     * @roller.wrapPojoMethod type="pojo" class="org.apache.roller.pojos.WeblogCategoryData"
+     */
+    public WeblogCategoryData getWeblogCategory(String categoryPath) {
+        WeblogCategoryData category = null;
+        try {
+            Roller roller = RollerFactory.getRoller();
+            WeblogManager wmgr = roller.getWeblogManager();
+            if (categoryPath != null && !categoryPath.equals("nil")) {
+                category = wmgr.getWeblogCategoryByPath(this, null, categoryPath);
+            } else {
+                category = this.getDefaultCategory();
+            }
+        } catch (RollerException e) {
+            log.error("ERROR: fetching category at path: " + categoryPath, e);
+        }
+        return category;
+    }
+    
     /**
      * Get up to 100 most recent published entries in weblog.
      * @param cat Category path or null for no category restriction
      * @param length Max entries to return (1-100)
-     * @return List of WeblogEntryDataWrapper objects.
+     * @return List of weblog entry objects.
      *
      * @roller.wrapPojoMethod type="pojo-collection" class="org.apache.roller.pojos.WeblogEntryData"
      */
@@ -1183,7 +1204,7 @@
         if (length < 1) return recentEntries;
         try {
             WeblogManager wmgr = RollerFactory.getRoller().getWeblogManager();
-            List recent = wmgr.getWeblogEntries(
+            recentEntries = wmgr.getWeblogEntries(
                     this, 
                     null,       // user
                     null,       // startDate
@@ -1204,7 +1225,7 @@
     /**
      * Get up to 100 most recent approved and non-spam comments in weblog.
      * @param length Max entries to return (1-100)
-     * @return List of CommentDataWrapper objects.
+     * @return List of comment objects.
      *
      * @roller.wrapPojoMethod type="pojo-collection" class="org.apache.roller.pojos.CommentData"
      */
@@ -1231,6 +1252,28 @@
         }
         return recentComments;
     }
-    
+
+    /**
+     * Get bookmark folder by name.
+     * @param folderName Name or path of bookmark folder to be returned (null for root)
+     * @return Folder object requested.
+     *
+     * @roller.wrapPojoMethod type="pojo" class="org.apache.roller.pojos.FolderData"
+     */
+    public FolderData getFolder(String folderName) {
+        FolderData ret = null;
+        try {
+            Roller roller = RollerFactory.getRoller();
+            BookmarkManager bmgr = roller.getBookmarkManager();
+            if (folderName == null && folderName.equals("nil") && folderName.trim().equals("/")) {
+                return bmgr.getRootFolder(this);
+            } else {
+                return bmgr.getFolder(this, folderName);
+            }
+        } catch (RollerException re) {
+            log.error("ERROR: fetching folder for weblog", re);
+        }
+        return ret;
+    }
 }
 

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CalendarModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CalendarModel.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CalendarModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/CalendarModel.java Tue Jul 18 10:11:56 2006
@@ -66,17 +66,17 @@
     }
     
     
-    public String showWeblogCalendar(WebsiteDataWrapper websiteWrapper, String catArgument) {        
-        return showWeblogCalendar(websiteWrapper, catArgument, false);
+    public String showWeblogEntryCalendar(WebsiteDataWrapper websiteWrapper, String catArgument) {        
+        return showWeblogEntryCalendar(websiteWrapper, catArgument, false);
     }
     
     
-    public String showWeblogCalendarBig(WebsiteDataWrapper websiteWrapper, String catArgument) { 
-        return showWeblogCalendar(websiteWrapper, catArgument, true);
+    public String showWeblogEntryCalendarBig(WebsiteDataWrapper websiteWrapper, String catArgument) { 
+        return showWeblogEntryCalendar(websiteWrapper, catArgument, true);
     }
     
     
-    private String showWeblogCalendar(WebsiteDataWrapper websiteWrapper, String catArgument, boolean big) {
+    private String showWeblogEntryCalendar(WebsiteDataWrapper websiteWrapper, String catArgument, boolean big) {
         
         if ("nil".equals(catArgument)) catArgument = null;        
         String ret = null;

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/ConfigModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/ConfigModel.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/ConfigModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/ConfigModel.java Tue Jul 18 10:11:56 2006
@@ -20,16 +20,17 @@
 
 import java.net.MalformedURLException;
 import java.util.Arrays;
-import java.util.Hashtable;
+import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
-import javax.servlet.http.HttpServletRequest;
 import javax.servlet.jsp.PageContext;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.RollerException;
 import org.apache.roller.config.RollerRuntimeConfig;
 import org.apache.roller.pojos.wrapper.WeblogEntryDataWrapper;
+import org.apache.roller.pojos.wrapper.WebsiteDataWrapper;
+import org.apache.roller.ui.core.RequestConstants;
 import org.apache.roller.ui.core.RollerContext;
 import org.apache.struts.util.RequestUtils;
 
@@ -89,22 +90,6 @@
     }
     
     
-    /** URL for editing a weblog entry */
-    public String getWeblogEntryEditURL(WeblogEntryDataWrapper entry) {
-        String ret = null;
-        Hashtable params = new Hashtable();
-        params.put("entryid", entry.getId());
-        params.put("anchor", entry.getAnchor());
-        try {
-            ret = RequestUtils.computeURL(pageContext,
-                "weblogEdit", null, null, null, params, null, false);
-        } catch (MalformedURLException mue) {
-            log.warn("RollerRequest.editEntryUrl exception: ", mue);
-        }
-        return ret;
-    } 
-    
-    
     /** 
      * Get Roller string runtime configuration property.
      * @return Property value or null if not found 
@@ -161,5 +146,76 @@
         return RollerContext.getRollerContext().getRollerBuildUser();
     }
     
+    
+    /** URL for editing a weblog entry */
+    public String getWeblogEntryEditURL(WeblogEntryDataWrapper entry) {
+        String ret = null;
+        Map params = new HashMap();
+        params.put(RequestConstants.WEBLOGENTRY_ID, entry.getId());
+        params.put(RequestConstants.ANCHOR, entry.getAnchor());
+        try {
+            ret = RequestUtils.computeURL(pageContext,
+                "weblogEdit", null, null, null, params, null, false);
+        } catch (MalformedURLException mue) {
+            log.error("ERROR forming Struts URL: ", mue);
+        }
+        return ret;
+    } 
+    
+    
+    /** URL for creating a new weblog entry */
+    public String getWeblogEntryCreateURL(WebsiteDataWrapper weblog) {
+        String returnURL = null;
+        Map params = new HashMap();
+        params.put(RequestConstants.WEBLOG, weblog.getHandle());
+        try {
+            returnURL = RequestUtils.computeURL(pageContext,
+                "weblogCreate", null, null, null, params, null, false);
+        } catch (MalformedURLException mue) {
+            log.error("ERROR forming Struts URL: ", mue);
+        }
+        return returnURL;
+    }
+    
+    
+    /** URL for editing weblog settings */
+    public String getWeblogSettingsURL(WebsiteDataWrapper weblog) {
+        String returnURL = null;
+        Map params = new HashMap();
+        params.put(RequestConstants.WEBLOG, weblog.getHandle());        
+        try {
+            returnURL = RequestUtils.computeURL(pageContext,
+                "editWebsite", null, null, null, params, null, false);
+        } catch (MalformedURLException mue) {
+            log.error("ERROR forming Struts URL: ", mue);
+        }
+        return returnURL;
+    }
+    
+    
+    /** URL for logging in */  
+    public String getLoginURL() {
+        String returnURL = null;
+        try {
+            returnURL = RequestUtils.computeURL(pageContext,
+                "login-redirect", null, null, null, null, null, false);
+        } catch (MalformedURLException mue) {
+            log.error("ERROR forming Struts URL: ", mue);
+        }
+        return returnURL;
+    }
+    
+    
+    /** URL for logging out */
+    public String getLogoutURL() {
+        String returnURL = null;
+        try {
+            returnURL = RequestUtils.computeURL(pageContext,
+                "logout-redirect", null, null, null, null, null, false);
+        } catch (MalformedURLException mue) {
+            log.error("ERROR forming Struts URL: ", mue);
+        }
+        return returnURL;
+    }    
 }
 

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/MenuModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/MenuModel.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/MenuModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/MenuModel.java Tue Jul 18 10:11:56 2006
@@ -53,11 +53,11 @@
     
     
     /**
-     * Call hybrid EditorNavBarTag to render editor navbar.
+     * Display author menu.
      * @param vertical True for vertical navbar.
      * @return String HTML for navbar.
      */
-    public String showEditorNavBar(boolean vertical) {
+    public String showAuthorMenu(boolean vertical) {
         EditorNavigationBarTag editorTag = new EditorNavigationBarTag();
         editorTag.setPageContext(pageContext);
         if ( vertical ) {

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UtilitiesModel.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UtilitiesModel.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UtilitiesModel.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/UtilitiesModel.java Tue Jul 18 10:11:56 2006
@@ -112,7 +112,7 @@
     
     //---------------------------------------------------- Authentication utils 
     
-    public boolean getUserAuthorizedToAuthor(WebsiteDataWrapper weblog) {
+    public boolean isUserAuthorizedToAuthor(WebsiteDataWrapper weblog) {
         try {
             RollerSession rses = RollerSession.getRollerSession(request);
             if (rses.getAuthenticatedUser() != null) {
@@ -124,7 +124,7 @@
         return false;
     }
     
-    public boolean getUserAuthorizedToAdmin(WebsiteDataWrapper weblog) {
+    public boolean isUserAuthorizedToAdmin(WebsiteDataWrapper weblog) {
         try {
             RollerSession rses = RollerSession.getRollerSession(request);
             if (rses.getAuthenticatedUser() != null) {

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/model/WeblogEntriesPagerImpl.java Tue Jul 18 10:11:56 2006
@@ -601,7 +601,7 @@
                     for(int i=0; i < unwrapped.size(); i++) {
                         wrapped.add(i, 
                             WeblogEntryDataWrapper.wrap((WeblogEntryData)unwrapped.get(i)));
-                        if (++count < length) {
+                        if (count++ < length) {
                             entries.put(key, wrapped);
                         } else {
                             more = true;

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRenderer.java Tue Jul 18 10:11:56 2006
@@ -23,6 +23,7 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.ui.rendering.Renderer;
+import org.apache.roller.ui.rendering.model.UtilitiesModel;
 import org.apache.velocity.Template;
 import org.apache.velocity.VelocityContext;
 import org.apache.velocity.context.Context;
@@ -37,7 +38,8 @@
     
     private String resourceId = null;
     private Template resourceTemplate = null;
-    
+    private Exception exception = null;  
+    private String exceptionSource = null;
     
     public VelocityRenderer(String resource) throws Exception {
         
@@ -48,9 +50,21 @@
         resourceTemplate = RollerVelocity.getTemplate(this.resourceId, "UTF-8");
     }
     
+    /** Construct rendering for displaying exception */
+    public VelocityRenderer(Exception exception, String exceptionSource, String resource) throws Exception {
+        this(resource);        
+        this.exception = exception;
+        this.exceptionSource = exceptionSource;
+    }
+    
     
     public void render(Map model, Writer out) throws Exception {
         
+        if (exception != null) {
+            renderException(model, out);
+            return;
+        }
+        
         long startTime = System.currentTimeMillis();
         
         // convert model to Velocity Context
@@ -64,5 +78,20 @@
         
         log.debug("Rendered ["+this.resourceId+"] in "+renderTime+" secs");
     }
+        
+    
+    private void renderException(Map model, Writer out) throws Exception { 
+                
+        // add exception to Velocity Context and utils for formatting
+        Context ctx = new VelocityContext(model);
+        ctx.put("exception", exception);
+        ctx.put("exceptionSource", exceptionSource);
+        ctx.put("utils", new UtilitiesModel()); 
+        
+        // render output to Writer
+        resourceTemplate.merge(ctx, out);
+    }
+    
     
+
 }

Modified: incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java (original)
+++ incubator/roller/branches/roller_3.0/src/org/apache/roller/ui/rendering/velocity/VelocityRendererFactory.java Tue Jul 18 10:11:56 2006
@@ -20,6 +20,7 @@
 
 import org.apache.roller.ui.rendering.Renderer;
 import org.apache.roller.ui.rendering.RendererFactory;
+import org.apache.velocity.exception.ParseErrorException;
 
 
 /**
@@ -37,23 +38,38 @@
             return null;
         }
         
-        if("velocity".equals(rendererType)) {
+        if("velocity".equals(rendererType)) { 
             
             // standard velocity template
             try {
-                renderer = new VelocityRenderer(resourceId);
-            } catch(Exception e) {
+               renderer = new VelocityRenderer(resourceId);
+            } catch (ParseErrorException pe) {            
+                // Author needs to see parsing error so display error page
+                try {
+                    renderer = new VelocityRenderer(pe, resourceId, "templates/error-page.vm");
+                } catch (Throwable t) {
+                    throw new RuntimeException("ERROR displaying error page", t);
+                }
+            } catch(Exception ignored) {
                 // couldn't find the given resource, can't render
-            }
+            }            
+            
         } else if("velocityWeblogPage".equals(rendererType)) {
             
             // special case for velocity weblog page templates
             // needed because of the way we do the decorator stuff
             try {
                 renderer = new VelocityWeblogPageRenderer(resourceId);
-            } catch(Exception e) {
+            } catch (ParseErrorException pe) {            
+                // Author needs to see parsing error so display error page
+                try {
+                    renderer = new VelocityRenderer(pe, resourceId, "templates/error-page.vm");
+                } catch (Throwable t) {
+                    throw new RuntimeException("ERROR displaying error page", t);
+                }
+            } catch(Exception ignored) {
                 // couldn't find the given resource, can't render
-            }
+            }   
         }
         
         return renderer;

Modified: incubator/roller/branches/roller_3.0/web/WEB-INF/jsps/tiles/bannerStatus.jsp
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/web/WEB-INF/jsps/tiles/bannerStatus.jsp?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/web/WEB-INF/jsps/tiles/bannerStatus.jsp (original)
+++ incubator/roller/branches/roller_3.0/web/WEB-INF/jsps/tiles/bannerStatus.jsp Tue Jul 18 10:11:56 2006
@@ -48,7 +48,7 @@
         
         <c:if test="${!empty model.website}" >
            - <fmt:message key="mainPage.currentWebsite" />
-           <b><a href='<c:out value="${model.baseURL}" />/page/<c:out value="${model.website.handle}" />'>
+           <b><a href='<c:out value="${model.baseURL}" />/<c:out value="${model.website.handle}" />'>
                <c:out value="${model.website.handle}" />
            </a></b>
    

Modified: incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/templates/error-page.vm
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/templates/error-page.vm?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/templates/error-page.vm (original)
+++ incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/templates/error-page.vm Tue Jul 18 10:11:56 2006
@@ -1,6 +1,17 @@
 <html>
 <body>
+
 <h1>Velocity template error</h1>
-ERROR message [$!displayException.getMessage()]
+
+<p><b>EXCEPTION</b>: [$!exception.getClass().getName()]</p>
+
+<p><b>EXCEPTION SOURCE</b>: [$exceptionSource]</p> 
+
+<p><b>EXCEPTION MESSAGE</b>:</p> 
+
+#if ($exception.getMessage())
+    $utils.autoformat($exception.getMessage())
+#end
+
 </body>
 </html>

Modified: incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/weblog.vm
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/weblog.vm?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/weblog.vm (original)
+++ incubator/roller/branches/roller_3.0/web/WEB-INF/velocity/weblog.vm Tue Jul 18 10:11:56 2006
@@ -1,23 +1,24 @@
 
 #** Set of essential macros needed in Roller velocity templates.
 
-Implemented:
-      #showWeblogEntriesPager($pager)
-      #showWeblogEntryComments($entry)
-      #showWeblogEntryCommentForm($entry)
-      #showCategoryLinksList()
-      #showWeblogEntryLinksList()
-
-To be implemented:
-      #showBookmarkList()
-      #showPageLinksList()
-      #showTrackbackAutodiscoveryRDF()
-      #showAutodiscoveryLinks()
-      #includePage()
-      #showSearchForm()
-      #showSearchAgainForm()
-      #showSearchSummary()
-      #showSearchPager()
+    #showWeblogEntriesPager($pager)
+    #showNextPrevControl($pager)
+    #showWeblogEntryComments($entry)
+    #showWeblogEntryCommentForm($entry)
+    #showWeblogEntryLinksList($weblog $category $max)
+    #showBookmarkLinksList($weblog $folder $expanding $subfolders)
+    #showWeblogCategoryLinksList($weblog $category $expanding $subcats)
+    #showPageLinksList($weblog)
+    #showTrackbackAutodiscoveryRDF($entry)
+    #showAutodiscoveryLinks($weblog)
+    #showWeblogEntryCalendar($weblog $category)
+    #showAuthorMenu($vertical)
+    #includeTemplate($weblog $pageName)
+Todo:
+    #showSearchForm()
+    #showSearchAgainForm()
+    #showSearchSummary()
+    #showSearchPager()
 *#
 
 
@@ -49,7 +50,7 @@
 
 
 #** 
-Show comments for weblog entry according to Roller configuration 
+Show comments for weblog entry according to Roller configuration.
 *#
 #macro(showWeblogEntryComments $entry)
     #set($commentPreview = $model.getCommentPreview())
@@ -111,7 +112,7 @@
 
 
 #** 
-Show comments form for weblog entry 
+Show comments form for weblog entry. 
 *#
 #macro(showWeblogEntryCommentForm $entry)
     #set($cform = $model.getCommentForm())
@@ -231,41 +232,304 @@
     </div>
 #end
 
-#** Show weblog's categories in specified parent category *#
-#macro(showCategoryLinksList $weblog $categoryPath)
-    #set($rawUrl = "$config.contextURL/$weblog.handle")
-    <ul class="clearfix">
-        #set($weblogUrl = $rawUrl)
+
+#** 
+Show recent weblog entries in specified category. 
+*#
+#macro(showWeblogEntryLinksList $weblog $category $max)
+   #set($recentEntries = $weblog.getRecentWeblogEntries($category, $max))
+   <ul class="recentposts">
+   #foreach ($var in $recentEntries)
+       <li class="recentposts"><a href="$var.permalink">$var.title</a></li>
+   #end
+   </ul>
+#end
+
+
+#** 
+Show bookmarks as a HTML ul list.
+*#
+#macro(showBookmarkLinksList $weblog $folder $expanding $subfolders)
+    #set($folderObj = $weblog.getFolder($folder))
+    #if ($folderObj)
+        #_showFolder($folderObj $expanding $subfolders)
+    #else
+        <span class="error">$text.get("macro.bookmark.error", [$folder])</span>
+    #end
+#end
+
+#**
+Show one bookmark folder as an HTML ul list, options for expanding and 
+recursion (private).
+ *#
+#macro(_showFolder $folderObject $expanding $subfolders)
+    #set($bookmarks = $folderObject.getBookmarks())
+    #set($divId = $utils.replace($folderObject.name, " ", "_" ))
+    #if ($expanding && $folderObject.name != "root")
+    <div class="rFolder">
+        <li class="rFolderItem"><a href="javascript:toggleFolder('$divId')">
+            <span id="i$divId">+</span></a>$folderObject.Name</li>
+        <ul id="$divId" style="display:none">
+    #else
+        <ul class="rFolder">
+    #end
+    #foreach($bookmark in $bookmarks)
+        <li class="rFolderItem">
+        #if($utils.isNotEmpty($bookmark.Image))
+          #if( $bookmark.Image.startsWith("http://") )
+          <a href="$bookmark.url">
+             <img alt="$bookmark.description" border="0"
+                src="$bookmark.image" class="rBookmark" /></a>
+          #else
+          <a href="$bookmark.url">
+             <img alt="$bookmark.description" border="0"
+                src="$bookmark.image" class="rBookmark" /></a>
+          #end
+        #else
+            #if($utils.isNotEmpty( $bookmark.FeedUrl))
+            <a href="$bookmark.feedUrl"><img class="smrssbadge"
+               src="$config.getAbsoluteContextURL()/images/smrssbadge.gif"
+               alt="$text.get("macro.bookmark.urlFeed")"/></a>
+            #end
+            <a href="$bookmark.url"
+               title="$bookmark.description"
+               class="rBookmark$bookmark.weight">$bookmark.name</a>
+        #end
+        </li>
+    #end
+    ## show sub-folders
+    #if ($subfolders)
+        #foreach($sFolder in $folderObject.folders)
+            #_showFolder($sFolder $expanding $subfolders)
+        #end
+    #end
+        </ul>
+    #if($expanding)
+    </div>
+    <script type="text/javascript">
+    <!-- 
+    folderPreference("$divId");
+    // -->
+    </script>
+    #end
+#end
+
+
+#** 
+Show weblog's categories in specified parent category.
+*#
+#macro(showWeblogCategoryLinksList $weblog $category $expanding $subcats)
+    #set($categoryObject = $weblog.getWeblogCategory($category))
+    #if(!$expanding && !$subcats)
+        <ul class="rCategory">
         #set($selectedCat = "")
         #if($model.weblogCategory)
            #set($selectedCat = $model.weblogCategory)
-           <li><a href="$weblogUrl">$text.get("macro.weblog.allcategories")</a></li>
+           <li><a href="$weblog.URL">$text.get("macro.weblog.allcategories")</a></li>
         #else
-           <li class="selected"><a href="$weblogUrl">$text.get("macro.weblog.allcategories")</a></li>
-        #end
-        #if($req.getParameter($PAGEID_KEY) )
-            #set($pageParam = "&$PAGEID_KEY=$req.getParameter($PAGEID_KEY)")
+           <li class="selected"><a href="$weblog.URL">$text.get("macro.weblog.allcategories")</a></li>
         #end
-        #set($cats = $weblog.getWeblogCategories($categoryPath))
+        #set($cats = $weblog.getWeblogCategories($category))
         #foreach($cat in $cats)
             #set($catParam = "?cat=$utilities.encode($cat.path)")
-            #set($weblogUrl = "$rawUrl$catParam$!pageParam")
-            #if($selectedCat == $cat.path)
+            #set($weblogUrl = "$weblog.URL$catParam")
+            #if($selectedCat.path == $cat.path)
                 <li class="selected"><a href="$weblogUrl">$cat.name</a></li>
             #else
                 <li><a href="$weblogUrl">$cat.name</a></li>
             #end
         #end
+        </ul>
+    #else 
+        <ul class="rCategory">
+        #_showWeblogCategory($categoryObject $expanding $subcats)
+        </ul>
+    #end
+#end
+
+
+#** 
+Show one weblog category's links as an HTML ul list, options for expanding and 
+recursion (private).
+*#
+#macro(_showWeblogCategory $categoryObject $expanding $subcats)
+    #set($catParam = "?cat=$utils.encode($cat.path)")
+    #set($weblogUrl = "$categoryObject.website.URL$catParam")
+    #if ($expanding && $categoryObject.name != "root" && $categoryObject.weblogCategories.size() > 0)
+        #set($divId = "div_$categoryObject.name")
+        <div class="rCategory">
+        <li><a href="javascript:toggleFolder('$divId')">
+            <span id="i$divId">+</span></a><a href="$weblogUrl">$categoryObject.name</a></li>
+        <ul id="$divId" style="display:none">
+    #elseif ($categoryObject.name != "root" && $categoryObject.weblogCategories.size() > 0)
+        <ul class="rCategory">
+    #elseif ($categoryObject.name != "root")
+        #if($selectedCat.path == $categoryObject.path)
+        <li class="selected"><a href="$weblogUrl">categoryObject.name</a>
+        #else
+        <li><a href="$weblogUrl">$categoryObject.name</a>
+        #end
+        </li>
+    #end
+    #set($cats = $categoryObject.getWeblogCategories())
+    #foreach($cat in $cats)
+        #_showWeblogCategory($cat $expanding $subcats)
+    #end
+    #if ($categoryObject.name != "root" && $categoryObject.weblogCategories.size() > 0)
+        </ul>
+    #end
+    #if($expanding && $categoryObject.name != "root" && $categoryObject.weblogCategories.size() > 0)
+    </div>
+    <script type="text/javascript">
+    <!-- 
+    folderPreference("$divId");
+    // -->
+    </script>
+    #end
+#end
+
+
+#**
+ * Show Roller Page Navigation Bar, includes links to all pages.
+ *#
+#macro(showPageLinksList $weblog)
+    <ul class="rNavigationBar">
+        <li class="rNavItem">
+            <a href="$config.getContextURL()">$config.getProperty("site.shortName")</a>
+        </li>
+        #foreach($iPage in $weblog.pages)
+            #set($invisible = $iPage.Name.startsWith("_"))
+            #if (!$invisible)
+                #set($isSelected = false)
+                #if ($page && $iPage.Id == $page.Id) #set($isSelected = true) #end
+                #if (!$isSelected)
+                    <li class="rNavItem"><a href="$weblog.URL/page/$iPage.Link">$iPage.Name</a></li>
+                #else
+                    <li class="rNavItem">$iPage.Name</li>
+                #end
+            #end
+        #end
+        #if ($utils.isUserAuthorizedToAuthor($weblog))
+            <li class="rNavItem">
+               <a href="$config.getWeblogEntryCreateURL($weblog)">$text.get("navigationBar.newEntry")</a>
+            </li>
+            #if($utils.isUserAuthorizedToAdmin($weblog))
+               <li class="rNavItem">
+                   <a href="$config.getWeblogSettingsURL($weblog)">$text.get("navigationBar.settings")</a>
+               </li>
+            #end
+                <li class="rNavItem">
+                    <a href="$config.getLogoutURL()">$text.get("navigationBar.logout")</a>
+                </li>
+        #else
+            #if ($utils.isUserAuthenticated())
+                <li class="rNavItem">
+                    <a href="$config.getLogoutURL()">$text.get("navigationBar.logout")</a>
+                </li>
+            #else
+                <li class="rNavItem">
+                    <a href="$config.getLoginURL()">$text.get("navigationBar.login")</a>
+                </li>
+            #end
+        #end
     </ul>
 #end
 
-#** Show recent weblog entries in specified category *#
-#macro(showWeblogEntryLinksList $weblog $categoryPath $max)
-   #set($recentEntries = $weblog.getRecentWeblogEntries($categoryPath, $max))
-   <ul class="recentposts">
-   #foreach ($var in $recentEntries)
-       <li class="recentposts"><a href="$var.permalink">$var.title</a></li>
-   #end
-   </ul>
+
+#** 
+Show trackback discovery code for one weblog entry, appears as an HTML comment.
+*#
+#macro(showTrackbackAutodiscoveryRDF $entry)
+<!--
+<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+         xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/"
+         xmlns:dc="http://purl.org/dc/elements/1.1/">
+<rdf:Description
+    rdf:about="$entry.permalink"
+    trackback:ping="$entry.trackbackURL"
+    dc:title="$entry.title"
+    dc:identifier="$entry.permalink"
+    dc:subject="$entry.category.name"
+    dc:description="$entry.title"
+    dc:creator="$entry.creator.userName"
+    dc:date="$entry.pubTime" />
+</rdf:RDF>
+-->
+#end
+
+
+#** 
+Show RSS, Atom and RSD auto-discovery links as HTML link elements.
+*#
+#macro(showAutodiscoveryLinks $weblog)
+    <link rel="alternate" type="application/atom+xml" title="Atom Entries"  href="$weblog.URL/feeds/entries/atom" />
+    <link rel="alternate" type="application/atom+xml" title="Atom Comments" href="$weblog.URL/feeds/comments/atom" />
+    <link rel="alternate" type="application/rss+xml"  title="RSS Entries"   href="$weblog.URL/feeds/entries/rss" />
+    <link rel="alternate" type="application/rss+xml"  title="RSS Comments"  href="$weblog.URL/feeds/comments/rss" />
+    #if ($weblog.enableBloggerApi)
+       <link rel="EditURI"   type="application/rsd+xml" title="RSD" href="$weblog.URL/rsd"/>
+    #end
 #end
+
+
+#** 
+Show weblog entry calendar, with optional category restriction.
+*#
+#macro(showWeblogEntryCalendar $weblog $category)
+$calendarModel.showWeblogEntryCalendar($weblog, $category)
+#end
+
+
+#** 
+Show weblog author menu with vertical or horizontal orientation.
+*#
+#macro(showAuthorMenu $vertical)
+$menuModel.showAuthorMenu($vertical)
+#end
+
+
+#** 
+Parse and inlued page template from weblog.
+*#
+#macro(includeTemplate $weblog $pageName)
+    #set($iPageId = false )## This is required for such constructs; see Velocity docs and ROL-689
+    #set($iPageId = $weblog.findPageIdByName($pageName))
+    #if (!$iPageId) ## no page found, parse pageName
+        #set($iPageId = $pageName)
+    #end
+    #parse($iPageId)
+#end
+
+
+#** 
+    TODO 3.0
+*#
+#macro(showSearchForm $weblog)
+$weblog
+#end
+
+
+#** 
+    TODO 3.0
+*#
+#macro(showSearchAgainForm $weblog)
+$weblog
+#end
+
+
+#** 
+    TODO 3.0
+*#
+#macro(showSearchSummary $weblog)
+$weblog
+#end
+
+
+#** 
+    TODO 3.0
+*#
+#macro(showSearchPager $pager)
+$pager
+#end
+
 

Modified: incubator/roller/branches/roller_3.0/web/themes/andreas08/Weblog.vm
URL: http://svn.apache.org/viewvc/incubator/roller/branches/roller_3.0/web/themes/andreas08/Weblog.vm?rev=423138&r1=423137&r2=423138&view=diff
==============================================================================
--- incubator/roller/branches/roller_3.0/web/themes/andreas08/Weblog.vm (original)
+++ incubator/roller/branches/roller_3.0/web/themes/andreas08/Weblog.vm Tue Jul 18 10:11:56 2006
@@ -1,38 +1,31 @@
-
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
+#set($themeDir = "$config.contextURL/themes/andreas08")
 <html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
 <head>
     <title>$model.weblog.name | #if (!$model.weblogCategory && $model.weblogPage.name == "Weblog") $model.weblogPage.name #elseif ($model.weblogCategory && $page.Name == "Weblog") $model.weblogCategory.name Category #elseif ($model.weblogPage.name == "Weblog") $title #else $model.weblogPage.name #end</title>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
     <meta http-equiv="Content-Language" content="en" />
-    <base href="$config.absoluteContextURL/$model.weblog.handle">
-    #includePage("_css")
-    #showRSSAutodiscoveryLink()
-    #showRSDLink()
-    <script type="text/javascript" src="$config.contextURL/themes/scripts/roller.js"></script>
-    <script type="text/javascript" src="$config.contextURL/themes/andreas08/scripts/prototype.js"></script>
-    <script type="text/javascript" 
-        src="$config.contextURL/themes/andreas08/scripts/scriptaculous.js?load=effects"></script>
-    <script type="text/javascript" src="$config.contextURL/themes/andreas08/scripts/lightbox.js"></script>
-    <link rel="stylesheet" type="text/css" href="$config.contextURL/themes/andreas08/styles/lightbox.css" />
+    <base href="$model.weblog.URL"> 
+    #includeTemplate($model.weblog "_css")
+    #showAutodiscoveryLinks($model.weblog)
+    ## import Javascript used by Roller's built-in macros
+    <script type="text/javascript" src="$config.getContextURL()/theme/scripts/roller.js"></script>
+    <script type="text/javascript" src="$themeDir/scripts/prototype.js"></script>
+    <script type="text/javascript" src="$themeDir/scripts/scriptaculous.js?load=effects"></script>
+    <script type="text/javascript" src="$themeDir/scripts/lightbox.js"></script>
+    <link rel="stylesheet" type="text/css" href="$themeDir/styles/lightbox.css" />
 </head>
 
-#if( $model.weblogCategory )
-    #set( $chosenCat = $model.weblogCategory.name )
-    #set( $chosenCat = $stringUtils.replace($chosenCat, " ", "").toLowerCase() )
-    #set( $chosenCat = $stringUtils.replace($chosenCat, "/", "") )
-#end
-
-<body id="page-$model.weblogPage.name"#if($chosenCat) class="$chosenCat"#end>
+<body>
     
 <div id="page">  
 
     <div id="header" class="clearfix">
-        <h1><a href="$config.contextURL/$model.weblog.handle">$model.weblog.name</a></h1>
+        <h1><a href="$model.weblog.URL">$model.weblog.name</a></h1>
 
         <h2><!-- Short tagline goes here --></h2>
-        <div id="branding"></div>
+        <div id="branding">$model.weblog.description</div>
     </div>
 
     <div id="content" class="clearfix">
@@ -42,7 +35,6 @@
         <div class="next-previous">
         #showNextPrevControl($pager)
         </div>
-
         <div class="entries">
         #showWeblogEntriesPager($pager)
         </div>
@@ -55,16 +47,17 @@
         </div><!-- end main -->
 
         <div id="sub">
-            #showCssNavBar()
-            <div class="editorMenu">$menuModel.showEditorNavBar(true)</div>
+            #showPageLinksList($model.weblog)
+            <div class="editorMenu">#showAuthorMenu(true)</div>
             <div class="small box" id="description">
                 <div id="feed">
-                    <a href="$config.contextURL/rss/${website.handle}"><img class="rssbadge"
-                        src="$config.contextURL/themes/$theme/images/feed-icon-16x16.jpg" alt="Click me to subscribe" /></a>
+                    <a href="$model.weblog.URL/feeds/rss"><img class="rssbadge"
+                        src="$themeDir/images/feed-icon-16x16.jpg" 
+                        alt="Click me to subscribe" /></a>
                 </div>
                 $model.weblog.description
             </div>
-            <div class="small" id="calendar">$calendarModel.showWeblogCalendar($model.weblog, "nil")</div>
+            <div class="small" id="calendar">#showWeblogEntryCalendar($model.weblog "nil")</div>
             <div id="searchbar">
                 <h2>Search This Site</h2>
 
@@ -88,13 +81,13 @@
         <div id="nav">
             <div class="wrapper">
                 <h2 class="hide">Navigation</h2>
-                #showCategoryLinksList($model.weblog "nil")
+                #showWeblogCategoryLinksList($model.weblog "nil" false false)
             </div>
         </div>
     </div><!-- end content -->
 
     <div id="footer" class="clearfix">
-        <p>&copy; $model.weblog.creator.fullName | Design by <a href="http://andreasviklund.com">Andreas Viklund</a></p>
+        <p>Design by <a href="http://andreasviklund.com">Andreas Viklund</a></p>
     </div>
 
 </div><!-- end page -->