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 2007/03/20 03:23:16 UTC

svn commit: r520228 - in /incubator/roller/trunk: metadata/database/tmpls/ src/org/apache/roller/pojos/ src/org/apache/roller/ui/authoring/struts/actions/ src/org/apache/roller/ui/authoring/struts/formbeans/ src/org/apache/roller/ui/rendering/servlets/...

Author: snoopdave
Date: Mon Mar 19 19:23:13 2007
New Revision: 520228

URL: http://svn.apache.org/viewvc?view=rev&rev=520228
Log:
Added outputContentType property to to WeblogTemplate class and made UI improvements to Template Editor pages

Added:
    incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/formbeans/WeblogTemplateFormEx.java
    incubator/roller/trunk/web/images/launch-link.png   (with props)
    incubator/roller/trunk/web/images/lock.png   (with props)
    incubator/roller/trunk/web/images/page_white.png   (with props)
    incubator/roller/trunk/web/images/page_white_delete.png   (with props)
    incubator/roller/trunk/web/images/page_white_gear.png   (with props)
Modified:
    incubator/roller/trunk/metadata/database/tmpls/3xx-to-400-migration.vm
    incubator/roller/trunk/metadata/database/tmpls/createdb.vm
    incubator/roller/trunk/src/org/apache/roller/pojos/StaticTemplate.java
    incubator/roller/trunk/src/org/apache/roller/pojos/Template.java
    incubator/roller/trunk/src/org/apache/roller/pojos/ThemeTemplate.java
    incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTemplate.java
    incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/actions/WeblogTemplateFormAction.java
    incubator/roller/trunk/src/org/apache/roller/ui/rendering/servlets/PageServlet.java
    incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties
    incubator/roller/trunk/web/WEB-INF/classes/roller.properties
    incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-page.jsp
    incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-pages.jsp
    incubator/roller/trunk/web/WEB-INF/jsps/authoring/remove-page.jsp
    incubator/roller/trunk/web/WEB-INF/jsps/tiles/footer.jsp
    incubator/roller/trunk/web/roller-ui/theme/tan/colors.css

Modified: incubator/roller/trunk/metadata/database/tmpls/3xx-to-400-migration.vm
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/metadata/database/tmpls/3xx-to-400-migration.vm?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/metadata/database/tmpls/3xx-to-400-migration.vm (original)
+++ incubator/roller/trunk/metadata/database/tmpls/3xx-to-400-migration.vm Mon Mar 19 19:23:13 2007
@@ -4,6 +4,9 @@
 DON'T RUN THIS, IT'S NOT A DATABASE CREATION SCRIPT!!!
 **#
 
+#addColumnNull("webpage" "outputtype" "varchar(48)")
+
+
 -- remove old id column of group subscription table
 alter table rag_group_subscription drop column id;
 

Modified: incubator/roller/trunk/metadata/database/tmpls/createdb.vm
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/metadata/database/tmpls/createdb.vm?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/metadata/database/tmpls/createdb.vm (original)
+++ incubator/roller/trunk/metadata/database/tmpls/createdb.vm Mon Mar 19 19:23:13 2007
@@ -77,7 +77,8 @@
     hidden          $db.BOOLEAN_SQL_TYPE_FALSE not null,
     navbar          $db.BOOLEAN_SQL_TYPE_FALSE not null,
     templatelang    varchar(20) not null,
-    decorator       varchar(255) default null
+    decorator       varchar(255) default null,
+    outputtype      varchar(48) default null
 );
 create index wp_name_idx on webpage( name$!db.INDEXSIZE );
 create index wp_link_idx on webpage( link$!db.INDEXSIZE );

Modified: incubator/roller/trunk/src/org/apache/roller/pojos/StaticTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/StaticTemplate.java?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/StaticTemplate.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/StaticTemplate.java Mon Mar 19 19:23:13 2007
@@ -40,6 +40,7 @@
     private String templateLanguage = null;
     private boolean hidden = false;
     private boolean navbar = false;
+    private String  outputContentType = null;
     
     
     public StaticTemplate() {}
@@ -132,5 +133,11 @@
         return navbar; 
     }
     
-    
+    public String getOutputContentType() {
+        return outputContentType;
+    }
+
+    public void setOutputContentType(String outputContentType) {
+        this.outputContentType = outputContentType;
+    }    
 }

Modified: incubator/roller/trunk/src/org/apache/roller/pojos/Template.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/Template.java?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/Template.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/Template.java Mon Mar 19 19:23:13 2007
@@ -98,4 +98,9 @@
      */
     public Template getDecorator();
     
+    /**
+     * Content-type of output or null if none defined.
+     */
+    public String getOutputContentType();
+    
 }

Modified: incubator/roller/trunk/src/org/apache/roller/pojos/ThemeTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/ThemeTemplate.java?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/ThemeTemplate.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/ThemeTemplate.java Mon Mar 19 19:23:13 2007
@@ -39,6 +39,7 @@
     private boolean hidden = false;
     private boolean navbar = false;
     private String decoratorName = null;
+    private String  outputContentType = null;
     
     private Theme myTheme = null;
     
@@ -150,6 +151,14 @@
 
     public void setDecoratorName(String decorator) {
         this.decoratorName = decorator;
+    }
+
+    public String getOutputContentType() {
+        return outputContentType;
+    }
+
+    public void setOutputContentType(String outputContentType) {
+        this.outputContentType = outputContentType;
     }
     
     public String toString() {

Modified: incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTemplate.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTemplate.java?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTemplate.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/pojos/WeblogTemplate.java Mon Mar 19 19:23:13 2007
@@ -29,7 +29,7 @@
 import org.apache.roller.RollerException;
 
 /**
- * Pojo that represents a single user defined template page.
+ * POJO that represents a single user defined template page.
  *
  * This template is different from the generic template because it also
  * contains a reference to the website it is part of.
@@ -39,8 +39,7 @@
  * @hibernate.class lazy="true" table="webpage"
  * @hibernate.cache usage="read-write"
  */
-public class WeblogTemplate 
-        implements Serializable, Template {
+public class WeblogTemplate implements Serializable, Template {
     
     public static final long serialVersionUID = -613737191638263428L;
     public static final String DEFAULT_PAGE = "Weblog";
@@ -48,16 +47,17 @@
     private static Log log = LogFactory.getLog(WeblogTemplate.class);
     private static Set requiredTemplates = null;
     
-    private String id = null;
-    private String name = null;
-    private String description = null;
-    private String link = null;
-    private String contents = null;
-    private Date lastModified = null;
-    private String templateLanguage = null;
+    private String  id = null;
+    private String  name = null;
+    private String  description = null;
+    private String  link = null;
+    private String  contents = null;
+    private Date    lastModified = null;
+    private String  templateLanguage = null;
     private boolean hidden = false;
     private boolean navbar = false;
-    private String decoratorName = null;
+    private String  decoratorName = null;
+    private String  outputContentType = null;
     
     private WebsiteData weblog = null;
     
@@ -272,6 +272,20 @@
     /** @ejb:persistent-field */
     public void setDecoratorName(String decorator) {
         this.decoratorName = decorator;
+    }
+    
+    /** 
+     * Content-type rendered by template or null for auto-detection by link extension.
+     * @ejb:persistent-field
+     * @hibernate.property column="outputtype" non-null="false" unique="false"
+     */
+    public String getOutputContentType() {
+        return outputContentType;
+    }
+
+    /** @ejb:persistent-field */
+    public void setOutputContentType(String outputContentType) {
+        this.outputContentType = outputContentType;
     }
     
     

Modified: incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/actions/WeblogTemplateFormAction.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/actions/WeblogTemplateFormAction.java?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/actions/WeblogTemplateFormAction.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/actions/WeblogTemplateFormAction.java Mon Mar 19 19:23:13 2007
@@ -19,6 +19,7 @@
 package org.apache.roller.ui.authoring.struts.actions;
 
 import java.io.IOException;
+import java.util.ArrayList;
 import java.util.Date;
 import java.util.List;
 import java.util.ResourceBundle;
@@ -34,11 +35,13 @@
 import org.apache.roller.RollerPermissionsException;
 import org.apache.roller.business.RollerFactory;
 import org.apache.roller.business.UserManager;
+import org.apache.roller.config.RollerConfig;
 import org.apache.roller.pojos.UserData;
 import org.apache.roller.pojos.WeblogTemplate;
 import org.apache.roller.pojos.WebsiteData;
-import org.apache.roller.ui.authoring.struts.forms.WeblogTemplateForm;
+import org.apache.roller.ui.authoring.struts.formbeans.WeblogTemplateFormEx;
 import org.apache.roller.ui.core.BasePageModel;
+import org.apache.roller.ui.core.RollerContext;
 import org.apache.roller.ui.core.RollerRequest;
 import org.apache.roller.ui.core.RollerSession;
 import org.apache.roller.util.Utilities;
@@ -51,12 +54,13 @@
 import org.apache.struts.action.ActionMessage;
 import org.apache.struts.action.ActionMessages;
 import org.apache.struts.actions.DispatchAction;
+import org.apache.struts.util.LabelValueBean;
 
 
 /**
  * Handles actions for weblog template management.
  *
- * @struts.action name="weblogTemplateForm" path="/roller-ui/authoring/page"
+ * @struts.action name="weblogTemplateFormEx" path="/roller-ui/authoring/page"
  *  	scope="session" parameter="method"
  *
  * @struts.action-forward name="removePage.page" path=".remove-page"
@@ -79,15 +83,14 @@
             throws IOException, ServletException {
         
         ActionForward forward = mapping.findForward("editPages.page");
-        WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+        WeblogTemplateFormEx form = (WeblogTemplateFormEx)actionForm;
         try {
-            request.setAttribute("model", new BasePageModel(
-                    "pagesForm.title", request, response, mapping));
             RollerRequest rreq = RollerRequest.getRollerRequest(request);
             RollerSession rses = RollerSession.getRollerSession(request);
             WebsiteData website = rreq.getWebsite();
             if ( rses.isUserAuthorizedToAdmin(website) ) {
                 
+
                 UserManager mgr = RollerFactory.getRoller().getUserManager();
                 
                 // first off, check if template already exists
@@ -96,33 +99,35 @@
                     ActionErrors errors = new ActionErrors();
                     errors.add(null, new ActionError("pagesForm.error.alreadyExists", form.getName()));
                     saveErrors(request, errors);
-                    addModelObjects(request, response, mapping, website, null);
+                    request.setAttribute("model",
+                        new WeblogTemplateFormModel("pagesForm.title", request, response, mapping, null));
                     return forward;
                 }
                 
-                WeblogTemplate data = new WeblogTemplate();
-                form.copyTo(data, request.getLocale());
-                data.setWebsite(website);
-                data.setLastModified( new Date() );
-                data.setDescription(data.getName());
-                data.setContents(bundle.getString("pageForm.newTemplateContent"));
-                validateLink( data );
+                WeblogTemplate page = new WeblogTemplate();
+                form.copyTo(page, request.getLocale());
+                page.setWebsite(website);
+                page.setLastModified( new Date() );
+                page.setDescription(page.getName());
+                page.setContents(bundle.getString("pageForm.newTemplateContent"));
+                
+                validateLink(page);
                 
                 // all templates start out as velocity templates
-                data.setTemplateLanguage("velocity");
+                page.setTemplateLanguage("velocity");
                 
                 // for now, all templates just use _decorator
-                if(!"_decorator".equals(data.getName())) {
-                    data.setDecoratorName("_decorator");
+                if(!"_decorator".equals(page.getName())) {
+                    page.setDecoratorName("_decorator");
                 }
                 
                 // save the page
-                mgr.savePage( data );
+                mgr.savePage( page );
                 
                 // if this person happened to create a Weblog template from
                 // scratch then make sure and set the defaultPageId
-                if(WeblogTemplate.DEFAULT_PAGE.equals(data.getName())) {
-                    website.setDefaultPageId(data.getId());
+                if(WeblogTemplate.DEFAULT_PAGE.equals(page.getName())) {
+                    website.setDefaultPageId(page.getId());
                     mgr.saveWebsite(website);
                 }
                 
@@ -132,12 +137,14 @@
                 ActionMessages uiMessages = new ActionMessages();
                 uiMessages.add(ActionMessages.GLOBAL_MESSAGE,
                         new ActionMessage("pagesForm.addNewPage.success",
-                        data.getName()));
+                        page.getName()));
                 saveMessages(request, uiMessages);
                 
                 actionForm.reset(mapping,request);
                 
-                addModelObjects(request, response, mapping, website, data);
+                request.setAttribute("model",
+                    new WeblogTemplateFormModel("pagesForm.title", request, response, mapping, page));
+                
             } else {
                 forward = mapping.findForward("access-denied");
             }
@@ -160,19 +167,25 @@
         ActionForward forward = mapping.findForward("editPage.page");
         try {
             RollerRequest rreq = RollerRequest.getRollerRequest(request);
-            WeblogTemplate pd = (WeblogTemplate)rreq.getPage();
+            WeblogTemplate page = (WeblogTemplate)rreq.getPage();
             
             RollerSession rses = RollerSession.getRollerSession(request);
-            if ( rses.isUserAuthorizedToAdmin(pd.getWebsite()) ) {
-                BasePageModel pageModel = new BasePageModel(
-                        "pageForm.title", request, response, mapping);
-                pageModel.setWebsite(pd.getWebsite());
-                request.setAttribute("model", pageModel);
+            if ( rses.isUserAuthorizedToAdmin(page.getWebsite()) ) {
                 
-                WeblogTemplateForm pf = (WeblogTemplateForm)actionForm;
-                pf.copyFrom(pd, request.getLocale());
+                WeblogTemplateFormEx form = (WeblogTemplateFormEx)actionForm;
+                form.copyFrom(page, request.getLocale());
                 
-                addModelObjects(request, response, mapping, pd.getWebsite(), pd);
+                // empty content-type indicates that page uses auto content-type detection
+                if (StringUtils.isEmpty(page.getOutputContentType())) {
+                    form.setAutoContentType(Boolean.TRUE);
+                } else {
+                    form.setAutoContentType(Boolean.FALSE);
+                    form.setManualContentType(page.getOutputContentType());
+                }
+                
+                request.setAttribute("model",
+                    new WeblogTemplateFormModel("pageForm.title", request, response, mapping, page));
+
             } else {
                 forward = mapping.findForward("access-denied");
             }
@@ -193,12 +206,10 @@
         
         ActionForward forward = mapping.findForward("editPages.page");
         try {
-            WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+            WeblogTemplateFormEx form = (WeblogTemplateFormEx)actionForm;
             RollerRequest rreq = RollerRequest.getRollerRequest(request);
             RollerSession rses = RollerSession.getRollerSession(request);
-            request.setAttribute("model", new BasePageModel(
-                    "pagesForm.title", request, response, mapping));
-            
+
             WebsiteData website = rreq.getWebsite();
             if (website == null && form.getId()!=null) {
                 UserManager mgr = RollerFactory.getRoller().getUserManager();
@@ -206,11 +217,13 @@
                 website = template.getWebsite();
             }
             
-            if ( rses.isUserAuthorizedToAdmin(website)) {
-                addModelObjects(request, response, mapping, website, null);
-            } else {
+            request.setAttribute("model", 
+                new WeblogTemplateFormModel("pagesForm.title", request, response, mapping, null));
+            
+            if (!rses.isUserAuthorizedToAdmin(website)) {
                 forward = mapping.findForward("access-denied");
             }
+            
         } catch (Exception e) {
             log.error("ERROR in action",e);
             throw new ServletException(e);
@@ -227,14 +240,16 @@
             throws IOException, ServletException {
         
         ActionForward forward = mapping.findForward("editPages");
-        request.setAttribute("model", new BasePageModel(
-                "pagesForm.title", request, response, mapping));
         try {
             UserManager mgr = RollerFactory.getRoller().getUserManager();
-            WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+            WeblogTemplateFormEx form = (WeblogTemplateFormEx)actionForm;
             WeblogTemplate template = mgr.getPage(form.getId());
             WebsiteData website = template.getWebsite();
             
+            WeblogTemplateFormModel pageModel = 
+                new WeblogTemplateFormModel("pagesForm.title", request, response, mapping, null);
+            request.setAttribute("model", pageModel);
+
             RollerSession rses = RollerSession.getRollerSession(request);
             if ( rses.isUserAuthorizedToAdmin(website) ) {
                 if(!template.isRequired()) {
@@ -250,8 +265,6 @@
                     throw new RollerException("Cannot remove required page");
                 }
                 
-                addModelObjects(
-                        request, response, mapping, template.getWebsite(), template);
                 actionForm.reset(mapping, request);
             } else {
                 forward = mapping.findForward("access-denied");
@@ -284,18 +297,13 @@
             WeblogTemplate page = (WeblogTemplate) rreq.getPage();
             WebsiteData website = page.getWebsite();
             if ( rses.isUserAuthorizedToAdmin(website) ) {
-                WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
+                WeblogTemplateFormEx form = (WeblogTemplateFormEx)actionForm;
                 form.copyFrom(page, request.getLocale());
                 
-                addModelObjects(request, response, mapping, page.getWebsite(), page);
-                
-                BasePageModel pageModel = new BasePageModel(
-                        "editPages.title.removeOK", request, response, mapping);
-                pageModel.setWebsite(website);
+                WeblogTemplateFormModel pageModel = 
+                    new WeblogTemplateFormModel("editPages.title.removeOK", request, response, mapping, page);
                 request.setAttribute("model", pageModel);
                 
-                UserData ud = rses.getAuthenticatedUser();
-                request.setAttribute("user",ud);
             } else {
                 forward = mapping.findForward("access-denied");
             }
@@ -316,38 +324,46 @@
         
         ActionForward forward = mapping.findForward("editPage.page");
         try {
-            RollerRequest rreq = RollerRequest.getRollerRequest(request);
-            WeblogTemplateForm form = (WeblogTemplateForm)actionForm;
-            UserManager mgr = RollerFactory.getRoller().getUserManager();
-            WeblogTemplate data = mgr.getPage(form.getId());
-            WebsiteData website = data.getWebsite();
+            WeblogTemplateFormEx form = (WeblogTemplateFormEx)actionForm;
+
+            RollerRequest  rreq = RollerRequest.getRollerRequest(request);
+            UserManager    mgr = RollerFactory.getRoller().getUserManager();
+            WeblogTemplate page = mgr.getPage(form.getId());
+            WebsiteData    website = page.getWebsite();
+            
             
             RollerSession rses = RollerSession.getRollerSession(request);
             if (rses.isUserAuthorizedToAdmin(website)) {
-                form.copyTo(data, request.getLocale());
-                data.setLastModified( new Date() );
                 
-                validateLink( data );
+
+                form.copyTo(page, request.getLocale());
+                page.setLastModified( new Date() );                                
                 
-                mgr.savePage( data );
+                if (form.getAutoContentType() == null || !form.getAutoContentType().booleanValue()) { 
+                    page.setOutputContentType(form.getManualContentType());
+                } else {
+                    // empty content-type indicates that page uses auto content-type detection
+                    page.setOutputContentType(null);
+                }
+                
+                validateLink(page);
+
+                mgr.savePage( page );
                 RollerFactory.getRoller().flush();
                 
                 // set the (possibly) new link back into the Form bean
-                ((WeblogTemplateForm)actionForm).setLink( data.getLink() );
+                ((WeblogTemplateFormEx)actionForm).setLink( page.getLink() );
                 
                 ActionMessages uiMessages = new ActionMessages();
                 uiMessages.add(ActionMessages.GLOBAL_MESSAGE,
                         new ActionMessage("pageForm.save.success",
-                        data.getName()));
+                        page.getName()));
                 saveMessages(request, uiMessages);
                 
-                CacheManager.invalidate(data);
+                CacheManager.invalidate(page);
                 
-                addModelObjects(request, response, mapping, data.getWebsite(), data);
-                
-                BasePageModel pageModel = new BasePageModel(
-                        "pageForm.title", request, response, mapping);
-                pageModel.setWebsite(website);
+                WeblogTemplateFormModel pageModel = 
+                    new WeblogTemplateFormModel("pageForm.title", request, response, mapping, page);
                 request.setAttribute("model", pageModel);
                 
             } else {
@@ -377,21 +393,21 @@
      * characters that are web-safe), this is a much easier
      * test-and-correct.  Otherwise we would need a RegEx package.
      */
-    private void validateLink( WeblogTemplate data ) {
-        // if data.getLink() is null or empty
-        // use the title ( data.getName() )
-        if ( StringUtils.isEmpty( data.getLink() ) ) {
-            data.setLink( data.getName() );
+    private void validateLink( WeblogTemplate page ) {
+        // if page.getLink() is null or empty
+        // use the title ( page.getName() )
+        if ( StringUtils.isEmpty( page.getLink() ) ) {
+            page.setLink( page.getName() );
         }
         
         // if link contains any nonAlphanumeric, strip them
         // first we must remove any html, as this is
         // non-instructional markup.  Then do a straight
         // removeNonAlphanumeric.
-        if ( !StringUtils.isAlphanumeric( data.getLink() ) ) {
-            String link = Utilities.removeHTML( data.getLink() );
+        if ( !StringUtils.isAlphanumeric( page.getLink() ) ) {
+            String link = Utilities.removeHTML( page.getLink() );
             link = Utilities.removeNonAlphanumeric( link );
-            data.setLink( link );
+            page.setLink( link );
         }
     }
     
@@ -402,33 +418,88 @@
             HttpServletRequest  request,
             HttpServletResponse response)
             throws IOException, ServletException {
-        request.setAttribute("model", new BasePageModel(
-                "pagesForm.title", request, response, mapping));
-        return (mapping.findForward("editPages"));
+        try {
+            request.setAttribute("model", new WeblogTemplateFormModel(
+                    "pagesForm.title", request, response, mapping, null));
+            return (mapping.findForward("editPages"));
+        } catch (Exception e) {
+            log.error("ERROR in action",e);
+            throw new ServletException(e);
+        }
     }
     
-    
-    private void addModelObjects(
-            HttpServletRequest  request,
-            HttpServletResponse response,
-            ActionMapping mapping,
-            WebsiteData website,
-            WeblogTemplate page)
-            throws RollerException {
-        UserManager mgr = RollerFactory.getRoller().getUserManager();
-        RollerSession rses = RollerSession.getRollerSession(request);
-        RollerRequest rreq = RollerRequest.getRollerRequest(request);
-        
-        UserData user = rses.getAuthenticatedUser();
-        request.setAttribute("user", user);
-        
-        WebsiteData wd = rreq.getWebsite();
-        request.setAttribute("website", website);
-        
-        List pages = mgr.getPages(website);
-        request.setAttribute("pages", pages);
-        
-        if (page != null) request.setAttribute("page", page);
+    public class WeblogTemplateFormModel extends BasePageModel {
+        private UserData       user;
+        private WeblogTemplate page;
+        private List           pages;
+        private List           languages = new ArrayList();
+
+        public WeblogTemplateFormModel(
+                String titleKey,
+                HttpServletRequest request,
+                HttpServletResponse response,
+                ActionMapping mapping,
+                WeblogTemplate page) throws RollerException {
+
+            super(titleKey, request, response, mapping);
+
+            UserManager mgr = RollerFactory.getRoller().getUserManager();
+            RollerSession rses = RollerSession.getRollerSession(request);
+            RollerRequest rreq = RollerRequest.getRollerRequest(request);  
+            
+            if (page != null) {
+                this.setWebsite(page.getWebsite());
+            } else {
+                this.setWebsite(rreq.getWebsite());
+            }
+ 
+            this.setUser(rses.getAuthenticatedUser());        
+            this.setPages(mgr.getPages(getWebsite()));
+            this.setPage(page); 
+            
+            if (page != null) {
+                String langs = RollerConfig.getProperty("rendering.templateLanguages","velocity");
+                String[] langsArray = Utilities.stringToStringArray(langs, ",");
+                for (int i = 0; i < langsArray.length; i++) {
+                    getLanguages().add(new LabelValueBean(langsArray[i], langsArray[i]));
+                }
+            }
+        }
+
+        public UserData getUser() {
+            return user;
+        }
+
+        public void setUser(UserData user) {
+            this.user = user;
+        }
+
+        public WeblogTemplate getPage() {
+            return page;
+        }
+
+        public void setPage(WeblogTemplate page) {
+            this.page = page;
+        }
+
+        public List getPages() {
+            return pages;
+        }
+
+        public void setPages(List pages) {
+            this.pages = pages;
+        }
+
+        public List getLanguages() {
+            return languages;
+        }
+
+        public void setLanguages(List languages) {
+            this.languages = languages;
+        }
     }
-    
+
 }
+
+
+

Added: incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/formbeans/WeblogTemplateFormEx.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/formbeans/WeblogTemplateFormEx.java?view=auto&rev=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/formbeans/WeblogTemplateFormEx.java (added)
+++ incubator/roller/trunk/src/org/apache/roller/ui/authoring/struts/formbeans/WeblogTemplateFormEx.java Mon Mar 19 19:23:13 2007
@@ -0,0 +1,65 @@
+/*
+* 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.ui.authoring.struts.formbeans;
+
+import java.util.Locale;
+import org.apache.roller.RollerException;
+import org.apache.roller.pojos.WeblogTemplate;
+import org.apache.roller.ui.authoring.struts.forms.WeblogTemplateForm;
+import org.apache.roller.ui.core.RollerContext;
+
+/**
+ * @struts.form name="weblogTemplateFormEx"
+ */
+public class WeblogTemplateFormEx extends WeblogTemplateForm {
+    private Boolean autoContentType = Boolean.TRUE;
+    private String manualContentType = null;
+        
+    public void reset(
+            org.apache.struts.action.ActionMapping mapping,
+            javax.servlet.ServletRequest request) {
+        doReset(mapping, request);  
+        setAutoContentType(Boolean.TRUE);
+        manualContentType = null;
+    }
+    
+    public void reset(
+            org.apache.struts.action.ActionMapping mapping,
+            javax.servlet.http.HttpServletRequest request) {
+        doReset(mapping, request); 
+        setAutoContentType(Boolean.TRUE);
+        manualContentType = null;
+    }
+
+    public Boolean getAutoContentType() {
+        return autoContentType;
+    }
+
+    public void setAutoContentType(Boolean autoContentType) {
+        this.autoContentType = autoContentType;
+    }
+
+    public String getManualContentType() {
+        return manualContentType;
+    }
+
+    public void setManualContentType(String manualContentType) {
+        this.manualContentType = manualContentType;
+    }    
+}

Modified: incubator/roller/trunk/src/org/apache/roller/ui/rendering/servlets/PageServlet.java
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/src/org/apache/roller/ui/rendering/servlets/PageServlet.java?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/src/org/apache/roller/ui/rendering/servlets/PageServlet.java (original)
+++ incubator/roller/trunk/src/org/apache/roller/ui/rendering/servlets/PageServlet.java Mon Mar 19 19:23:13 2007
@@ -30,6 +30,7 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.JspFactory;
 import javax.servlet.jsp.PageContext;
+import org.apache.commons.lang.StringUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.roller.RollerException;
@@ -329,11 +330,17 @@
         // looks like we need to render content
         
         // set the content type
-        String mimeType = RollerContext.getServletContext().getMimeType(page.getLink());
         String contentType = "text/html; charset=utf-8";
-        if(mimeType != null) {
-            // we found a match ... set the content type
-            contentType = mimeType+"; charset=utf-8";
+        if (StringUtils.isNotEmpty(page.getOutputContentType())) {
+            contentType = page.getOutputContentType() + "; charset=utf-8";
+        } else {
+            String mimeType = RollerContext.getServletContext().getMimeType(page.getLink()); 
+            if (mimeType != null) {
+                // we found a match ... set the content type
+                contentType = mimeType + "; charset=utf-8";
+            } else {
+                contentType = "text/html; charset=utf-8";
+            }
         }
 
         HashMap model = new HashMap();

Modified: incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties (original)
+++ incubator/roller/trunk/web/WEB-INF/classes/ApplicationResources.properties Mon Mar 19 19:23:13 2007
@@ -882,9 +882,10 @@
 pagesForm.subtitle=Manage templates that define weblog <span>{0}</span>
 pagesForm.tip=You can edit the templates that define the layout, colors and \
 fonts of your weblog. You can also create new templates to define entirely \
-new pages. This is for advanced users only, if you're not comfortable with \
-HTML, you might want to leave your templates alone.
+new pages. This is for advanced users only, if you're not comfortable \
+with HTML, you might want to leave your templates alone.
 
+pageForm.advancedSettings=Advanced Settings
 pagesForm.name=Name
 pagesForm.link=Link
 pagesForm.description=Description
@@ -901,6 +902,11 @@
 theme, so some template edits may not effect how your blog looks.
 editPages.title.removeOK=Confirm remove of template
 
+pagesForm.launch=launch
+pagesForm.outputContentType=Type
+pagesForm.column.navbar=Navbar
+pagesForm.column.hidden=Hidden page
+
 pageCache.flushed=Page cache has been successfully flushed.
 
 pagesForm.error.alreadyExists=The template {0} already exists.
@@ -908,11 +914,22 @@
 # -------------------------------------------------------------------- Page edit
 
 pageForm.title=Edit Template
-pageForm.editPage=Edit Template
+pageForm.subtitle=Edit template <span>{0}</span> in weblog <span>{1}</span>
+pageForm.tip=You can edit this template to change what it generates.\
+Refer the the Roller Template Guide for information about the objects \
+and code you are allowed to use in a template. This is for advanced \
+users only, if you're not comfortable with HTML, you might want to leave \
+your templates alone.
+pageForm.tip.required=You can edit this template to change what it generates.\
+Refer the the Roller Template Guide for information about the objects \
+and code you are allowed to use in a template. This is for advanced \
+users only, if you're not comfortable with HTML, you might want to leave \
+your templates alone. NOTE: this is a required weblog template, you cannot \
+change the name, link or description.
 pageForm.name=Name
 pageForm.link=Link
 pageForm.hidden=Hidden
-pageForm.hidden.tip=Hidden templates cannot be accessed via a weblog URL
+pageForm.hidden.tip=Hidden pages cannot be accessed via a weblog URL
 pageForm.navbar=Include in page menu
 pageForm.navbar.tip=Include in menu produced by showPageMenu() macro
 pageForm.description=Description
@@ -920,8 +937,18 @@
 pageForm.save=Save
 pageForm.newTemplateContent=<html><body></body></html>
 pageForm.save.success=Template updated successfully.
-pagesForm.column.navbar=Navbar
-pagesForm.column.hidden=Hidden
+pageForm.launch=launch
+pageForm.useAutoContentType=Automatically set content type
+pageForm.useManualContentType=Use manually specified content-type
+
+pageForm.templateLanguage=Template Language
+
+pageForm.outputContentType=Content-Type
+pageForm.outputContentTypeHTML=HTML (text/html)
+pageForm.outputContentTypeXHTML=XHTML (application/xhtml+xml)
+pageForm.outputContentTypeJavaScript=JavaScript (text/script)
+pageForm.outputContentTypeStyle=CSS (test/style)
+pageForm.outputContentTypeCustom=Custom...
 
 pageRemove.subtitle=Confirm removal of page
 pageRemove.youSure=Are you sure you want to remove this page?

Modified: incubator/roller/trunk/web/WEB-INF/classes/roller.properties
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/classes/roller.properties?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/classes/roller.properties (original)
+++ incubator/roller/trunk/web/WEB-INF/classes/roller.properties Mon Mar 19 19:23:13 2007
@@ -99,6 +99,9 @@
 rendering.rollerRendererFactories=\
 org.apache.roller.ui.rendering.velocity.VelocityRendererFactory
 
+# List of available template languages
+rendering.templateLanguages=velocity,groovlet,gsp,javascript
+
 # The set of user defined renderer factories.  These are prepended to the list above.
 rendering.userRendererFactories=
 

Modified: incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-page.jsp
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-page.jsp?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-page.jsp (original)
+++ incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-page.jsp Mon Mar 19 19:23:13 2007
@@ -16,29 +16,40 @@
   directory of this distribution.
 --%>
 <%@ include file="/WEB-INF/jsps/taglibs.jsp" %>
-<script type="text/javascript">
-<!--
-function cancel() {
-    document.weblogTemplateForm.method.value="cancel"; 
-    document.weblogTemplateForm.submit();
-}
--->
-</script>
 
 <roller:StatusMessage/>
 
+<p class="subtitle">
+   <fmt:message key="pageForm.subtitle" >
+       <fmt:param value="${model.page.name}" />
+       <fmt:param value="${model.website.handle}" />
+   </fmt:message>
+</p>  
+<c:choose>
+    <c:when test="${model.page.required}">
+        <p class="pagetip"><fmt:message key="pageForm.tip.required" /></p>
+    </c:when>
+    <c:otherwise>
+        <p class="pagetip"><fmt:message key="pageForm.tip" /></p>
+    </c:otherwise>
+</c:choose>
+                
 <html:form action="/roller-ui/authoring/page" method="post">
-
-	<p class="subtitle">
-        <fmt:message key="pageForm.editPage" />:
-        <bean:write name="weblogTemplateForm" property="name" />
-	</p>
+    <html:hidden property="id"/>
+    <html:hidden property="decoratorName" />
+    <html:hidden property="required" />
+    <input type="hidden" name="method" value="update" />
+    <input type="hidden" name="weblog" value='<c:out value="${model.website.handle}" />' />
+    
+    <%-- ================================================================== --%>
+    <%-- Name, link and desription: disabled when page is a required page --%>
+    
     <table cellspacing="5">
         <tr>
             <td class="label"><fmt:message key="pageForm.name" />&nbsp;</td>
             <td class="field">
                 <c:choose>
-                    <c:when test="${page.required}">
+                    <c:when test="${model.page.required}">
                         <html:text style="background: #e5e5e5" property="name" size="50" readonly="true"/>
                     </c:when>
                     <c:otherwise>
@@ -49,17 +60,57 @@
             <td class="description"></td>
         </tr>
         
+        <script type="text/javascript">
+        <!--
+        var weblogURL = '<c:out value="${model.website.absoluteURL}" />';
+        var originalLink = '<c:out value="${model.page.link}" />';
+        
+        // Update page URL when user changes link
+        function updatePageURLDisplay() {
+            var previewSpan = document.getElementById("handlePreview");
+            var n1 = previewSpan.firstChild;
+            var n2 = document.createTextNode(document.weblogTemplateFormEx.link.value);
+            if (n1 == null) {
+                previewSpan.appendChild(n2);
+            } else {
+                previewSpan.replaceChild(n2, n1);
+            }           
+        }
+        // Don't launch page if user has changed link, it'll be a 404
+        function launchPage() {
+            if (originalLink != document.weblogTemplateFormEx.link.value) {
+                window.alert("Link changed, not launching page");
+            } else {
+                window.open(weblogURL + '/page/' + originalLink, '_blank');
+            }
+        }
+        // Only highlight launch link user hasn't changed link
+        function highlightLaunchLink() {
+            if (originalLink == document.weblogTemplateFormEx.link.value) {
+                document.getElementById('launchLink').style.textDecoration = 'underline';
+            }
+        }
+        function unhighlightLaunchLink() {
+                document.getElementById('launchLink').style.textDecoration = 'none';
+        }
+        -->
+        </script>
+
         <tr>
-            <td class="label"><fmt:message key="pageForm.link" />&nbsp;</td>
+            <td class="label" valign="top"><fmt:message key="pageForm.link" />&nbsp;</td>
             <td class="field">
                 <c:choose>
-                    <c:when test="${page.required}">
+                    <c:when test="${model.page.required}">
                         <html:text style="background: #e5e5e5" property="link" size="50" readonly="true"/>
                     </c:when>
                     <c:otherwise>
-                        <html:text property="link" size="50"/>
+                        <html:text property="link" size="50" onkeyup="updatePageURLDisplay()" />
                     </c:otherwise>
                 </c:choose>
+                <br />
+                <c:out value="${model.website.absoluteURL}" />/page/<span id="handlePreview" style="color:red"><c:out value="${model.page.link}" /></span>
+                [<span id="launchLink" class="fakelink" 
+                    onClick="launchPage()" onMouseOver="highlightLaunchLink()" onMouseOut="unhighlightLaunchLink()"><fmt:message key="pageForm.launch" /></span>]
             </td>
             <td class="description"></td>
         </tr>
@@ -68,60 +119,184 @@
             <td class="label" valign="top" style="padding-top: 4px"><fmt:message key="pageForm.description" />&nbsp;</td>
             <td class="field">
                 <c:choose>
-                    <c:when test="${page.required}">
+                    <c:when test="${model.page.required}">
                         <html:textarea style="background: #e5e5e5" property="description" cols="50" rows="2" readonly="true"/>
                     </c:when>
                     <c:otherwise>
-                        <html:textarea property="link" cols="50" rows="2" />
+                        <html:textarea property="description" cols="50" rows="2" />
                     </c:otherwise>
                 </c:choose>
             </td>
             <td class="description"></td>
         </tr>
         
-        <c:choose>
-        <c:when test="${page.required}">
-            <html:hidden property="navbar" />
-        </c:when>
-        <c:otherwise>
+    </table>
+    
+    <%-- ================================================================== --%>
+    <%-- Template editing area w/resize buttons --%>
+    
+    <br />
+    <html:textarea property="contents" cols="80" rows="30" style="width: 100%" />
+    
+    <script type="text/javascript"><!--
+        if (getCookie("editorSize1") != null) {
+            document.weblogTemplateFormEx.contents.rows = getCookie("editorSize1");
+        }
+        function changeSize(e, num) {
+            a = e.rows + num;
+            if (a > 0) e.rows = a;
+            var expires = new Date();
+            expires.setTime(expires.getTime() + 24 * 90 * 60 * 60 * 1000); // sets it for approx 90 days.
+            setCookie("editorSize",e.rows,expires);
+        }
+        function changeSize1(e, num) {
+            a = e.rows + num;
+            if (a > 0) e.rows = a;
+            var expires = new Date();
+            expires.setTime(expires.getTime() + 24 * 90 * 60 * 60 * 1000); // sets it for approx 90 days.
+            setCookie("editorSize1",e.rows,expires);
+        }
+    // --></script>    
+    <table style="width:100%"><tr><td align="right">
+        <!-- Add buttons to make this textarea taller or shorter -->
+        <input type="button" name="taller" value=" &darr; " 
+            onclick="changeSize1(document.weblogTemplateFormEx.contents, 5)" />
+        <input type="button" name="shorter" value=" &uarr; " 
+            onclick="changeSize1(document.weblogTemplateFormEx.contents, -5)" />
+    </td></tr></table>
+   
+    
+    <%-- ================================================================== --%>
+    <%-- Advanced settings inside a control toggle --%>
+        
+    <br />
+    <div id="advancedControlToggle" class="controlToggle">
+        <span id="iadvancedControl">+</span>
+        <a class="controlToggle" onclick="javascript:toggleControl('advancedControlToggle','advancedControl')">
+        <fmt:message key="pageForm.advancedSettings" /></a>
+    </div>
+    <div id="advancedControl" class="advancedControl" style="display:none">
+        
+        <table cellspacing="0">
+            
             <tr>
-                <td class="label"><fmt:message key="pageForm.navbar" />&nbsp;</td>
-                <td class="field"><html:checkbox property="navbar" /> <fmt:message key="pageForm.navbar.tip" /></td>
+                <script type="text/javascript"><!--
+                    function showContentTypeField() {
+                        if (document.weblogTemplateFormEx.autoContentType[0].checked) {
+                            document.weblogTemplateFormEx.manualContentType.readOnly = true;
+                            document.weblogTemplateFormEx.manualContentType.style.background = '#e5e5e5';
+                        } else {
+                            document.weblogTemplateFormEx.manualContentType.readOnly = false;
+                            document.weblogTemplateFormEx.manualContentType.style.background = '#ffffff';
+                        }
+                    }
+                // --></script> 
+                <td class="field">                
+                    <tr>
+                        <td class="label" valign="top"><fmt:message key="pageForm.outputContentType" />&nbsp;</td>
+                        <td class="field">
+                                                        
+                            <html:radio property="autoContentType" value="true" onchange="showContentTypeField()" /> 
+                            <fmt:message key="pageForm.useAutoContentType" /><br />
+                            
+                            <html:radio property="autoContentType" value="false" onchange="showContentTypeField()" />
+                            <fmt:message key="pageForm.useManualContentType" />
+                            <html:text property="manualContentType" />   
+                            
+                            <br />
+                            <br />
+                                               
+                        </td>
+                        <td class="description"></td>
+                    </tr>
+                </td>
                 <td class="description"></td>
+                <script type="text/javascript"><!--
+                    showContentTypeField();
+                // --></script> 
             </tr>
-        </c:otherwise>
-        </c:choose>
-        
-        <c:choose>
-        <c:when test="${page.required}">
-            <html:hidden property="hidden" />
-        </c:when>
-        <c:otherwise>
+            
             <tr>
-                <td class="label"><fmt:message key="pageForm.hidden" />&nbsp;</td>
-                <td class="field"><html:checkbox property="hidden" /> <fmt:message key="pageForm.hidden.tip" /></td>
+                <td class="field">                
+                    <c:choose>
+                        <c:when test="${model.page.required}">
+                            <html:hidden property="navbar" />
+                        </c:when>
+                        <c:otherwise>
+                            <tr>
+                                <td class="label"><fmt:message key="pageForm.navbar" />&nbsp;</td>
+                                <td class="field"><html:checkbox property="navbar" /> 
+                                    <fmt:message key="pageForm.navbar.tip" />
+                                </td>
+                                <td class="description"></td>
+                            </tr>
+                        </c:otherwise>
+                    </c:choose>
+                </td>
                 <td class="description"></td>
             </tr>
-        </c:otherwise>
-        </c:choose>
-    </table>
-    
-    <br />
-    <html:textarea property="contents" cols="80" rows="30" style="width: 100%" />
             
-    <html:hidden property="id"/>
-    <html:hidden property="name"/>
-    <html:hidden property="templateLanguage" />
-    <html:hidden property="decoratorName" />
-    <html:hidden property="required" />
-    
-    <input type="hidden" name="method" value="update" />
-    <input type="hidden" name="weblog" value='<c:out value="${model.website.handle}" />' />
+            <td class="field">                
+                <c:choose>
+                    <c:when test="${model.page.required}">
+                        <html:hidden property="hidden" />
+                    </c:when>
+                    <c:otherwise>
+                        <tr>
+                            <td class="label"><fmt:message key="pageForm.hidden" />&nbsp;</td>
+                            <td class="field"><html:checkbox property="hidden" />
+                                <fmt:message key="pageForm.hidden.tip" />
+                            </td>
+                            <td class="description"></td>                            
+                        </tr>
+                    </c:otherwise>
+                </c:choose>
+                <br />
+                <br />
 
+            </td>
+            <td class="description"></td> 
+            </tr>
+                        
+            <tr>
+                <td class="field">                
+                    <c:choose>
+                        <c:when test="${model.page.required || !model.rollerSession.globalAdminUser}">
+                            <html:hidden property="templateLanguage" />
+                        </c:when>
+                        <c:otherwise>
+                            <tr>
+                                <td class="label"><fmt:message key="pageForm.templateLanguage" />&nbsp;</td>
+                                <td class="field">
+                                    <html:select property="templateLanguage" size="1" >
+                                        <html:optionsCollection name="model" property="languages" value="value" label="label"  />
+                                    </html:select>
+                                </td>
+                                <td class="description"></td>
+                            </tr>
+                        </c:otherwise>
+                    </c:choose>
+                </td>
+                <td class="description"></td>
+            </tr>
+                        
+        </table>
+        <br />
+        
+    </div>
+    
+    <script type="text/javascript">
+    <!--
+    function cancel() {
+        document.weblogTemplateFormEx.method.value="cancel"; 
+        document.weblogTemplateFormEx.submit();
+    }
+    -->
+    </script>
     <br />
     <input type="submit" value='<fmt:message key="pageForm.save" />' /></input>
     <input type="button" value='<fmt:message key="application.done" />' onclick="cancel()" /></input>
-
+    
 </html:form>
 
 <%--

Modified: incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-pages.jsp
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-pages.jsp?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-pages.jsp (original)
+++ incubator/roller/trunk/web/WEB-INF/jsps/authoring/edit-pages.jsp Mon Mar 19 19:23:13 2007
@@ -29,63 +29,59 @@
    <fmt:message key="pagesForm.tip" />
 </p>
 
-<c:if test="${website.editorTheme ne customTheme}">
-<p><fmt:message key="pagesForm.themesReminder"><fmt:param value="${website.editorTheme}"/></fmt:message></p>
+<c:if test="${model.website.editorTheme ne customTheme}">
+<p><fmt:message key="pagesForm.themesReminder"><fmt:param value="${model.website.editorTheme}"/></fmt:message></p>
 </c:if>
 
 <%-- table of pages --%>
 <table class="rollertable">
     <tr>
-        <th width="10%"><fmt:message key="pagesForm.name" /></th>
+        <th width="30%"><fmt:message key="pagesForm.name" /></th>
         <th width="60%"><fmt:message key="pagesForm.description" /></th>
-        <th width="10%"><fmt:message key="pagesForm.link" /></th>
-        <th width="5%"><fmt:message key="pagesForm.column.navbar" /></th>
-        <th width="5%"><fmt:message key="pagesForm.column.hidden" /></th>
-        <th width="5%"><fmt:message key="pagesForm.edit" /></th>
-        <th width="5%"><fmt:message key="pagesForm.remove" /></th>
+        <th width="10"><fmt:message  key="pagesForm.remove" /></th>
     </tr>
-    <logic:iterate id="p" name="pages" >
+    <c:forEach var="p" items="${model.pages}" >
         <roller:row oddStyleClass="rollertable_odd" evenStyleClass="rollertable_even">
 
-            <td><bean:write name="p" property="name" /></td>
-            <td><bean:write name="p" property="description" /></td>
-            <td><bean:write name="p" property="link" /></td>
-            <td class="center">
-                <logic:equal name="p" property="navbar" value="true">
-                    <fmt:message key="application.true" />
-                </logic:equal>
+            <td style="vertical-align:middle">
+                <c:choose>
+                    <c:when test="${!p.hidden}">
+                        <img src='<c:url value="/images/page_white.png"/>' border="0" alt="icon" />
+                        <roller:link forward="editPage">
+                            <roller:linkparam id="pageId" name="p" property="id" />
+                            <c:out value="${p.name}" />
+                        </roller:link>
+                    </c:when>
+                    <c:otherwise>
+                        <img src='<c:url value="/images/page_white_gear.png"/>' border="0" alt="icon" />
+                        <roller:link forward="editPage">
+                            <roller:linkparam id="pageId" name="p" property="id" />
+                            <c:out value="${p.name}" />
+                        </roller:link>
+                    </c:otherwise>
+                </c:choose>
             </td>
-            <td class="center">
-                <logic:equal name="p" property="hidden" value="true">
-                    <fmt:message key="application.true" />
-                </logic:equal>
-            </td>
-
-            <td class="center">
-               <roller:link forward="editPage">
-                  <roller:linkparam id="username" name="user" property="userName" />
-                  <roller:linkparam id="pageId" name="p" property="id" />
-                  <img src='<c:url value="/images/page_edit.png"/>' border="0" alt="icon" />
-               </roller:link>
-            </td>
-
-            <td class="center">
+            
+            <td style="vertical-align:middle"><c:out value="${p.description}" /></td>
+                        
+            <td class="center" style="vertical-align:middle">
                <c:choose>
                  <c:when test="${!p.required}">
                    <roller:link forward="removePage.ok">
-                      <roller:linkparam id="username" name="user" property="userName" />
                       <roller:linkparam id="pageId" name="p" property="id" />
-                      <img src='<c:url value="/images/delete.png"/>' border="0" alt="icon" />
+                      <img src='<c:url value="/images/delete.png"/>' border="0" alt="icon" 
+                          title'<fmt:message  key="pagesForm.remove" />' />
                    </roller:link>
                  </c:when>
                  <c:otherwise>
-                    <fmt:message key="pagesForm.required"/>
+                    <img src='<c:url value="/images/lock.png"/>' border="0" alt="icon" 
+                        title='<fmt:message key="pagesForm.required"/>' />
                  </c:otherwise>
                </c:choose>
             </td>
 
         </roller:row>
-    </logic:iterate>
+    </c:forEach>
 </table>
 
 

Modified: incubator/roller/trunk/web/WEB-INF/jsps/authoring/remove-page.jsp
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/jsps/authoring/remove-page.jsp?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/jsps/authoring/remove-page.jsp (original)
+++ incubator/roller/trunk/web/WEB-INF/jsps/authoring/remove-page.jsp Mon Mar 19 19:23:13 2007
@@ -24,15 +24,15 @@
 
 <p>
 <fmt:message key="pageRemove.youSure"> 
-    <fmt:param value="${page.name}" />
+    <fmt:param value="${model.page.name}" />
 </fmt:message>
 
 </p>
 
 <p>
-<fmt:message key="pageRemove.pageId" /> = [<c:out value="${page.id}" />]
+<fmt:message key="pageRemove.pageId" /> = [<c:out value="${model.page.id}" />]
 <br />
-<fmt:message key="pageRemove.pageName" /> = [<c:out value="${page.name}" />]
+<fmt:message key="pageRemove.pageName" /> = [<c:out value="${model.page.name}" />]
 </p>
 
 <table>

Modified: incubator/roller/trunk/web/WEB-INF/jsps/tiles/footer.jsp
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/WEB-INF/jsps/tiles/footer.jsp?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/WEB-INF/jsps/tiles/footer.jsp (original)
+++ incubator/roller/trunk/web/WEB-INF/jsps/tiles/footer.jsp Mon Mar 19 19:23:13 2007
@@ -17,16 +17,16 @@
 --%>
 <%@ include file="/WEB-INF/jsps/taglibs.jsp" %>
 
-Powered by <a href="http://www.rollerweblogger.org">Apache Roller (incubating)</a> 
+Powered by <a href="http://www.rollerweblogger.org">Apache Roller</a> 
 <%= RollerFactory.getRoller().getVersion() %> |
 
 <a href="http://opensource2.atlassian.com/projects/roller/">
     <fmt:message key="footer.reportIssue" /></a> | 
 
-<a href="http://www.rollerweblogger.org/wiki/Wiki.jsp?page=UserGuide">
+<a href="http://cwiki.apache.org/confluence/display/ROLLER/Roller+User+Documentation">
     <fmt:message key="footer.userGuide" /></a> | 
 
-<a href="http://rollerweblogger.org/wiki/Wiki.jsp?page=RollerMailingLists">
+<a href="http://cwiki.apache.org/confluence/display/ROLLER/Roller+Mailing+Lists">
     <fmt:message key="footer.mailingLists" /></a>
 
 

Added: incubator/roller/trunk/web/images/launch-link.png
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/images/launch-link.png?view=auto&rev=520228
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/web/images/launch-link.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/web/images/lock.png
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/images/lock.png?view=auto&rev=520228
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/web/images/lock.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/roller/trunk/web/images/lock.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/web/images/page_white.png
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/images/page_white.png?view=auto&rev=520228
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/web/images/page_white.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/roller/trunk/web/images/page_white.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/web/images/page_white_delete.png
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/images/page_white_delete.png?view=auto&rev=520228
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/web/images/page_white_delete.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/roller/trunk/web/images/page_white_delete.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: incubator/roller/trunk/web/images/page_white_gear.png
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/images/page_white_gear.png?view=auto&rev=520228
==============================================================================
Binary file - no diff available.

Propchange: incubator/roller/trunk/web/images/page_white_gear.png
------------------------------------------------------------------------------
    svn:executable = *

Propchange: incubator/roller/trunk/web/images/page_white_gear.png
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Modified: incubator/roller/trunk/web/roller-ui/theme/tan/colors.css
URL: http://svn.apache.org/viewvc/incubator/roller/trunk/web/roller-ui/theme/tan/colors.css?view=diff&rev=520228&r1=520227&r2=520228
==============================================================================
--- incubator/roller/trunk/web/roller-ui/theme/tan/colors.css (original)
+++ incubator/roller/trunk/web/roller-ui/theme/tan/colors.css Mon Mar 19 19:23:13 2007
@@ -51,6 +51,9 @@
     color: #ad3537;
     font-weight: bold;
 }
+.fakelink {
+    color: #ad3537;
+}
 a:link {
     color: #ad3537;
 }