[seam-commits] Seam SVN: r7347 - in trunk/examples/wiki: src/etc and 27 other directories.

seam-commits at lists.jboss.org seam-commits at lists.jboss.org
Sun Feb 3 10:01:52 EST 2008


Author: christian.bauer at jboss.com
Date: 2008-02-03 10:01:48 -0500 (Sun, 03 Feb 2008)
New Revision: 7347

Added:
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.check.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.jira.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.log.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.news.gif
   trunk/examples/wiki/view/themes/sfwkorg/img/icon.updates.gif
Removed:
   trunk/examples/wiki/view/includes/languageSelector.xhtml
   trunk/examples/wiki/view/themes/default/css/languageSelector.css
Modified:
   trunk/examples/wiki/build.xml
   trunk/examples/wiki/src/etc/META-INF/components-dev.xml
   trunk/examples/wiki/src/etc/META-INF/components-prod.xml
   trunk/examples/wiki/src/etc/WEB-INF/pages.xml
   trunk/examples/wiki/src/etc/WEB-INF/web.xml
   trunk/examples/wiki/src/etc/messages_blogDirectory_en.properties
   trunk/examples/wiki/src/etc/messages_en.properties
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Pager.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiNode.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDAO.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDirectory.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntry.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntryCount.java
   trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java
   trunk/examples/wiki/src/test/log4j.xml
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayDirectories.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java
   trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/TrashTests.java
   trunk/examples/wiki/view/adminHome_d.xhtml
   trunk/examples/wiki/view/dirDisplay_d.xhtml
   trunk/examples/wiki/view/dirDisplay_m.xhtml
   trunk/examples/wiki/view/docDisplay_d.xhtml
   trunk/examples/wiki/view/docDisplay_m.xhtml
   trunk/examples/wiki/view/docHistory_d.xhtml
   trunk/examples/wiki/view/includes/commentForm.xhtml
   trunk/examples/wiki/view/includes/commentsDisplay.xhtml
   trunk/examples/wiki/view/includes/directorySelector.xhtml
   trunk/examples/wiki/view/includes/ownerSelector.xhtml
   trunk/examples/wiki/view/includes/userControl.xhtml
   trunk/examples/wiki/view/includes/userInfo.xhtml
   trunk/examples/wiki/view/plugins/blogArchive/plugin.xhtml
   trunk/examples/wiki/view/plugins/blogDirectory/plugin.xhtml
   trunk/examples/wiki/view/plugins/blogRecentEntries/plugin.xhtml
   trunk/examples/wiki/view/plugins/forumList/forumForm.xhtml
   trunk/examples/wiki/view/plugins/forumList/forumListTable.xhtml
   trunk/examples/wiki/view/plugins/forumPosting/forumPostingHeader.xhtml
   trunk/examples/wiki/view/plugins/forumReplies/plugin.xhtml
   trunk/examples/wiki/view/plugins/tags/plugin.xhtml
   trunk/examples/wiki/view/search_d.xhtml
   trunk/examples/wiki/view/tagDisplay_d.xhtml
   trunk/examples/wiki/view/themes/default/css/blogArchive.css
   trunk/examples/wiki/view/themes/default/css/blogDirectory.css
   trunk/examples/wiki/view/themes/default/css/template.css
   trunk/examples/wiki/view/themes/default/template.xhtml
   trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css
   trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css
   trunk/examples/wiki/view/themes/sfwkorg/template.xhtml
   trunk/examples/wiki/view/uploadCreate_d.xhtml
   trunk/examples/wiki/view/userHome_d.xhtml
   trunk/examples/wiki/view/userInfo_d.xhtml
Log:
JBSEAM-2569 - Delete action in dir menu, fixed blogDirectory plugin, various other bugfixes

Modified: trunk/examples/wiki/build.xml
===================================================================
--- trunk/examples/wiki/build.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/build.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -155,7 +155,6 @@
                 deprecation="${javac.deprecation}"
                      nowarn="${javac.nowarn}">
             <src path="${src.java.dir}"/>
-            <exclude name="org/jboss/seam/wiki/plugin/blogdirectory/**"/>
         </javac>
 
         <!-- Copy resources (mapping files, properties, etc.) to classes -->

Modified: trunk/examples/wiki/src/etc/META-INF/components-dev.xml
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/components-dev.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/etc/META-INF/components-dev.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -37,6 +37,7 @@
 
     <!-- Wiki is in debug mode -->
     <component name="wikiInit" class="org.jboss.seam.wiki.WikiInit" precedence="30">
+        <property name="adminContact">+41 123 123 123, admin at my.address</property>
         <property name="debug">true</property>
     </component>
 

Modified: trunk/examples/wiki/src/etc/META-INF/components-prod.xml
===================================================================
--- trunk/examples/wiki/src/etc/META-INF/components-prod.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/etc/META-INF/components-prod.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -18,5 +18,9 @@
                  http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.0.xsd
                  http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.0.xsd">
 
+    <component name="wikiInit" class="org.jboss.seam.wiki.WikiInit" precedence="30">
+        <property name="adminContact">christian.bauer at gmail.com</property>
+        <property name="debug">false</property>
+    </component>
 
 </components>
\ No newline at end of file

Modified: trunk/examples/wiki/src/etc/WEB-INF/pages.xml
===================================================================
--- trunk/examples/wiki/src/etc/WEB-INF/pages.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/etc/WEB-INF/pages.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -87,6 +87,13 @@
 
     <page view-id="/dirDisplay*">
         <param name="directoryId" value="#{directoryHome.nodeId}"/>
+        <navigation>
+            <rule if-outcome="removed">
+                <redirect view-id="/dirDisplay_#{skin}.xhtml">
+                    <param name="directoryId" value="#{directoryHome.nodeId}"/>
+                </redirect>
+            </rule>
+        </navigation>
     </page>
 
     <page view-id="/dirEdit*" no-conversation-view-id="/wiki.xhtml">
@@ -355,13 +362,14 @@
         <http-error error-code="404"/>
     </exception>
 
-    <!-- TODO: This breaks unit tests...
     <exception>
+        <end-conversation/>
         <redirect view-id="/message.xhtml">
-            <message severity="ERROR">Exception: #{org.jboss.seam.exception.message}</message>
+            <message severity="ERROR">
+                #{messages['lacewiki.msg.FatalError']} (#{wikiInit.adminContact})
+            </message>
         </redirect>
     </exception>
-    -->
 
 </pages>
 

Modified: trunk/examples/wiki/src/etc/WEB-INF/web.xml
===================================================================
--- trunk/examples/wiki/src/etc/WEB-INF/web.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/etc/WEB-INF/web.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -107,6 +107,17 @@
         <url-pattern>/servlets/feeds/*</url-pattern>
     </servlet-mapping>
 
+    <!-- In-place upgrades
+    <servlet>
+        <servlet-name>Upgrade Servlet</servlet-name>
+        <servlet-class>org.jboss.seam.wiki.core.ui.UpgradeServlet</servlet-class>
+    </servlet>
+    <servlet-mapping>
+        <servlet-name>Upgrade Servlet</servlet-name>
+        <url-pattern>/servlets/upgrade/*</url-pattern>
+    </servlet-mapping>
+    -->
+
     <!-- Misc Settings -->
 
     <!-- Session timeout: half hour (careful, large and long sessions need heap size>-->

Modified: trunk/examples/wiki/src/etc/messages_blogDirectory_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/messages_blogDirectory_en.properties	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/etc/messages_blogDirectory_en.properties	2008-02-03 15:01:48 UTC (rev 7347)
@@ -14,3 +14,5 @@
 blogDirectory.label.In=in
 blogDirectory.label.Tagged=tagged
 blogDirectory.label.NoBlogEntriesFound=No blog entries found.
+blogDirectory.label.Tag=Tag
+blogDirectory.label.Tags=Tags
\ No newline at end of file

Modified: trunk/examples/wiki/src/etc/messages_en.properties
===================================================================
--- trunk/examples/wiki/src/etc/messages_en.properties	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/etc/messages_en.properties	2008-02-03 15:01:48 UTC (rev 7347)
@@ -247,7 +247,9 @@
 lacewiki.button.dirDisplay.Refresh=Re<u>f</u>resh
 lacewiki.button.dirDisplay.Refresh.accesskey=F
 lacewiki.button.dirDisplay.View=View
+lacewiki.button.dirDisplay.ViewNewWindow=View (New Window)
 lacewiki.button.dirDisplay.Edit=Edit
+lacewiki.button.dirDisplay.Delete=Delete
 
 
 # Tag Display
@@ -641,7 +643,7 @@
 lacewiki.msg.ImportOk=Created file '{0}' in current directory.
 lacewiki.msg.OptimisticLockError=Someone modified the same record while you were editing it. Your workspace has been closed.
 lacewiki.msg.AccessDenied=Access Denied
-lacewiki.msg.FatalError=An unrecoverable error occured!
+lacewiki.msg.FatalError=An unrecoverable error occured, please check the application log or contact the administrator!
 lacewiki.msg.Trash.Emptied=All items in the trash have been permanently deleted.
 lacewiki.msg.AutomaticallyGeneratedFeed=Aggregated Feed
 

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/WikiInit.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -32,6 +32,7 @@
     @Logger
     static Log log;
 
+    private String adminContact;
     private boolean debug;
 
     @In(required = false)
@@ -55,8 +56,9 @@
         StatisticsService mBean = new StatisticsService();
         mBean.setSessionFactoryJNDIName("SessionFactories/laceWikiSF");
         ManagementFactory.getPlatformMBeanServer().registerMBean(mBean, hibernateMBeanName);
+        
+        Events.instance().raiseEvent("Wiki.started");
 
-        Events.instance().raiseEvent("Wiki.started");
         log.info("Started LaceWiki");
     }
 
@@ -68,6 +70,14 @@
         ManagementFactory.getPlatformMBeanServer().unregisterMBean(hibernateMBeanName);
     }
 
+    public String getAdminContact() {
+        return adminContact;
+    }
+
+    public void setAdminContact(String adminContact) {
+        this.adminContact = adminContact;
+    }
+
     public boolean isDebug() {
         return debug;
     }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Authenticator.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -7,7 +7,6 @@
 package org.jboss.seam.wiki.core.action;
 
 import org.jboss.seam.Component;
-import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.Factory;
 import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Logger;
@@ -40,9 +39,6 @@
     @In
     private Hash hashUtil;
 
-    @In
-    private Identity identity;
-
     @In("#{preferences.get('UserManagement')}")
     UserManagementPreferences prefs;
 
@@ -75,7 +71,7 @@
 
     public boolean authenticate() {
 
-        User user = getUserForCredentials(identity.getUsername(), identity.getPassword());
+        User user = getUserForCredentials(Identity.instance().getUsername(), Identity.instance().getPassword());
         if (user == null) return false;
 
         setRolesAndAccessLevels(user);

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Breadcrumb.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -14,7 +14,7 @@
 import java.util.List;
 
 @Name("breadcrumbFactory")
- at Scope(ScopeType.CONVERSATION)
+ at Scope(ScopeType.PAGE)
 public class Breadcrumb implements Serializable {
 
     @Logger

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/CommentHome.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -125,6 +125,31 @@
         return null; // Prevent navigation
     }
 
+    public String remove(Long commentId) {
+        setNodeId(commentId);
+        initEditor();
+        if (isManaged()) {
+
+            // Additional permission required besides NodeHome.remove()
+            if (!Identity.instance().hasPermission("Comment", "delete", getInstance().getParent()) ) {
+                throw new AuthorizationException("You don't have permission for this operation");
+            }
+
+            // Remove feed entry before removing comment
+            feedDAO.removeFeedEntry(
+                feedDAO.findFeeds(getInstance()),
+                feedDAO.findFeedEntry(getInstance())
+            );
+
+            remove();
+            getEntityManager().clear();
+            Events.instance().raiseEvent("Comment.commentListRefresh");
+        }
+
+        return null; // Prevent navigation
+    }
+
+
     @Override
     protected NodeRemover getNodeRemover() {
         return (CommentNodeRemover)Component.getInstance(CommentNodeRemover.class);
@@ -261,6 +286,8 @@
 
     public void rate(Long commentId, int rating) {
 
+        getLog().debug("rating comment with id: " + commentId + " as " + rating);
+
         // Only the owner of the document can rate comments of that document
         if ( !currentUser.getId().equals(documentHome.getInstance().getCreatedBy().getId()) ) {
             throw new AuthorizationException("You don't have permission for this operation");
@@ -268,47 +295,28 @@
 
         // Guest can't rate
         if (currentUser.isGuest()) {
-            throw new IllegalStateException("Guests can't rate comments");
+            throw new IllegalStateException("User interface bug, guests can't rate comments");
         }
 
         setId(commentId);
         if (isManaged()) {
 
-            if (getInstance().getRating() != 0)
-                return; // Already rated
-            if (getInstance().getCreatedBy().getId() == currentUser.getId())
-                return; // Can't rate my own stuff
+            if (getInstance().getRating() != 0) {
+                throw new IllegalStateException("User interface bug, can't rate comment that was already rated");
+            }
+            if (getInstance().getCreatedBy().getId().equals(currentUser.getId())) {
+                throw new IllegalStateException("User interface bug, a user can't rate his/her own comments");
+            }
 
             getInstance().setRating(rating);
         }
     }
 
-    public void cancel() {
+    public String cancel() {
         endConversation();
+        return "redirectToDocument";
     }
 
-    public void remove(Long commentId) {
-        setNodeId(commentId);
-        initEditor();
-        if (isManaged()) {
-
-            // Additional permission required besides NodeHome.remove()
-            if (!Identity.instance().hasPermission("Comment", "delete", getInstance().getParent()) ) {
-                throw new AuthorizationException("You don't have permission for this operation");
-            }
-
-            // Remove feed entry before removing comment
-            feedDAO.removeFeedEntry(
-                feedDAO.findFeeds(getInstance()),
-                feedDAO.findFeedEntry(getInstance())
-            );
-
-            remove();
-            getEntityManager().clear();
-            Events.instance().raiseEvent("Comment.commentListRefresh");
-        }
-    }
-
     @RequestParameter("showCommentForm")
     public void showCommentForm(Boolean requestParam) {
         if (requestParam != null && requestParam && !showForm) {

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/DirectoryHome.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,15 +6,13 @@
  */
 package org.jboss.seam.wiki.core.action;
 
+import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
-import org.jboss.seam.Component;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.international.Messages;
 import org.jboss.seam.annotations.*;
 import org.jboss.seam.annotations.Observer;
-import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.annotations.security.Restrict;
 import org.jboss.seam.annotations.web.RequestParameter;
-import org.jboss.seam.annotations.security.Restrict;
+import org.jboss.seam.international.Messages;
 import org.jboss.seam.security.Identity;
 import org.jboss.seam.wiki.core.feeds.FeedDAO;
 import org.jboss.seam.wiki.core.model.*;
@@ -23,9 +21,14 @@
 import javax.faces.application.FacesMessage;
 import static javax.faces.application.FacesMessage.SEVERITY_INFO;
 import static javax.faces.application.FacesMessage.SEVERITY_WARN;
-import static javax.faces.application.FacesMessage.SEVERITY_ERROR;
 import java.util.*;
 
+/**
+ * TODO: This class is turning into a maintenance nightmare, split
+ * directory browser and editor functionality.
+ *
+ * @author Christian Bauer
+ */
 @Name("directoryHome")
 @Scope(ScopeType.CONVERSATION)
 public class DirectoryHome extends NodeHome<WikiDirectory, WikiDirectory> {
@@ -40,13 +43,13 @@
     protected Clipboard clipboard;
 
     @In
+    @Out(scope = ScopeType.CONVERSATION) // Helps us use this home with page and conversation contexts
     protected Pager pager;
 
     /* -------------------------- Internal State ------------------------------ */
 
     private boolean hasFeed;
 
-    @DataModel(value = "childNodesList", scope = ScopeType.PAGE)
     private List<WikiNode> childNodes;
 
     private Map<WikiNode, Boolean> selectedNodes = new HashMap<WikiNode,Boolean>();
@@ -78,12 +81,8 @@
     public WikiDirectory afterNodeFound(WikiDirectory dir) {
         super.afterNodeFound(dir);
 
-        // Hm, not pretty but we can't have a @Factory here or Seam
-        // complains that subclass has duplicate factory
-        if (!Contexts.getPageContext().isSet("childNodesList")) {
-            getLog().debug("refreshing child nodes after node found");
-            refreshChildNodes(dir);
-        }
+        getLog().debug("refreshing child nodes after node found");
+        refreshChildNodes(dir);
 
         return dir;
     }
@@ -272,11 +271,13 @@
 
     /* -------------------------- Public Features ------------------------------ */
 
-    @Observer(value = "PersistenceContext.filterReset", create = false)
+    @Observer(value = {"PersistenceContext.filterReset", "Node.refreshList"}, create = false)
     public void refreshChildNodes() {
         if (isManaged()) {
             getLog().debug("refreshing child nodes of the current instance");
             refreshChildNodes(getInstance());
+        } else {
+            getLog().debug("not refreshing child nodes, instance is not managed: " + getInstance());
         }
     }
 
@@ -527,4 +528,26 @@
         refreshChildNodes();
     }
 
+    public boolean isRemovable(WikiNode node) {
+
+        // Check if the current directory is the trash area, delete doesn't make sense here
+        WikiDirectory trashArea = (WikiDirectory)Component.getInstance("trashArea");
+        if (trashArea.getId().equals(getInstance().getId()))
+            return false;
+
+        // Check permissions TODO: This duplicates the check
+        if (!Identity.instance().hasPermission("Node", "edit", node))
+            return false;
+
+        NodeRemover remover;
+        if (node.isInstance(WikiDocument.class)) {
+            remover = (NodeRemover) Component.getInstance(DocumentNodeRemover.class);
+        } else if (node.isInstance(WikiUpload.class)) {
+            remover = (NodeRemover) Component.getInstance(UploadNodeRemover.class);
+        } else {
+            return false;
+        }
+        return remover.isRemovable(node);
+    }
+
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Menu.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -45,7 +45,7 @@
         return root;
     }
 
-    @Observer(value = { "Nodes.menuStructureModified", "PersistenceContext.filterReset" }, create = false)
+    @Observer(value = { "Node.updated", "Node.removed", "PersistenceContext.filterReset" }, create = false)
     public void refreshRoot() {
         log.debug("Loading menu items tree");
         root = wikiNodeDAO.findMenuItemTree(

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/NodeHome.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -259,17 +259,15 @@
         String outcome = super.update();
         if (outcome != null) {
             Events.instance().raiseEvent("PreferenceEditor.flushAll");
-            Events.instance().raiseEvent("Nodes.menuStructureModified");
+            Events.instance().raiseEvent("Node.updated");
         }
         return outcome;
     }
 
     public boolean isRemovable() {
-        if (!isManaged()) return false;
-        if (getNodeRemover() != null) {
-            return getNodeRemover().isRemovable(getInstance());
-        }
-        return true;
+        return isManaged() &&
+                getNodeRemover() != null &&
+                getNodeRemover().isRemovable(getInstance());
     }
 
     @Override
@@ -282,11 +280,22 @@
         getNodeRemover().removeDependencies(getInstance());
         String outcome = super.remove();
         if (outcome != null) {
-            Events.instance().raiseEvent("Nodes.menuStructureModified");
+            Events.instance().raiseEvent("Node.removed");
         }
         return outcome;
     }
 
+    public String remove(Long nodeId) {
+        getLog().debug("requested node remove with id: " + nodeId);
+        setNodeId(nodeId);
+        initEditor();
+        String outcome = remove();
+        if (outcome != null) {
+            Events.instance().raiseEvent("Node.refreshList");
+        }
+        return outcome;
+    }
+
     public String trash() {
         if (!isRemovable()) return null;
 
@@ -298,6 +307,7 @@
         getEntityManager().flush();
         trashedMessage();
 
+        Events.instance().raiseEvent("Node.removed");
         return "removed";
     }
 
@@ -347,19 +357,19 @@
     }
 
     protected void checkPersistPermissions() {
-        getLog().trace("checking persist permissions");
+        getLog().debug("checking persist permissions");
         if (!isPersistAllowed(getInstance(), getParentNode()))
             throw new AuthorizationException("You don't have permission for this operation");
     }
 
     protected void checkUpdatePermissions() {
-        getLog().trace("checking update permissions");
+        getLog().debug("checking update permissions");
         if (!isUpdateAllowed(getInstance(), getParentNode()))
             throw new AuthorizationException("You don't have permission for this operation");
     }
 
     protected void checkRemovePermissions() {
-        getLog().trace("checking remove permissions");
+        getLog().debug("checking remove permissions");
         if (!isRemoveAllowed(getInstance(), getParentNode()))
             throw new AuthorizationException("You don't have permission for this operation");
     }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Pager.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Pager.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/action/Pager.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -89,4 +89,15 @@
         return numOfRecords != null && page > 0;
     }
 
+    public int getQueryFirstResult() {
+        return new Long(getPage() * getPageSize()).intValue();
+    }
+
+    public int getQueryMaxResults() {
+        return new Long(getPageSize()).intValue();
+    }
+
+    public String toString() {
+        return "Pager - Records: " + getNumOfRecords() + " Page size: " + getPageSize();
+    }
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/dao/WikiNodeFactory.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -8,9 +8,8 @@
 
 import org.jboss.seam.Component;
 import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Factory;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.Name;
+import org.jboss.seam.log.Log;
+import org.jboss.seam.annotations.*;
 import org.jboss.seam.faces.FacesMessages;
 import org.jboss.seam.wiki.core.action.prefs.WikiPreferences;
 import org.jboss.seam.wiki.core.model.LinkProtocol;
@@ -31,16 +30,37 @@
 @Name("wikiNodeFactory")
 public class WikiNodeFactory implements Serializable {
 
-    @In
-    protected EntityManager entityManager;
+    @Logger
+    Log log;
 
-    @In
-    protected EntityManager restrictedEntityManager;
+    @Observer("Wiki.started")
+    public void checkPreferences() {
+        
+        log.info("checking wiki preferences...");
+/* TODO: needs to be disabled in testing
+        // We need a fake user so we can retrieve preferences without a request, on startup
+        Contexts.getEventContext().set("currentPreferencesUser", new User());
 
+        Long rootId = loadWikiRoot().getId();
+        Long memberId = loadMemberArea().getId();
+        Long helpId = loadHelpArea().getId();
+        Long trashId = loadTrashArea().getId();
+
+        assert !rootId.equals(memberId);
+        assert !rootId.equals(helpId);
+        assert !rootId.equals(trashId);
+        assert !memberId.equals(helpId);
+        assert !memberId.equals(trashId);
+        assert !helpId.equals(trashId);
+        */
+    }
+
     @Factory(value = "wikiRoot", scope = ScopeType.PAGE, autoCreate = true)
     public WikiDirectory loadWikiRoot() {
+        log.debug("loading wiki root");
+        EntityManager em = (EntityManager)Component.getInstance("entityManager");
         try {
-            return (WikiDirectory) entityManager
+            return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.parent is null")
                     .setHint("org.hibernate.comment", "Loading wikiRoot")
                     .setHint("org.hibernate.cacheable", true)
@@ -50,10 +70,12 @@
         }
     }
 
-    @Factory(value = "wikiStart", scope = ScopeType.PAGE, autoCreate = true)
+    @Factory(value = "wikiStart", scope = ScopeType.CONVERSATION, autoCreate = true)
     public WikiDocument loadWikiStart() {
+        log.debug("loading wiki start into current conversation");
+        EntityManager em = (EntityManager)Component.getInstance("restrictedEntityManager");
         try {
-            return (WikiDocument) restrictedEntityManager
+            return (WikiDocument) em
                     .createQuery("select d from WikiDocument d where d.id = :id")
                     .setParameter("id", Preferences.getInstance(WikiPreferences.class).getDefaultDocumentId())
                     .setHint("org.hibernate.comment", "Loading wikiStart")
@@ -71,10 +93,11 @@
     // Loads the same instance into a different persistence context
     @Factory(value = "restrictedWikiRoot", scope = ScopeType.PAGE, autoCreate = true)
     public WikiDirectory loadWikiRootRestricted() {
+        log.debug("loading wiki root into restricted PC");
+        EntityManager em = (EntityManager)Component.getInstance("restrictedEntityManager");
         WikiDirectory wikiroot = (WikiDirectory) Component.getInstance("wikiRoot");
-
         try {
-            return (WikiDirectory) restrictedEntityManager
+            return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.id = :id")
                     .setParameter("id", wikiroot.getId())
                     .setHint("org.hibernate.comment", "Loading wikiRootRestricted")
@@ -87,9 +110,11 @@
 
     @Factory(value = "memberArea", scope = ScopeType.PAGE, autoCreate = true)
     public WikiDirectory loadMemberArea() {
+        log.debug("loading member area");
+        EntityManager em = (EntityManager)Component.getInstance("entityManager");
         String memberAreaName = Preferences.getInstance(WikiPreferences.class).getMemberArea();
         try {
-            return (WikiDirectory) entityManager
+            return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.wikiname = :name and d.parent.parent is null")
                     .setParameter("name", WikiUtil.convertToWikiName(memberAreaName) )
                     .setHint("org.hibernate.comment", "Loading memberArea")
@@ -108,9 +133,11 @@
 
     @Factory(value = "trashArea", scope = ScopeType.PAGE, autoCreate = true)
     public WikiDirectory loadTrashArea() {
+        log.debug("loading trash area");
+        EntityManager em = (EntityManager)Component.getInstance("entityManager");
         String trashAreaName = Preferences.getInstance(WikiPreferences.class).getTrashArea();
         try {
-            return (WikiDirectory) entityManager
+            return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.wikiname = :name and d.parent.parent is null")
                     .setParameter("name", WikiUtil.convertToWikiName(trashAreaName) )
                     .setHint("org.hibernate.comment", "Loading trashArea")
@@ -129,9 +156,11 @@
 
     @Factory(value = "helpArea", scope = ScopeType.PAGE, autoCreate = true)
     public WikiDirectory loadHelpArea() {
+        log.debug("loading help area");
+        EntityManager em = (EntityManager)Component.getInstance("entityManager");
         String helpAreaName = Preferences.getInstance(WikiPreferences.class).getHelpArea();
         try {
-            return (WikiDirectory) entityManager
+            return (WikiDirectory) em
                     .createQuery("select d from WikiDirectory d left join fetch d.feed where d.wikiname = :name and d.parent.parent is null")
                     .setParameter("name", WikiUtil.convertToWikiName(helpAreaName) )
                     .setHint("org.hibernate.comment", "Loading trashArea")
@@ -150,9 +179,11 @@
 
     @Factory(value = "linkProtocolMap", scope = ScopeType.CONVERSATION, autoCreate = true)
     public Map<String, LinkProtocol> loadLinkProtocols() {
+        log.debug("loading link protocol map");
+        EntityManager em = (EntityManager)Component.getInstance("entityManager");
         Map<String, LinkProtocol> linkProtocols = new TreeMap<String, LinkProtocol>();
         //noinspection unchecked
-        List<Object[]> result = entityManager
+        List<Object[]> result = em
                 .createQuery("select lp.prefix, lp from LinkProtocol lp order by lp.prefix asc")
                 .setHint("org.hibernate.comment", "Loading link protocols")
                 .setHint("org.hibernate.cacheable", true)

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiNode.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiNode.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/model/WikiNode.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -27,7 +27,7 @@
 public abstract class WikiNode<N extends WikiNode> implements Comparable {
 
     public static enum SortableProperty {
-        name, createdOn, lastModifiedOn, rating;
+        name, createdOn, lastModifiedOn, rating
     }
 
     @Id

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/core/preferences/WikiPreferenceProvider.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -189,6 +189,7 @@
     }
 
     private Set<PreferenceValue> loadUserValues(String entityName, User user) {
+        if (user.getId() == null) return Collections.EMPTY_SET;
         List<WikiPreferenceValue> values =
             entityManager.createQuery(
                             "select wp from WikiPreferenceValue wp" +

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDAO.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDAO.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDAO.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,170 +1,214 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
 package org.jboss.seam.wiki.plugin.blogdirectory;
 
+import org.hibernate.Hibernate;
+import org.hibernate.Query;
+import org.hibernate.SQLQuery;
+import org.hibernate.Session;
+import org.hibernate.transform.ResultTransformer;
+import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.annotations.In;
 import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.In;
-import org.jboss.seam.annotations.AutoCreate;
+import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
-import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.wiki.core.model.WikiNode;
-import org.hibernate.Query;
-import org.hibernate.Session;
-import org.hibernate.transform.Transformers;
-import org.hibernate.transform.AliasToBeanResultTransformer;
+import org.jboss.seam.wiki.core.action.Pager;
 
 import javax.persistence.EntityManager;
 import java.util.List;
-import java.util.ArrayList;
 
+/**
+ * @author Christian Bauer
+ */
 @Name("blogDAO")
 @AutoCreate
 public class BlogDAO {
 
     @In
-    protected EntityManager restrictedEntityManager;
+    EntityManager restrictedEntityManager;
 
+    @In
+    Integer currentAccessLevel;
+
+    // Too bad, but we really need a SQL query here... better use SQL queries for ALL queries in this DAO and generalize things
+    private String[] getWikiDocumentSQLColumnNames() {
+        return new String[]{
+            "doc2.NODE_ID",
+            "doc2.OBJ_VERSION", "doc2.PARENT_NODE_ID", "doc2.RATING",
+            "doc2.AREA_NR", "doc2.NAME", "doc2.WIKINAME", "doc2.CREATED_BY_USER_ID", "doc2.CREATED_ON", "doc2.WRITE_PROTECTED",
+            "doc2.LAST_MODIFIED_BY_USER_ID", "doc2.LAST_MODIFIED_ON", "doc2.READ_ACCESS_LEVEL", "doc2.WRITE_ACCESS_LEVEL",
+            "doc1.FILE_REVISION",
+            "doc.NAME_AS_TITLE", "doc.ENABLE_COMMENTS", "doc.ENABLE_COMMENT_FORM", "doc.ENABLE_COMMENTS_ON_FEEDS",
+            "doc.HEADER", "doc.HEADER_MACROS", "doc.CONTENT", "doc.CONTENT_MACROS", "doc.FOOTER", "doc.FOOTER_MACROS"
+        };
+    }
+
+    private String getblogEntryFromClause(String tag) {
+        StringBuilder clause = new StringBuilder();
+        clause.append("from WIKI_DOCUMENT doc").append(" ");
+        clause.append("inner join WIKI_FILE doc1 on doc.NODE_ID=doc1.NODE_ID").append(" ");
+        clause.append("inner join WIKI_NODE doc2 on doc.NODE_ID=doc2.NODE_ID").append(" ");
+        if (tag != null && tag.length() > 0) clause.append("inner join WIKI_TAG t on t.FILE_ID = doc1.NODE_ID").append(" ");
+        return clause.toString();
+    }
+
+    private String getBlogEntryWhereClause(WikiDocument ignoreDoc, Integer year, Integer month, Integer day, String tag) {
+        StringBuilder clause = new StringBuilder();
+        clause.append("where doc2.PARENT_NODE_ID in").append(" (");
+        clause.append("select distinct dir1.NODE_ID from WIKI_DIRECTORY dir1, WIKI_DIRECTORY dir2").append(" ");
+        clause.append("where dir1.NS_THREAD = dir2.NS_THREAD").append(" ");
+        clause.append("and dir1.NS_LEFT between dir2.NS_LEFT and dir2.NS_RIGHT").append(" ");
+        clause.append("and dir2.NS_THREAD=:nsThread and dir2.NS_LEFT>=:nsLeft and dir2.NS_RIGHT<=:nsRight");
+        clause.append(") ");
+        clause.append("and doc.HEADER_MACROS like '%blogEntry%'").append(" ");
+        clause.append("and doc2.READ_ACCESS_LEVEL <= :currentAccessLevel").append(" ");
+        if (ignoreDoc != null && ignoreDoc.getId() != null) clause.append("and doc.NODE_ID<>:ignoreDoc").append(" ");
+        if (tag != null && tag.length()>0)                  clause.append("and t.TAG = :tag").append(" ");
+        if (year != null)   clause.append("and year(doc2.CREATED_ON) = :limitYear").append(" ");
+        if (month != null)  clause.append("and month(doc2.CREATED_ON) = :limitMonth").append(" ");
+        if (day != null)    clause.append("and day(doc2.CREATED_ON) = :limitDay").append(" ");
+        return clause.toString();
+    }
+
+    private void bindBlogEntryWhereClause(Query query, WikiDirectory startDir, WikiDocument ignoreDoc,
+                                          Integer year, Integer month, Integer day, String tag) {
+        query.setParameter("nsThread", startDir.getNodeInfo().getNsThread());
+        query.setParameter("nsLeft", startDir.getNodeInfo().getNsLeft());
+        query.setParameter("nsRight", startDir.getNodeInfo().getNsRight());
+        query.setParameter("currentAccessLevel", currentAccessLevel);
+
+        if (ignoreDoc != null && ignoreDoc.getId() != null) query.setParameter("ignoreDoc", ignoreDoc);
+        if (tag != null && tag.length()>0)                  query.setParameter("tag", tag);
+        if (year != null)   query.setParameter("limitYear", year);
+        if (month != null)  query.setParameter("limitMonth", month);
+        if (day != null)    query.setParameter("limitDay", day);
+    }
+
     public List<BlogEntry> findBlogEntriesWithCommentCount(WikiDirectory startDir,
                                                            WikiDocument ignoreDoc,
-                                                           String orderByProperty,
-                                                           boolean orderDescending,
-                                                           long firstResult,
-                                                           long maxResults,
+                                                           Pager pager,
                                                            Integer year,
                                                            Integer month,
                                                            Integer day,
-                                                           final String tag) {
+                                                           String tag) {
 
         StringBuilder queryString = new StringBuilder();
 
-        queryString.append("select d as entryDocument").append(", ");
-        queryString.append("(select count(c) from WikiComment c where c.file  = d) as commentCount").append(" ");
+        queryString.append("select").append(" ");
+        for (int i = 0; i < getWikiDocumentSQLColumnNames().length; i++) {
+            queryString.append(getWikiDocumentSQLColumnNames()[i]);
+            if (i != getWikiDocumentSQLColumnNames().length-1) queryString.append(", ");
+        }
+        queryString.append(", count(c3.NODE_ID) as COMMENT_COUNT").append(" ");
+        queryString.append(getblogEntryFromClause(tag));
+        queryString.append("left outer join WIKI_NODE c1 on doc.NODE_ID = c1.PARENT_NODE_ID").append(" ");
+        queryString.append("left outer join WIKI_COMMENT c2 on c1.NODE_ID = c2.NODE_ID").append(" ");
+        queryString.append("left outer join WIKI_COMMENT c3 on c2.NS_THREAD = c3.NS_THREAD").append(" ");
+        queryString.append(getBlogEntryWhereClause(ignoreDoc, year, month, day, tag));
 
-        queryString.append("from WikiDocument d fetch all properties where d.parent.id in").append(" ");
-        queryString.append("(");
-        queryString.append("select d1.id from ").append(startDir.getTreeSuperclassEntityName()).append(" d1, ");
-        queryString.append(startDir.getTreeSuperclassEntityName()).append(" d2 ");
-        queryString.append("where d1.nsThread = :thread and d2.nsThread = :thread").append(" ");
-        queryString.append("and d1.nsLeft between d2.nsLeft and d2.nsRight").append(" ");
-        queryString.append("and d2.nsLeft >= :startLeft and d2.nsRight <= :startRight").append(" ");
-        queryString.append(")");
+        queryString.append("group by").append(" ");
+        for (int i = 0; i < getWikiDocumentSQLColumnNames().length; i++) {
+            queryString.append(getWikiDocumentSQLColumnNames()[i]);
+            if (i != getWikiDocumentSQLColumnNames().length-1) queryString.append(", ");
+        }
+        queryString.append(" ");
+        queryString.append("order by doc2.CREATED_ON desc");
 
-        if (ignoreDoc != null && ignoreDoc.getId() != null)
-            queryString.append("and not d = :ignoreDoc").append(" ");
+        SQLQuery query = getSession().createSQLQuery(queryString.toString());
 
-        queryString.append("and not d.macros like '%blogDirectory%'").append(" ");
-        queryString.append("and not d.macros like '%feedTeasers%'").append(" ");
+        bindBlogEntryWhereClause(query, startDir, ignoreDoc, year, month, day, tag);
 
-        if (year != null) queryString.append("and year(d.createdOn) = :limitYear").append(" ");
-        if (month != null) queryString.append("and month(d.createdOn) = :limitMonth").append(" ");
-        if (day != null) queryString.append("and day(d.createdOn) = :limitDay").append(" ");
-        if (tag != null && tag.length()>0) queryString.append("and d.tags like :tag").append(" ");
+        query.setComment("Finding all blogEntry documents recursively in dir: " + startDir.getName());
+        query.addEntity(WikiDocument.class);
+        query.addScalar("COMMENT_COUNT", Hibernate.LONG);
+        query.setFirstResult( pager.getQueryFirstResult() );
+        query.setMaxResults( pager.getQueryMaxResults() );
 
-        queryString.append("order by d.").append(orderByProperty).append(" ");
-        queryString.append( orderDescending ? "desc" : "asc").append("");
-
-        Query nestedSetQuery = getSession().createQuery(queryString.toString());
-        nestedSetQuery.setParameter("thread", startDir.getNsThread());
-        nestedSetQuery.setParameter("startLeft", startDir.getNsLeft());
-        nestedSetQuery.setParameter("startRight", startDir.getNsRight());
-        if (ignoreDoc != null && ignoreDoc.getId() != null)
-            nestedSetQuery.setParameter("ignoreDoc", ignoreDoc);
-
-        if (year != null) nestedSetQuery.setParameter("limitYear", year);
-        if (month != null) nestedSetQuery.setParameter("limitMonth", month);
-        if (day != null) nestedSetQuery.setParameter("limitDay", day);
-        if (tag != null && tag.length()>0) nestedSetQuery.setParameter("tag", "%" + tag + "%");
-
-        nestedSetQuery.setFirstResult( new Long(firstResult).intValue() );
-        nestedSetQuery.setMaxResults( new Long(maxResults).intValue() );
-        nestedSetQuery.setResultTransformer(
-            new AliasToBeanResultTransformer(BlogEntry.class) {
+        query.setResultTransformer(
+            new ResultTransformer() {
                 public Object transformTuple(Object[] result, String[] aliases) {
-                    WikiDocument doc = (WikiDocument)result[0];
-                    if (tag == null || doc.isTagged(tag)) {
-                        return super.transformTuple(result, aliases);
-                    }
-                    return null;
+                    BlogEntry be = new BlogEntry();
+                    be.setEntryDocument( (WikiDocument)result[0]);
+                    be.setCommentCount( (Long)result[1] );
+                    return be;
                 }
-                public List transformList(List list) {
-                    List listWithoutNulls = new ArrayList();
-                    for (Object o : super.transformList(list)) if (o != null) listWithoutNulls.add(o);
-                    return listWithoutNulls;
-                }
+                public List transformList(List list) { return list; }
             }
         );
 
-        return (List<BlogEntry>)nestedSetQuery.list();
+        return (List<BlogEntry>)query.list();
+
     }
 
-    public Long countBlogEntries(WikiNode startNode, WikiNode ignoreNode, Integer year, Integer month, Integer day, String tag) {
-        return countBlogEntries(startNode, ignoreNode, false, false, false, year, month, day, tag).get(0).getNumOfEntries();
+    public Long countBlogEntries(WikiDirectory startDir, WikiDocument ignoreDoc, Integer year, Integer month, Integer day, String tag) {
+        return countBlogEntries(startDir, ignoreDoc, false, false, false, year, month, day, tag).get(0).getNumOfEntries();
     }
 
-    public List<BlogEntryCount> countAllBlogEntriesGroupByYearMonth(WikiNode startNode, WikiNode ignoreNode, String tag) {
-        return countBlogEntries(startNode, ignoreNode, true, true, false, null, null, null, tag);
+    public List<BlogEntryCount> countAllBlogEntriesGroupByYearMonth(WikiDirectory startDir, WikiDocument ignoreDoc, String tag) {
+        return countBlogEntries(startDir, ignoreDoc, true, true, false, null, null, null, tag);
     }
 
-    private List<BlogEntryCount> countBlogEntries(WikiNode startNode, WikiNode ignoreNode,
-                                                 boolean projectYear, boolean projectMonth, boolean projectDay,
+    private List<BlogEntryCount> countBlogEntries(WikiDirectory startDir, WikiDocument ignoreDoc,
+                                                 final boolean projectYear, final boolean projectMonth, final boolean projectDay,
                                                  Integer limitYear, Integer limitMonth, Integer limitDay,
                                                  String tag) {
 
+        // Sanity input check
+        if (projectDay && (!projectMonth || !projectYear))
+            throw new IllegalArgumentException("Can't project on day without months or year");
+        if (projectMonth && !projectYear)
+            throw new IllegalArgumentException("Can't project on month without year");
+
         StringBuilder queryString = new StringBuilder();
 
-        queryString.append("select count(n1.id) as numOfEntries");
-
-        if (projectYear) queryString.append(", ").append("year(n1.createdOn) as year");
-        if (projectMonth) queryString.append(", ").append("month(n1.createdOn) as month");
-        if (projectDay) queryString.append(", ").append("day(n1.createdOn) as day");
-
+        queryString.append("select count(doc.NODE_ID) as NUM_OF_ENTRIES").append(" ");
+        if (projectYear) queryString.append(", ").append("year(doc2.CREATED_ON) as YEAR");
+        if (projectMonth) queryString.append(", ").append("month(doc2.CREATED_ON) as MONTH");
+        if (projectDay) queryString.append(", ").append("day(doc2.CREATED_ON) as DAY");
         queryString.append(" ");
-        /*
-        queryString.append("from ").append(startNode.getTreeSuperclassEntityName()).append(" n1, ");
-        queryString.append(startNode.getTreeSuperclassEntityName()).append(" n2 ");
-        */
-        queryString.append("where n1.nsThread = :thread and n2.nsThread = :thread").append(" ");
-        queryString.append("and n1.nsLeft between n2.nsLeft and n2.nsRight").append(" ");
-        queryString.append("and n2.nsLeft > :startLeft and n2.nsRight < :startRight").append(" ");
-        queryString.append("and n2.class = :clazz").append(" ");
-        queryString.append("and not n1.macros like '%blogDirectory%'").append(" ");
 
-        if (ignoreNode.getId() != null)
-            queryString.append("and not n1 = :ignoreNode").append(" ");
+        queryString.append(getblogEntryFromClause(tag));
+        queryString.append(getBlogEntryWhereClause(ignoreDoc, limitYear, limitMonth, limitDay, tag));
 
-        if (limitYear != null) queryString.append("and year(n1.createdOn) = :limitYear").append(" ");
-        if (limitMonth!= null) queryString.append("and month(n1.createdOn) = :limitMonth").append(" ");
-        if (limitDay != null) queryString.append("and day(n1.createdOn) = :limitDay").append(" ");
+        if (projectYear || projectMonth || projectDay) queryString.append("group by").append(" ");
+        if (projectYear)    queryString.append("year(doc2.CREATED_ON)");
+        if (projectMonth)   queryString.append(", month(doc2.CREATED_ON)");
+        if (projectDay)     queryString.append(", day(doc2.CREATED_ON)");
 
-        if (tag != null && tag.length()>0) queryString.append("and n1.tags like :tag").append(" ");
+        if (projectYear || projectMonth || projectDay) queryString.append("order by").append(" ");
+        if (projectYear)    queryString.append("YEAR desc");
+        if (projectMonth)   queryString.append(", MONTH desc");
+        if (projectDay)     queryString.append(", DAY desc");
 
-        if (projectYear || projectMonth || projectDay)  queryString.append("group by").append(" ");
-        if (projectYear)    queryString.append("year(n1.createdOn)");
-        if (projectMonth)   queryString.append(", month(n1.createdOn)");
-        if (projectDay)     queryString.append(", day(n1.createdOn)");
-        queryString.append(" ");
+        SQLQuery query = getSession().createSQLQuery(queryString.toString());
 
-        if (projectYear || projectMonth || projectDay) queryString.append("order by").append(" ");
-        if (projectYear)    queryString.append("year(n1.createdOn) desc");
-        if (projectMonth)   queryString.append(", month(n1.createdOn) desc");
-        if (projectDay)     queryString.append(", day(n1.createdOn) desc");
-        queryString.append(" ");
+        bindBlogEntryWhereClause(query, startDir, ignoreDoc, limitYear, limitMonth, limitDay, tag);
 
-        Query nestedSetQuery = getSession().createQuery(queryString.toString());
-        /*
-        nestedSetQuery.setParameter("thread", startNode.getNsThread());
-        nestedSetQuery.setParameter("startLeft", startNode.getNsLeft());
-        nestedSetQuery.setParameter("startRight", startNode.getNsRight());
-        */
-        nestedSetQuery.setParameter("clazz", "DOCUMENT"); // TODO: Hibernate can't bind the discriminator? Not even with Hibernate.CLASS type...
-        if (ignoreNode.getId() != null)
-            nestedSetQuery.setParameter("ignoreNode", ignoreNode);
-        if (limitYear != null) nestedSetQuery.setParameter("limitYear", limitYear);
-        if (limitMonth!= null) nestedSetQuery.setParameter("limitMonth", limitMonth);
-        if (limitDay != null) nestedSetQuery.setParameter("limitDay", limitDay);
-        if (tag != null && tag.length()>0) nestedSetQuery.setParameter("tag", "%" + tag + "%");
+        query.setComment("Finding blogEntry counts");
+        query.addScalar("NUM_OF_ENTRIES", Hibernate.LONG);
+        if (projectYear)    query.addScalar("YEAR", Hibernate.INTEGER);
+        if (projectMonth)   query.addScalar("MONTH", Hibernate.INTEGER);
+        if (projectDay)     query.addScalar("DAY", Hibernate.INTEGER);
 
-        nestedSetQuery.setResultTransformer(Transformers.aliasToBean(BlogEntryCount.class));
+        query.setResultTransformer(
+            new ResultTransformer() {
+                public Object transformTuple(Object[] result, String[] aliases) {
+                    BlogEntryCount beCount = new BlogEntryCount();
+                    beCount.setNumOfEntries( (Long)result[0] );
+                    if (projectYear)    beCount.setYear( (Integer)result[1] );
+                    if (projectMonth)   beCount.setMonth( (Integer)result[2] );
+                    if (projectDay)     beCount.setDay( (Integer)result[3] );
+                    return beCount;
+                }
+                public List transformList(List list) { return list; }
+            }
+        );
 
-        return nestedSetQuery.list();
+        return (List<BlogEntryCount>) query.list();
     }
 
     private Session getSession() {

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDirectory.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDirectory.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogDirectory.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -9,19 +9,22 @@
 import org.jboss.seam.ScopeType;
 import org.jboss.seam.annotations.*;
 import org.jboss.seam.annotations.Observer;
-import org.jboss.seam.annotations.web.RequestParameter;
 import org.jboss.seam.annotations.datamodel.DataModel;
+import org.jboss.seam.annotations.web.RequestParameter;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.model.WikiDirectory;
 import org.jboss.seam.wiki.core.model.WikiDocument;
+import org.jboss.seam.wiki.core.action.Pager;
 import org.jboss.seam.wiki.util.WikiUtil;
-import org.jboss.seam.wiki.preferences.Preferences;
 
 import java.io.Serializable;
 import java.util.*;
 
+/**
+ * @author Christian Bauer
+ */
 @Name("blogDirectory")
- at Scope(ScopeType.PAGE)
+ at Scope(ScopeType.CONVERSATION)
 public class BlogDirectory implements Serializable {
 
     @In
@@ -36,7 +39,11 @@
     @In
     WikiDocument currentDocument;
 
-    private Integer page = 0;
+    @In("#{preferences.get('Blog', currentMacro)}")
+    BlogPreferences prefs;
+
+    private Pager pager;
+
     private Integer year;
     private Integer month;
     private Integer day;
@@ -44,10 +51,14 @@
 
     @RequestParameter
     public void setPage(Integer page) {
-        if (page != null) {
-            this.page = page;
-        }
+        if (pager == null) pager = new Pager(prefs.getPageSize());
+        pager.setPage(page);
     }
+
+    public Pager getPager() {
+        return pager;
+    }
+
     @RequestParameter
     public void setYear(Integer year) {
         this.year = year;
@@ -65,67 +76,44 @@
         this.tag = tag;
     }
 
-    private long numOfBlogEntries;
-    private long totalNumOfBlogEntries;
     private List<BlogEntry> blogEntries;
     private List<BlogEntryCount> blogEntryCountsByYearAndMonth;
     // Need to expose this as a datamodel so Seam can convert our map to a collection of Map.Entry objects
     @DataModel
     private Map<Date, List<BlogEntry>> recentBlogEntries;
 
-    private long pageSize;
-    private long recentBlogEntriesCount;
-
-    @Create
-    public void initialize() {
-        initializePreferences();
-        refreshBlogEntries();
-    }
-
-    // Lazier than @In, would be too many injections because of c:forEach iteration on blog entry list
-    private void initializePreferences() {
-        // TODO: Uhm, we have several macros that use this backend bean... that doesn't work
-        pageSize = Preferences.getInstance(BlogPreferences.class, "currentMacro").getPageSize();
-        recentBlogEntriesCount = Preferences.getInstance(BlogPreferences.class, "currentMacro").getRecentEntriesItems();
-    }
-
-    private void queryNumOfBlogEntries() {
-        numOfBlogEntries = blogDAO.countBlogEntries(currentDirectory, currentDocument, year, month, day, tag);
-    }
-
-    private void queryBlogEntries() {
+    @Observer(value = {"PersistenceContext.filterReset"}, create = false)
+    public void loadBlogEntries() {
+        pager.setPageSize(prefs.getPageSize());
+        pager.setNumOfRecords(blogDAO.countBlogEntries(currentDirectory, currentDocument, year, month, day, tag));
+        if (pager.getNumOfRecords() == 0) {
+            blogEntries = Collections.EMPTY_LIST;
+            return;
+        }
         blogEntries =
             blogDAO.findBlogEntriesWithCommentCount(
                     currentDirectory,
                     currentDocument,
-                    "createdOn",
-                    true,
-                    page * pageSize,
-                    pageSize,
+                    pager,
                     year, month, day,
                     tag
             );
     }
 
-    private void queryBlogEntryCountsByYearAndMonth() {
+
+    @Observer(value = {"Macro.render.blogArchive", "PersistenceContext.filterReset"}, create = false)
+    public void loadBlogEntryCountsByYearAndMonth() {
         blogEntryCountsByYearAndMonth = blogDAO.countAllBlogEntriesGroupByYearMonth(currentDirectory, currentDocument, tag);
-        for (BlogEntryCount blogEntryCount : blogEntryCountsByYearAndMonth) {
-            totalNumOfBlogEntries = totalNumOfBlogEntries + blogEntryCount.getNumOfEntries();
-        }
     }
 
     @Factory(value = "recentBlogEntries")
-    @Observer("PreferenceComponent.refresh.blogRecentEntriesPreferences")
-    public void queryRecentBlogEntries() {
-        initializePreferences();
+    @Observer(value = {"Macro.render.blogRecentEntries", "PersistenceContext.filterReset"}, create = false)
+    public void loadRecentBlogEntries() {
         List<BlogEntry> recentBlogEntriesNonAggregated =
             blogDAO.findBlogEntriesWithCommentCount(
                     currentDirectory,
                     currentDocument,
-                    "createdOn",
-                    true,
-                    0,
-                    recentBlogEntriesCount,
+                    new Pager(prefs.getRecentEntriesItems()),
                     null, null, null,
                     null
             );
@@ -153,99 +141,22 @@
         }
     }
 
-    @Observer("PreferenceComponent.refresh.blogDirectoryPreferences")
-    public void refreshBlogEntries() {
-        initializePreferences();
-        blogEntries = new ArrayList<BlogEntry>();
-        queryNumOfBlogEntries();
-        if (numOfBlogEntries != 0){
-            queryBlogEntries();
-        }
-    }
-
-    public long getTotalNumOfBlogEntries() {
-        if (blogEntryCountsByYearAndMonth == null) {
-            queryBlogEntryCountsByYearAndMonth();
-        }
-        return totalNumOfBlogEntries;
-    }
-
-    public long getNumOfBlogEntries() {
-        return numOfBlogEntries;
-    }
-
     public List<BlogEntry> getBlogEntries() {
+        if (blogEntries == null) loadBlogEntries();
         return blogEntries;
     }
 
     public List<BlogEntryCount> getBlogEntryCountsByYearAndMonth() {
-        if (blogEntryCountsByYearAndMonth == null) {
-            queryBlogEntryCountsByYearAndMonth();
-        }
+        if (blogEntryCountsByYearAndMonth == null) loadBlogEntryCountsByYearAndMonth();
         return blogEntryCountsByYearAndMonth;
     }
 
-    public int getNextPage() {
-        return page + 1;
-    }
-
-    public int getPreviousPage() {
-        return page - 1;
-    }
-
-    public int getFirstPage() {
-        return 0;
-    }
-
-    public long getFirstRow() {
-        return page * pageSize + 1;
-    }
-
-    public long getLastRow() {
-        return (page * pageSize + pageSize) > numOfBlogEntries
-                ? numOfBlogEntries
-                : page * pageSize + pageSize;
-    }
-
-    public long getLastPage() {
-        long lastPage = (numOfBlogEntries / pageSize);
-        if (numOfBlogEntries % pageSize == 0) lastPage--;
-        return lastPage;
-    }
-
-    public boolean isNextPageAvailable() {
-        return blogEntries != null && numOfBlogEntries > ((page * pageSize) + pageSize);
-    }
-
-    public boolean isPreviousPageAvailable() {
-        return blogEntries != null && page > 0;
-    }
-
     public String getDateUrl() {
-        return dateAsString(year, month, day);
+        return WikiUtil.dateAsString(year, month, day);
     }
 
     public String getTagUrl() {
         return tag != null && tag.length()>0 ? "/Tag/" + WikiUtil.encodeURL(tag) : "";
     }
 
-    // Utilities
-
-    public static String dateAsString(Integer year, Integer month, Integer day) {
-        StringBuilder dateUrl = new StringBuilder();
-        if (year != null) dateUrl.append("/").append(year);
-        if (month != null) dateUrl.append("/").append(padInteger(month, 2));
-        if (day != null) dateUrl.append("/").append(padInteger(day, 2));
-        return dateUrl.toString();
-    }
-
-    private static String padInteger(Integer raw, int padding) {
-        String rawInteger = raw.toString();
-        StringBuilder paddedInteger = new StringBuilder( );
-        for ( int padIndex = rawInteger.length() ; padIndex < padding; padIndex++ ) {
-            paddedInteger.append('0');
-        }
-        return paddedInteger.append( rawInteger ).toString();
-    }
-
 }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntry.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntry.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntry.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,3 +1,9 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
 package org.jboss.seam.wiki.plugin.blogdirectory;
 
 import org.jboss.seam.wiki.core.model.WikiDocument;
@@ -3,9 +9,15 @@
 
 import java.io.Serializable;
+import java.util.List;
+import java.util.ArrayList;
 
+/**
+ * @author Christian Bauer
+ */
 public class BlogEntry implements Serializable {
 
     WikiDocument entryDocument;
     Long commentCount;
+    List<String> tags;
 
     public BlogEntry() {}
@@ -36,6 +48,11 @@
         this.commentCount = commentCount;
     }
 
+    public List<String> getTagsAsList() {
+        if (tags == null) tags = new ArrayList<String>(entryDocument.getTags());
+        return tags;
+    }
+
     public String toString() {
         return "BlogEntry: " + entryDocument + " Comments: " + commentCount;
     }

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntryCount.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntryCount.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/plugin/blogdirectory/BlogEntryCount.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,5 +1,16 @@
+/*
+ * JBoss, Home of Professional Open Source
+ *
+ * Distributable under LGPL license.
+ * See terms of license at gnu.org.
+ */
 package org.jboss.seam.wiki.plugin.blogdirectory;
 
+import org.jboss.seam.wiki.util.WikiUtil;
+
+/**
+ * @author Christian Bauer
+ */
 public class BlogEntryCount {
 
     Long numOfEntries;
@@ -9,31 +20,40 @@
 
     public BlogEntryCount() {}
 
-    public BlogEntryCount(Long numOfEntries, Integer year, Integer month, Integer day) {
-        this.numOfEntries = numOfEntries;
-        this.year = year;
-        this.month = month;
-        this.day = day;
-    }
-
     public Long getNumOfEntries() {
         return numOfEntries;
     }
 
+    public void setNumOfEntries(Long numOfEntries) {
+        this.numOfEntries = numOfEntries;
+    }
+
     public Integer getYear() {
         return year;
     }
 
+    public void setYear(Integer year) {
+        this.year = year;
+    }
+
     public Integer getMonth() {
         return month;
     }
 
+    public void setMonth(Integer month) {
+        this.month = month;
+    }
+
     public Integer getDay() {
         return day;
     }
 
+    public void setDay(Integer day) {
+        this.day = day;
+    }
+
     public String getAsString() {
-        return BlogDirectory.dateAsString(year, month, day);
+        return WikiUtil.dateAsString(year, month, day);
     }
 
     public String toString() {

Modified: trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java
===================================================================
--- trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/main/org/jboss/seam/wiki/util/WikiUtil.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -90,6 +90,23 @@
         return a + b;
     }
 
+    public static String padInteger(Integer raw, int padding) {
+        String rawInteger = raw.toString();
+        StringBuilder paddedInteger = new StringBuilder( );
+        for ( int padIndex = rawInteger.length() ; padIndex < padding; padIndex++ ) {
+            paddedInteger.append('0');
+        }
+        return paddedInteger.append( rawInteger ).toString();
+    }
+
+    public static String dateAsString(Integer year, Integer month, Integer day) {
+        StringBuilder dateUrl = new StringBuilder();
+        if (year != null) dateUrl.append("/Year/").append(year);
+        if (month != null) dateUrl.append("/Month/").append(WikiUtil.padInteger(month, 2));
+        if (day != null) dateUrl.append("/Day/").append(WikiUtil.padInteger(day, 2));
+        return dateUrl.toString();
+    }
+
     // Display all roles for a particular access level
     public static Role.AccessLevel resolveAccessLevel(Integer accessLevel) {
         List<Role.AccessLevel> accessLevels = (List<Role.AccessLevel>)Component.getInstance("accessLevelsList");
@@ -119,9 +136,7 @@
         StringBuilder url = new StringBuilder();
         url.append(Component.getInstance("basePath")).append("/service/Feed/atom").append(feed.getURL());
         if (comments != null && comments.length() >0) {
-            try {
-                url.append("/Comments/").append(FeedServlet.Comments.valueOf(comments));
-            } catch (IllegalArgumentException ex) {}
+            url.append("/Comments/").append(FeedServlet.Comments.valueOf(comments));
         }
         if (tag != null && tag.length() >0) url.append("/Tag/").append(encodeURL(tag));
         return url.toString();

Modified: trunk/examples/wiki/src/test/log4j.xml
===================================================================
--- trunk/examples/wiki/src/test/log4j.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/test/log4j.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -34,7 +34,7 @@
     <!-- ############### Hibernate logging ################# -->
 
     <category name="org.hibernate">
-        <priority value="WARN"/>
+        <priority value="ERROR"/>
     </category>
 
     <!--

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/FAQData.dbunit.xml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -23,10 +23,10 @@
         NODE_ID="301" FILE_REVISION="0"/>
     <WIKI_DOCUMENT
         NODE_ID="301"
-        HEADER="[&lt;=clearBackground]&#xA;[&lt;=hideControls]&#xA;[&lt;=hideComments]&#xA;[&lt;=hideTags]&#xA;[&lt;=hideCreatorHistory]&#xA;[&lt;=faqBrowser]"
+        HEADER="[&lt;=hideControls]&#xA;[&lt;=hideComments]&#xA;[&lt;=hideTags]&#xA;[&lt;=hideCreatorHistory]&#xA;[&lt;=faqBrowser]"
         CONTENT="This is the FAQ start page."
         FOOTER="[NULL]"
-        HEADER_MACROS="clearBackground hideControls hideComments hideTags hideCreatorHistory faqBrowser"
+        HEADER_MACROS="hideControls hideComments hideTags hideCreatorHistory faqBrowser"
         CONTENT_MACROS="[NULL]"
         FOOTER_MACROS="[NULL]"
         NAME_AS_TITLE="false" ENABLE_COMMENTS="false" ENABLE_COMMENT_FORM="false" ENABLE_COMMENTS_ON_FEEDS="false"/>

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayDirectories.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayDirectories.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/browse/DisplayDirectories.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -42,6 +42,8 @@
 
                 assert dirHome.getChildNodes().size() == 1;
 
+                assert dirHome.isRemovable(dirHome.getChildNodes().get(0));
+
                 assert getRenderedViewId().equals("/dirDisplay_d.xhtml");
             }
         }.run();
@@ -68,6 +70,8 @@
 
                 assert dirHome.getChildNodes().size() == 1;
 
+                assert dirHome.isRemovable(dirHome.getChildNodes().get(0));
+
                 assert getRenderedViewId().equals("/dirDisplay_d.xhtml");
             }
         }.run();

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/Commenting.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -131,7 +131,7 @@
             }
 
             protected void invokeApplication() throws Exception {
-                invokeMethod("#{commentHome.rate(11, 4)}");
+                invokeMethod("#{commentHome.rate(12, 4)}");
             }
 
         }.run();
@@ -144,7 +144,7 @@
 
             protected void renderResponse() throws Exception {
                 WikiNodeDAO dao = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
-                assert dao.findWikiNode(11l).getRating() == 4;
+                assert dao.findWikiNode(12l).getRating() == 4;
             }
 
         }.run();

Modified: trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/TrashTests.java
===================================================================
--- trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/TrashTests.java	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/src/test/org/jboss/seam/wiki/test/editing/TrashTests.java	2008-02-03 15:01:48 UTC (rev 7347)
@@ -12,13 +12,9 @@
 import org.jboss.seam.wiki.core.action.DirectoryHome;
 import org.jboss.seam.wiki.core.action.UploadHome;
 import org.jboss.seam.wiki.core.action.PreferenceEditor;
-import org.jboss.seam.wiki.core.model.WikiDirectory;
-import org.jboss.seam.wiki.core.model.WikiDocument;
-import org.jboss.seam.wiki.core.model.WikiFeed;
-import org.jboss.seam.wiki.core.model.FeedEntry;
+import org.jboss.seam.wiki.core.model.*;
 import org.jboss.seam.wiki.core.dao.WikiNodeDAO;
 import org.jboss.seam.wiki.core.feeds.FeedDAO;
-import org.jboss.seam.wiki.preferences.PreferenceProvider;
 import org.jboss.seam.wiki.preferences.PreferenceValue;
 import org.jboss.seam.wiki.preferences.metamodel.PreferenceRegistry;
 import org.jboss.seam.wiki.preferences.metamodel.PreferenceEntity;
@@ -331,6 +327,93 @@
         }.run();
     }
 
+    @Test
+    public void trashDocumentInDirBrowser() throws Exception {
+
+        new FacesRequest("/dirDisplay_d.xhtml") {
+
+            protected void beforeRequest() {
+                setParameter("directoryId", "2");
+            }
+
+            protected void invokeApplication() throws Exception {
+                DirectoryHome dirHome = (DirectoryHome)getInstance(DirectoryHome.class);
+                assert dirHome.getInstance().getId().equals(2l); // Init!
+                assert dirHome.getChildNodes().size() == 3;
+
+                boolean found = false;
+                for (WikiNode node : dirHome.getChildNodes()) found = node.getId().equals(9l);
+                assert found;
+
+                DocumentHome docHome = (DocumentHome)getInstance(DocumentHome.class);
+                assert docHome.remove(9l).equals("removed");
+            }
+
+            // Feed entries should be gone
+            protected void renderResponse() throws Exception {
+                WikiNodeDAO nodeDAO = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
+                WikiDocument document = nodeDAO.findWikiDocument(9l);
+
+                FeedDAO feedDAO = (FeedDAO)getInstance(FeedDAO.class);
+
+                List<WikiFeed> feeds = feedDAO.findFeeds(document);
+                assert feeds.size() == 0;
+            }
+        }.run();
+
+        loginAdmin();
+
+        new NonFacesRequest("/wiki.xhtml") {
+
+            protected void beforeRequest() {
+                setParameter("areaName", "Trash");
+            }
+
+            protected void renderResponse() throws Exception {
+                DirectoryHome dirHome = (DirectoryHome)getInstance(DirectoryHome.class);
+                assert dirHome.getInstance().getId().equals(17l); // Init!
+
+                assert dirHome.getChildNodes().size() == 1;
+                assert dirHome.getChildNodes().get(0).getId().equals(9l);
+
+                assert getRenderedViewId().equals("/dirDisplay_d.xhtml");
+            }
+        }.run();
+
+        new FacesRequest("/dirDisplay_d.xhtml") {
+
+            protected void beforeRequest() {
+                setParameter("directoryId", "17");
+            }
+
+            protected void invokeApplication() throws Exception {
+                DirectoryHome dirHome = (DirectoryHome)getInstance(DirectoryHome.class);
+                assert dirHome.getInstance().getId().equals(17l); // Init!
+                dirHome.emptyTrash();
+            }
+        }.run();
+
+        new NonFacesRequest("/wiki.xhtml") {
+
+            protected void beforeRequest() {
+                setParameter("areaName", "Trash");
+            }
+
+            protected void renderResponse() throws Exception {
+                DirectoryHome dirHome = (DirectoryHome)getInstance(DirectoryHome.class);
+                assert dirHome.getInstance().getId().equals(17l); // Init!
+
+                assert dirHome.getChildNodes().size() == 0;
+
+                WikiNodeDAO dao = (WikiNodeDAO)getInstance(WikiNodeDAO.class);
+                assert dao.findWikiNode(9l) == null;
+
+                assert getRenderedViewId().equals("/dirDisplay_d.xhtml");
+
+            }
+        }.run();
+    }
+
     private void loginAdmin() throws Exception {
         new FacesRequest() {
            protected void invokeApplication() throws Exception {

Modified: trunk/examples/wiki/view/adminHome_d.xhtml
===================================================================
--- trunk/examples/wiki/view/adminHome_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/adminHome_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,7 +6,6 @@
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:a="https://ajax4jsf.dev.java.net/ajax"
-                xmlns:j4j="http://javascript4jsf.dev.java.net/"
                 xmlns:wiki="http://jboss.com/products/seam/wiki"
                 template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
 

Modified: trunk/examples/wiki/view/dirDisplay_d.xhtml
===================================================================
--- trunk/examples/wiki/view/dirDisplay_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/dirDisplay_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -5,6 +5,7 @@
                 xmlns:ui="http://java.sun.com/jsf/facelets"
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
+                xmlns:a="https://ajax4jsf.dev.java.net/ajax"
                 template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
 
 <ui:define name="screenname">#{directoryHome.instance.name}</ui:define>
@@ -15,7 +16,7 @@
 
         <s:link id="createDir" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.CreateSubdirectory.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.CreateSubdirectory']}"/>
             <f:param name="directoryId"/>
@@ -24,14 +25,14 @@
 
         <s:link id="editDir" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.EditDirectory.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'edit', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.EditDirectory']}"/>
         </s:link>
 
         <s:link id="createDoc" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.NewDocument.accesskey']}"
-                view="/docEdit_#{skin}.xhtml"
+                view="/docEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.NewDocument']}"/>
             <f:param name="documentId"/>
@@ -40,7 +41,7 @@
 
         <s:link id="uploadFile" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.UploadFile.accesskey']}"
-                view="/uploadCreate_#{skin}.xhtml"
+                view="/uploadCreate_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.UploadFile']}"/>
             <f:param name="parentDirectoryId" value="#{directoryHome.instance.id}"/>
@@ -51,7 +52,7 @@
     <s:fragment rendered="#{empty directoryHome.parentNode}">
         <s:link id="createArea" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.NewArea.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.NewArea']}"/>
             <f:param name="directoryId"/>
@@ -60,7 +61,7 @@
 
         <s:link id="editRoot" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.EditWikiRoot.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'edit', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.EditWikiRoot']}"/>
             <f:param name="parentDirectoryId"/>
@@ -107,7 +108,7 @@
 
         <s:fragment>
             <h:panelGroup styleClass="undecoratedLink"
-                          rendered="#{childNodesList.size > 0 and directoryHome.instance.id != wikiRoot.id}">
+                          rendered="#{directoryHome.childNodes.size() > 0 and directoryHome.instance.id != wikiRoot.id}">
                 <h:outputText value="#{messages['lacewiki.label.Clipboard.Select']}:&#160;"/>
                 <h:outputLink value="#" onclick="selectCheckBoxes('wikiFileSelect'); switchClipboardControl();" tabindex="1">
                     <h:outputText value="#{messages['lacewiki.label.Clipboard.All']}"/>
@@ -189,7 +190,8 @@
             <h:outputText value="/" styleClass="directorySeparator"/>
             <ui:repeat var="directory" value="#{directoryHome.instance.path}">
 
-                <s:link view="/dirDisplay_#{skin}.xhtml" value="#{directory.name}" styleClass="directoryButton" tabindex="1">
+                <s:link view="/dirDisplay_#{skin}.xhtml" value="#{directory.name}" propagation="none"
+                        styleClass="directoryButton" tabindex="1">
                     <f:param name="directoryId" value="#{directory.id}"/>
                 </s:link>
 
@@ -198,7 +200,7 @@
             </ui:repeat>
         </h:panelGroup>
 
-        <h:panelGroup rendered="#{childNodesList.size > 0}" styleClass="smallFont">
+        <h:panelGroup rendered="#{directoryHome.childNodes.size() > 0}" styleClass="smallFont">
             <h:outputText value="#{messages['lacewiki.label.dirDisplay.ShowItems']}:&#160;"/>
             <h:selectOneMenu value="#{directoryHome.pager.pageSize}" tabindex="1">
                 <f:selectItem itemLabel="5" itemValue="5"/>
@@ -215,8 +217,8 @@
 
     </h:panelGrid>
 
-    <s:div styleClass="directoryEmpty" rendered="#{childNodesList.size == 0}">
-            <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="."
+    <s:div styleClass="directoryEmpty" rendered="#{directoryHome.childNodes.size() == 0}">
+            <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="." propagation="none"
                     rendered="#{!empty directoryHome.parentNode and s:hasPermission('Node','read',directoryHome.parentNode)}">
                 <f:param name="directoryId" value="#{directoryHome.parentNode.id}"/>
                 <h:panelGrid columns="2">
@@ -229,13 +231,13 @@
 
     </s:div>
 
-    <h:panelGrid columns="5" rendered="#{childNodesList.size > 0 and directoryHome.pager.numOfRecords > directoryHome.pager.pageSize}"
+    <h:panelGrid columns="5" rendered="#{directoryHome.childNodes.size() > 0 and directoryHome.pager.numOfRecords > directoryHome.pager.pageSize}"
                  styleClass="pager pagerTop"
                  columnClasses="pagerIconColumn,pagerIconColumn,pagerTextColumn,pagerIconColumn,pagerIconColumn"
                  cellpadding="0" cellspacing="0" border="0">
 
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.previousPageAvailable}">
             <f:param name="page" value="0"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -244,7 +246,7 @@
         <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
                         rendered="#{!directoryHome.pager.previousPageAvailable}"/>
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.previousPageAvailable}">
             <f:param name="page" value="#{directoryHome.pager.previousPage}"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -260,7 +262,7 @@
                                     #{directoryHome.pager.numOfRecords} #{messages['lacewiki.label.dirDisplay.PagerElements']}"/>
         </s:span>
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.nextPageAvailable}">
             <f:param name="page" value="#{directoryHome.pager.nextPage}"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -269,7 +271,7 @@
         <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
                         rendered="#{!directoryHome.pager.nextPageAvailable}"/>
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.nextPageAvailable}">
             <f:param name="page" value="#{directoryHome.pager.lastPage}"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -281,8 +283,8 @@
     </h:panelGrid>
 
     <h:dataTable id="dirTable" var="node"
-                 value="#{childNodesList}"
-                 rendered="#{childNodesList.size > 0}"
+                 value="#{directoryHome.childNodes}"
+                 rendered="#{directoryHome.childNodes.size() > 0}"
                  styleClass="datatable topLeftBottomBorder smallFont"
                  headerClass="regularHeader rightBorder alignCenter"
                  columnClasses="onePercentColumn rightBorder alignCenter, onePercentColumn rightBorder alignCenter,
@@ -311,7 +313,7 @@
         </h:column>
         <h:column>
             <f:facet name="header">
-                <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="."
+                <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="." propagation="none"
                         rendered="#{!empty directoryHome.parentNode and s:hasPermission('Node','read',directoryHome.parentNode)}">
                     <f:param name="directoryId" value="#{directoryHome.parentNode.id}"/>
                     <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/icon.dirup.gif" width="18" height="20"/>
@@ -354,22 +356,28 @@
             <s:fragment rendered="#{node.isInstance('WikiDirectory')}">
                 <s:fragment rendered="#{s:hasPermission('Node','read',node)}">
 
-                    <s:link id="directoryLink" value="#{wiki:truncateString(node.name, 40, '...')}"
+                    <s:link id="directoryLink" value="#{wiki:truncateString(node.name, 40, '...')}" propagation="none"
                             view="/dirDisplay_#{skin}.xhtml" tabindex="1">
                         <f:param name="directoryId" value="#{node.id}"/>
                     </s:link>
 
                     <s:div id="directoryMenu" styleClass="contextMenu">
                         <ul>
-                            <li class="undecoratedLink">
+                            <li class="undecoratedLink noWrapWhitespace">
                                 <h:outputLink value="#{wiki:renderURL(node)}">
                                     <h:outputText value="#{messages['lacewiki.button.dirDisplay.View']}"/>
                                 </h:outputLink>
                             </li>
 
+                            <li class="undecoratedLink noWrapWhitespace">
+                                <h:outputLink value="#{wiki:renderURL(node)}" target="_blank">
+                                    <h:outputText value="#{messages['lacewiki.button.dirDisplay.ViewNewWindow']}"/>
+                                </h:outputLink>
+                            </li>
+
                             <s:fragment rendered="#{s:hasPermission('Node', 'edit', node)}">
                                 <li class="undecoratedLink">
-                                    <s:link view="/dirEdit_#{skin}.xhtml">
+                                    <s:link view="/dirEdit_#{skin}.xhtml" propagation="none">
                                         <f:param name="directoryId" value="#{node.id}"/>
                                         <h:outputText value="#{messages['lacewiki.button.dirDisplay.Edit']}"/>
                                     </s:link>
@@ -400,15 +408,32 @@
 
                     <s:div id="documentMenu" styleClass="contextMenu">
                         <ul>
-                            <li class="undecoratedLink">
+                            <li class="undecoratedLink noWrapWhitespace">
                                 <h:outputLink value="#{wiki:renderURL(node)}">
                                     <h:outputText value="#{messages['lacewiki.button.dirDisplay.View']}"/>
                                 </h:outputLink>
                             </li>
 
+                            <li class="undecoratedLink noWrapWhitespace">
+                                <h:outputLink value="#{wiki:renderURL(node)}" target="_blank">
+                                    <h:outputText value="#{messages['lacewiki.button.dirDisplay.ViewNewWindow']}"/>
+                                </h:outputLink>
+                            </li>
+
+                            <s:fragment rendered="#{directoryHome.isRemovable(node)}">
+                                <a:jsFunction name="deleteDocumentId#{node.id}"
+                                              action="#{documentHome.remove(node.id)}"/>
+                                <li class="undecoratedLink noWrapWhitespace">
+                                    <h:outputLink value="#"
+                                          onclick="deleteConfirmation('\\'#{node.name}\\'', 'deleteDocumentId#{node.id}')">
+                                        <h:outputText value="#{messages['lacewiki.button.dirDisplay.Delete']}"/>
+                                    </h:outputLink>
+                                </li>
+                            </s:fragment>
+
                             <s:fragment rendered="#{s:hasPermission('Node', 'edit', node)}">
-                                <li class="undecoratedLink">
-                                    <s:link view="/docEdit_#{skin}.xhtml">
+                                <li class="undecoratedLink noWrapWhitespace">
+                                    <s:link view="/docEdit_#{skin}.xhtml" propagation="none">
                                         <f:param name="documentId" value="#{node.id}"/>
                                         <h:outputText value="#{messages['lacewiki.button.dirDisplay.Edit']}"/>
                                     </s:link>
@@ -437,15 +462,32 @@
 
                     <s:div id="uploadMenu" styleClass="contextMenu">
                         <ul>
-                            <li class="undecoratedLink">
+                            <li class="undecoratedLink noWrapWhitespace">
                                 <h:outputLink value="#{wiki:renderURL(node)}">
                                     <h:outputText value="#{messages['lacewiki.button.dirDisplay.View']}"/>
                                 </h:outputLink>
                             </li>
 
+                            <li class="undecoratedLink noWrapWhitespace">
+                                <h:outputLink value="#{wiki:renderURL(node)}" target="_blank">
+                                    <h:outputText value="#{messages['lacewiki.button.dirDisplay.ViewNewWindow']}"/>
+                                </h:outputLink>
+                            </li>
+
+                            <s:fragment rendered="#{directoryHome.isRemovable(node)}">
+                                <a:jsFunction name="deleteUploadId#{node.id}"
+                                              action="#{uploadHome.remove(node.id)}"/>
+                                <li class="undecoratedLink noWrapWhitespace">
+                                    <h:outputLink value="#"
+                                          onclick="deleteConfirmation('\\'#{node.name}\\'', 'deleteUploadId#{node.id}')">
+                                        <h:outputText value="#{messages['lacewiki.button.dirDisplay.Delete']}"/>
+                                    </h:outputLink>
+                                </li>
+                            </s:fragment>
+
                             <s:fragment rendered="#{s:hasPermission('Node', 'edit', node)}">
-                                <li class="undecoratedLink">
-                                    <s:link view="/uploadEdit_#{skin}.xhtml">
+                                <li class="undecoratedLink noWrapWhitespace">
+                                    <s:link view="/uploadEdit_#{skin}.xhtml" propagation="none">
                                         <f:param name="uploadId" value="#{node.id}"/>
                                         <h:outputText value="#{messages['lacewiki.button.dirDisplay.Edit']}"/>
                                     </s:link>
@@ -516,13 +558,13 @@
 
     </h:dataTable>
 
-    <h:panelGrid columns="5" rendered="#{childNodesList.size > 0 and directoryHome.pager.numOfRecords > directoryHome.pager.pageSize}"
+    <h:panelGrid columns="5" rendered="#{directoryHome.childNodes.size() > 0 and directoryHome.pager.numOfRecords > directoryHome.pager.pageSize}"
                  styleClass="pager pagerBottom"
                  columnClasses="pagerIconColumn,pagerIconColumn,pagerTextColumn,pagerIconColumn,pagerIconColumn"
                  cellpadding="0" cellspacing="0" border="0">
 
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.previousPageAvailable}">
             <f:param name="page" value="0"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -531,7 +573,7 @@
         <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
                         rendered="#{!directoryHome.pager.previousPageAvailable}"/>
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.previousPageAvailable}">
             <f:param name="page" value="#{directoryHome.pager.previousPage}"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -547,7 +589,7 @@
                                     #{directoryHome.pager.numOfRecords} #{messages['lacewiki.label.dirDisplay.PagerElements']}"/>
         </s:span>
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.nextPageAvailable}">
             <f:param name="page" value="#{directoryHome.pager.nextPage}"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>
@@ -556,7 +598,7 @@
         <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
                         rendered="#{!directoryHome.pager.nextPageAvailable}"/>
 
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" target="_top"
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" propagation="none"
                 rendered="#{directoryHome.pager.nextPageAvailable}">
             <f:param name="page" value="#{directoryHome.pager.lastPage}"/>
             <f:param name="pageSize" value="#{directoryHome.pager.pageSize}"/>

Modified: trunk/examples/wiki/view/dirDisplay_m.xhtml
===================================================================
--- trunk/examples/wiki/view/dirDisplay_m.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/dirDisplay_m.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -16,7 +16,7 @@
 
         <s:link id="createDir" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.CreateSubdirectory.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.CreateSubdirectory']}"/>
             <f:param name="directoryId"/>
@@ -25,14 +25,14 @@
         &#160;
         <s:link id="editDir" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.EditDirectory.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'edit', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.EditDirectory']}"/>
         </s:link>
         &#160;
         <s:link id="createDoc" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.NewDocument.accesskey']}"
-                view="/docEdit_#{skin}.xhtml"
+                view="/docEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.NewDocument']}"/>
             <f:param name="documentId"/>
@@ -41,7 +41,7 @@
         &#160;
         <s:link id="uploadFile" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.UploadFile.accesskey']}"
-                view="/uploadCreate_#{skin}.xhtml"
+                view="/uploadCreate_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.UploadFile']}"/>
             <f:param name="parentDirectoryId" value="#{directoryHome.instance.id}"/>
@@ -53,7 +53,7 @@
     <s:fragment rendered="#{empty directoryHome.parentNode}">
         <s:link id="createArea" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.NewArea.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.NewArea']}"/>
             <f:param name="directoryId"/>
@@ -62,7 +62,7 @@
 
         <s:link id="editRoot" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.EditWikiRoot.accesskey']}"
-                view="/dirEdit_#{skin}.xhtml"
+                view="/dirEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'edit', directoryHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.EditWikiRoot']}"/>
             <f:param name="parentDirectoryId"/>
@@ -81,14 +81,16 @@
 
 <div class="directoryPathPanel">
 
-    <s:link view="/dirDisplay_#{skin}.xhtml" value="#{wikiRoot.name}" styleClass="directoryButton" tabindex="1">
+    <s:link view="/dirDisplay_#{skin}.xhtml" value="#{wikiRoot.name}" propagation="none"
+            styleClass="directoryButton" tabindex="1">
         <f:param name="directoryId" value="#{wikiRoot.id}"/>
     </s:link>
     <h:outputText value="/" styleClass="directorySeparator"/>
 
     <h:panelGroup>
         <ui:repeat var="directory" value="#{breadcrumb}">
-            <s:link view="/dirDisplay_#{skin}.xhtml" value="#{directory.name}" styleClass="directoryButton" tabindex="1">
+            <s:link view="/dirDisplay_#{skin}.xhtml" value="#{directory.name}" propagation="none"
+                    styleClass="directoryButton" tabindex="1">
                 <f:param name="directoryId" value="#{directory.id}"/>
             </s:link>
             <h:outputText value="/" styleClass="directorySeparator" rendered="#{directory != directoryHome.instance}"/>
@@ -97,7 +99,7 @@
 </div>
 
 <s:div styleClass="directoryEmpty" rendered="#{empty directoryHome.childNodes}">
-        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="."
+        <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="." propagation="none"
                 rendered="#{!empty directoryHome.parentNode and s:hasPermission('Node','read',directoryHome.parentNode)}">
             <f:param name="directoryId" value="#{directoryHome.parentNode.id}"/>
             <h:panelGrid columns="2">
@@ -123,7 +125,7 @@
 
     <h:column>
         <f:facet name="header">
-            <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="."
+            <s:link view="/dirDisplay_#{skin}.xhtml" tabindex="1" accesskey="." propagation="none"
                     rendered="#{!empty directoryHome.parentNode and s:hasPermission('Node','read',directoryHome.parentNode)}">
                 <f:param name="directoryId" value="#{directoryHome.parentNode.id}"/>
                 <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/icon.dirup.gif" width="18" height="20"/>
@@ -151,7 +153,7 @@
 
         <s:span rendered="#{node.isInstance('WikiDirectory')}">
             <s:link id="browseDirectory" value="#{wiki:truncateString(node.name, 40, '...')}"
-                    view="/dirDisplay_#{skin}.xhtml"
+                    view="/dirDisplay_#{skin}.xhtml" propagation="none"
                     rendered="#{s:hasPermission('Node','read',node)}" tabindex="2">
                 <f:param name="directoryId" value="#{node.id}"/>
             </s:link>
@@ -166,7 +168,8 @@
         </s:span>
 
         <s:span rendered="#{node.isInstance('WikiUpload') and s:hasPermission('Node', 'edit', node)}">
-            <s:link id="editFile" value="#{wiki:truncateString(node.name, 30, '...')}" tabindex="2" view="/uploadEdit_#{skin}.xhtml">
+            <s:link id="editFile" value="#{wiki:truncateString(node.name, 30, '...')}"
+                    tabindex="2" view="/uploadEdit_#{skin}.xhtml" propagation="none">
                 <f:param name="uploadId" value="#{node.id}"/>
                 <f:param name="parentDirectoryId" value="#{directoryHome.instance.id}"/>
             </s:link>

Modified: trunk/examples/wiki/view/docDisplay_d.xhtml
===================================================================
--- trunk/examples/wiki/view/docDisplay_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/docDisplay_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -29,7 +29,7 @@
 
         <s:link id="createDoc" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.CreateDocument.accesskey']}"
-                view="/docEdit_#{skin}.xhtml"
+                view="/docEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'create', documentHome.instance.parent)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.CreateDocument']}"/>
             <f:param name="documentId" value=""/>
@@ -38,14 +38,14 @@
 
         <s:link id="editDoc" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.EditDocument.accesskey']}"
-                view="/docEdit_#{skin}.xhtml"
+                view="/docEdit_#{skin}.xhtml" propagation="none"
                 rendered="#{s:hasPermission('Node', 'edit', documentHome.instance)}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.EditDocument']}"/>
         </s:link>
 
         <s:link id="showHistory" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.HistoryDocument.accesskey']}"
-                view="/docHistory_#{skin}.xhtml"
+                view="/docHistory_#{skin}.xhtml" propagation="none"
                 rendered="#{documentHome.historicalFilesPresent}">
             <h:outputText escape="false" value="#{messages['lacewiki.button.HistoryDocument']}"/>
             <f:param name="fileId" value="#{documentHome.nodeId}"/>
@@ -53,7 +53,7 @@
 
         <s:link id="browseDir" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.BrowseDirectory.accesskey']}"
-                view="/dirDisplay_#{skin}.xhtml">
+                view="/dirDisplay_#{skin}.xhtml" propagation="none">
             <h:outputText escape="false" value="#{messages['lacewiki.button.BrowseDirectory']}"/>
             <f:param name="directoryId" value="#{documentHome.instance.parent.id}"/>
         </s:link>
@@ -124,7 +124,7 @@
             <s:div>
                 #{messages['lacewiki.label.docDisplay.Tags']}:&#160;
                 <ui:repeat var="tag" value="#{documentHome.instance.tagsAsList}">
-                    <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tag}">
+                    <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tag}" propagation="none">
                         <f:param value="#{tag}" name="tag"/>
                     </s:link>
 
@@ -179,7 +179,7 @@
                         <h:outputText value="(#{messages['lacewiki.label.docDisplay.InitialRevision']})"/>
                     </s:fragment>
                     &#160;
-                    <s:link view="/docHistory_#{skin}.xhtml" action="#{documentHistory.diff}">
+                    <s:link view="/docHistory_#{skin}.xhtml" action="#{documentHistory.diff}" propagation="none">
                         <h:outputText value="#{messages['lacewiki.label.docDisplay.Diff']}"/>
                         <f:param name="fileId" value="#{documentHome.instance.id}"/>
                         <f:param name="historicalFileId" value="#{hfile.historicalFileId}"/>
@@ -207,14 +207,14 @@
 
                         <s:fragment rendered="#{not commentHome.showForm and s:hasPermission('Comment', 'create', documentHome.instance)}">
 
-                            <s:link tabindex="102"
+                            <s:link tabindex="102" propagation="none"
                                     action="#{commentHome.replyTo()}"
                                     styleClass="buttonNonpersistent">
                                 <f:param name="parentCommentId" value="#{c.id}"/>
                                 <h:outputText styleClass="buttonLabel" value="#{messages['lacewiki.button.commentsDisplay.ReplyTo']}"/>
                             </s:link>
 
-                            <s:link tabindex="102"
+                            <s:link tabindex="102" propagation="none"
                                     action="#{commentHome.quote()}"
                                     styleClass="buttonNonpersistent">
                                 <f:param name="parentCommentId" value="#{c.id}"/>

Modified: trunk/examples/wiki/view/docDisplay_m.xhtml
===================================================================
--- trunk/examples/wiki/view/docDisplay_m.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/docDisplay_m.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -17,7 +17,8 @@
 
         <s:link id="createDoc" styleClass="linkNavigation" view="/docEdit_#{skin}.xhtml"
                 accesskey="#{messages['lacewiki.button.CreateDocument.accesskey']}"
-                rendered="#{s:hasPermission('Node', 'create', documentHome.instance.parent)}">
+                rendered="#{s:hasPermission('Node', 'create', documentHome.instance.parent)}"
+                propagation="none">
             <h:outputText escape="false" value="#{messages['lacewiki.button.CreateDocument']}"/>
             <f:param name="documentId" value=""/>
             <f:param name="parentDirectoryId" value="#{documentHome.instance.parent.id}"/>
@@ -25,20 +26,23 @@
         &#160;
         <s:link id="editDoc" styleClass="linkNavigation" view="/docEdit_#{skin}.xhtml"
                 accesskey="#{messages['lacewiki.button.EditDocument.accesskey']}"
-                rendered="#{s:hasPermission('Node', 'edit', documentHome.instance)}">
+                rendered="#{s:hasPermission('Node', 'edit', documentHome.instance)}"
+                propagation="none">
             <h:outputText escape="false" value="#{messages['lacewiki.button.EditDocument']}"/>
         </s:link>
         &#160;
         <s:link id="showHistory" styleClass="linkNavigation"
                 accesskey="#{messages['lacewiki.button.HistoryDocument.accesskey']}"
                 view="/docHistory_#{skin}.xhtml"
-                rendered="#{documentHome.historicalFilesPresent}">
+                rendered="#{documentHome.historicalFilesPresent}"
+                propagation="none">
             <h:outputText escape="false" value="#{messages['lacewiki.button.HistoryDocument']}"/>
             <f:param name="fileId" value="#{documentHome.nodeId}"/>
         </s:link>
         &#160;
         <s:link id="browseDir" styleClass="linkNavigation" view="/dirDisplay_#{skin}.xhtml"
-                accesskey="#{messages['lacewiki.button.BrowseDirectory.accesskey']}">
+                accesskey="#{messages['lacewiki.button.BrowseDirectory.accesskey']}"
+                propagation="none">
             <h:outputText escape="false" value="#{messages['lacewiki.button.BrowseDirectory']}"/>
             <f:param name="directoryId" value="#{documentHome.instance.parent.id}"/>
         </s:link>
@@ -176,7 +180,7 @@
         <s:div>
             #{messages['lacewiki.label.docDisplay.Tags']}:&#160;
             <ui:repeat var="tag" value="#{documentHome.instance.tagsAsList}">
-                <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tag}">
+                <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tag}" propagation="none">
                     <f:param value="#{tag}" name="tag"/>
                 </s:link>
 

Modified: trunk/examples/wiki/view/docHistory_d.xhtml
===================================================================
--- trunk/examples/wiki/view/docHistory_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/docHistory_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -166,7 +166,8 @@
     <s:div id="documentDisplayContainer"
            rendered="#{not empty documentHistory.displayedHistoricalFile}"
            styleClass="box">
-        <s:div rendered="#{documentHistory.displayedHistoricalFile.name != documentHistory.currentFile.name}">
+        <s:div styleClass="diffChangedName"
+               rendered="#{documentHistory.displayedHistoricalFile.name != documentHistory.currentFile.name}">
             <h:outputText value="Revision document name: #{documentHistory.displayedHistoricalFile.name}"/>
             <hr/>
         </s:div>

Modified: trunk/examples/wiki/view/includes/commentForm.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/commentForm.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/commentForm.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,4 +1,4 @@
-<s:div styleClass="box"  style="margin-top:25px"
+<s:div styleClass="box"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
@@ -32,7 +32,7 @@
                 </s:fragment>
 
                 <s:link tabindex="102" rendered="#{!commentHome.showForm}"
-                        action="#{commentHome.newComment()}"
+                        action="#{commentHome.newComment()}" propagation="none"
                         accesskey="#{messages['lacewiki.button.commentForm.PostComment.accesskey']}"
                         styleClass="buttonNonpersistent">
                     <h:outputText escape="false" styleClass="buttonLabel"

Modified: trunk/examples/wiki/view/includes/commentsDisplay.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/commentsDisplay.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/commentsDisplay.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,4 +1,4 @@
-<s:span id="comments" styleClass="commentsDisplay"
+<s:div id="comments" styleClass="commentsDisplay"
      xmlns="http://www.w3.org/1999/xhtml"
      xmlns:ui="http://java.sun.com/jsf/facelets"
      xmlns:h="http://java.sun.com/jsf/html"
@@ -141,5 +141,5 @@
     </h:panelGrid>
 
 </s:div>
-</s:span>
+</s:div>
 

Modified: trunk/examples/wiki/view/includes/directorySelector.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/directorySelector.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/directorySelector.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -5,7 +5,6 @@
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:a="https://ajax4jsf.dev.java.net/ajax"
          xmlns:wiki="http://jboss.com/products/seam/wiki"
-         xmlns:j4j="http://javascript4jsf.dev.java.net/"
          xmlns:rich="http://richfaces.ajax4jsf.org/rich">
 <!--
     <ui:param name="dialogId" value="dialogDirectorySelection"/>

Deleted: trunk/examples/wiki/view/includes/languageSelector.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/languageSelector.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/languageSelector.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,18 +0,0 @@
-<div id="languageSelector"
-	 xmlns="http://www.w3.org/1999/xhtml"
-     xmlns:ui="http://java.sun.com/jsf/facelets"
-     xmlns:h="http://java.sun.com/jsf/html"
-     xmlns:f="http://java.sun.com/jsf/core"
-     xmlns:s="http://jboss.com/products/seam/taglib">
-
-	<h:form>
-	    <h:panelGroup>
-	        <h:outputText styleClass="languageSelectorLabel" value="#{messages['Language']}"/>:
-
-	        <h:commandLink styleClass="languageSelectorLink" value="EN" action="#{localeSelector.selectLanguage('en')}"/><span class="languageSelectorSeparator">|</span>
-
-	        <h:commandLink styleClass="languageSelectorLink"  value="DE" action="#{localeSelector.selectLanguage('de')}"/>
-	    </h:panelGroup>
-	</h:form>
-
-</div>
\ No newline at end of file

Modified: trunk/examples/wiki/view/includes/ownerSelector.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/ownerSelector.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/ownerSelector.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -4,8 +4,7 @@
          xmlns:f="http://java.sun.com/jsf/core"
          xmlns:h="http://java.sun.com/jsf/html"
          xmlns:a="https://ajax4jsf.dev.java.net/ajax"
-         xmlns:wiki="http://jboss.com/products/seam/wiki"
-         xmlns:j4j="http://javascript4jsf.dev.java.net/">
+         xmlns:wiki="http://jboss.com/products/seam/wiki">
 
     <ui:param name="dialogId" value="dialogOwnerSelection"/>
     <ui:define name="dialogInit">
@@ -66,7 +65,7 @@
             </h:panelGrid>
         </div>
 
-        <s:div id="userPager" style="margin-top:10px;">
+        <s:div id="userPager">
             <h:panelGrid columns="5" styleClass="pager pagerTop"
                          columnClasses="pagerIconColumn,pagerIconColumn,pagerTextColumn,pagerIconColumn,pagerIconColumn"
                          cellpadding="0" cellspacing="0" border="0"

Modified: trunk/examples/wiki/view/includes/userControl.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/userControl.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/userControl.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -131,6 +131,7 @@
         <h:outputText styleClass="label" value="(#{currentUser.fullname})"/>
 
         <s:link styleClass="link" action="#{authenticator.logout}" tabindex="70"
+                propagation="none"
                 accesskey="#{messages['lacewiki.button.userControl.Logout.accesskey']}">
             <h:outputText styleClass="linkText" escape="false" value="#{messages['lacewiki.button.userControl.Logout']}"/>
         </s:link>

Modified: trunk/examples/wiki/view/includes/userInfo.xhtml
===================================================================
--- trunk/examples/wiki/view/includes/userInfo.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/includes/userInfo.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -12,7 +12,7 @@
 
         <div class="boxHeader">
             <h:outputText value="#{user.fullname}"/>
-            <s:div rendered="#{wiki:showEmailAddress()}">
+            <s:div styleClass="userInfoEmail smallFont" rendered="#{wiki:showEmailAddress()}">
                 <h:outputLink value="#{wiki:escapeEmailURL(wiki:concat('mailto:', user.email))}">
                     <h:outputText value="#{wiki:escapeAtSymbol(user.email)}"/>
                 </h:outputLink>

Modified: trunk/examples/wiki/view/plugins/blogArchive/plugin.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/blogArchive/plugin.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/blogArchive/plugin.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -12,16 +12,17 @@
 
         <s:div styleClass="blogArchive">
 
-            <s:div styleClass="boxHeader" rendered="#{not preferences.get('Blog').archiveSubscribeIcon}">
+            <s:div styleClass="boxHeader" rendered="#{not preferences.get('Blog', currentMacro).archiveSubscribeIcon}">
                 <h:outputText rendered="#{empty param.tag}" value="#{messages['blogArchive.label.Archive']}"/>
                 <h:outputText rendered="#{not empty param.tag}" value="#{messages['blogArchive.label.Archive']} '#{param.tag}'"/>
             </s:div>
 
-            <h:panelGrid rendered="#{preferences.get('Blog').archiveSubscribeIcon}"
+            <h:panelGrid rendered="#{preferences.get('Blog', currentMacro).archiveSubscribeIcon}"
                          columns="2" cellpadding="0" cellspacing="0" border="0"
                          styleClass="boxHeader fullWidth">
 
-                <h:panelGrid rendered="#{not empty currentDirectory.feed}" columns="2" cellpadding="0" cellspacing="0" border="0">
+                <h:panelGrid styleClass="smallFont" rendered="#{not empty currentDirectory.feed}" columns="2"
+                             cellpadding="2" cellspacing="0" border="0">
                     <h:outputLink value="#{wiki:renderFeedURL(currentDirectory.feed, null, null)}">
                         <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/icon.atom.ongrey.gif" width="18" height="18" alt="Atom"/>
                     </h:outputLink>
@@ -31,14 +32,14 @@
                 </h:panelGrid>
 
                 <h:outputText rendered="#{empty param.tag}" value="#{messages['blogArchive.label.Archive']}"/>
-                <h:outputText rendered="#{not empty param.tag}" value="#{messages['blogArchive.label.Archive']} '#{blogDirectory.tag}'"/>
+                <h:outputText rendered="#{not empty param.tag}" value="#{messages['blogArchive.label.Archive']} '#{param.tag}'"/>
 
             </h:panelGrid>
 
             <div class="blogArchiveSelector boxContent">
                 <select id="blogArchiveCombo" class="blogArchiveCombo"
                         onchange="top.location.href = jQuery('#blogArchiveCombo')[0].options[jQuery('#blogArchiveCombo')[0].selectedIndex].value;">
-                    <option value="#{wiki:renderURL(currentDocument)}#{blogDirectory.tagUrl}">#{messages['blogArchive.label.AllEntries']} (#{blogDirectory.totalNumOfBlogEntries})</option>
+                    <option value="#{wiki:renderURL(currentDocument)}#{blogDirectory.tagUrl}">#{messages['blogArchive.label.AllEntries']} (#{blogDirectory.pager.numOfRecords})</option>
                     <ui:repeat var="beCount" value="#{blogDirectory.blogEntryCountsByYearAndMonth}">
                         <s:fragment rendered="#{blogDirectory.dateUrl != beCount.asString}">
                             <option value="#{wiki:renderURL(currentDocument)}#{beCount.asString}#{blogDirectory.tagUrl}">

Modified: trunk/examples/wiki/view/plugins/blogDirectory/plugin.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/blogDirectory/plugin.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/blogDirectory/plugin.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -16,25 +16,33 @@
 
                 <div class="box blogEntryContainer">
 
-                    <div class="blogEntryHeader">
-                        <h:outputText value="#{blogEntry.entryDocument.name}"/>
-                        <div class="undecoratedLink">
-                            <h:outputText styleClass="blogEntryCreatedOnText" value="#{blogEntry.entryDocument.createdOn}">
+                    <div class="boxHeader blogEntryHeader">
+
+                        <div class="title">
+                            <h:outputText value="#{blogEntry.entryDocument.name}"/>
+                        </div>
+
+                        <div class="dateAuthor smallFont">
+                            <h:outputText value="#{blogEntry.entryDocument.createdOn}">
                                 <f:convertDateTime pattern="dd. MMM yyyy, HH:mm" timeZone="#{preferences.get('Wiki').timeZone}"/>
                             </h:outputText>
                             <h:outputText value="&#160;#{preferences.get('Wiki').timeZone}"/>
                             <h:outputText value=",&#160;by&#160;"/>
-                            <h:outputLink value="#{wiki:renderURL(blogEntry.entryDocument.createdBy.memberHome)}" target="_top"
-                                          rendered="#{!empty blogEntry.entryDocument.createdBy.memberHome}">
-                                <h:outputText styleClass="blogEntryCreatedByLink"
-                                              value="#{blogEntry.entryDocument.createdBy.fullname}"/>
-                            </h:outputLink>
-                            <h:outputText rendered="#{empty blogEntry.entryDocument.createdBy.memberHome}"
-                                          value="#{blogEntry.entryDocument.createdBy.fullname}"/>
+                            <s:span styleClass="undecoratedLink">
+                                <h:outputLink value="#{wiki:renderURL(blogEntry.entryDocument.createdBy.memberHome)}" target="_top"
+                                              rendered="#{!empty blogEntry.entryDocument.createdBy.memberHome}">
+                                    <h:outputText value="#{blogEntry.entryDocument.createdBy.fullname}"/>
+                                </h:outputLink>
+                                <h:outputLink value="#{wiki:renderUserInfoURL(blogEntry.entryDocument.createdBy)}" target="_top"
+                                              rendered="#{empty blogEntry.entryDocument.createdBy.memberHome}">
+                                    <h:outputText value="#{blogEntry.entryDocument.createdBy.fullname}"/>
+                                </h:outputLink>
+                            </s:span>
                         </div>
+
                     </div>
 
-                    <div class="blogEntryContent">
+                    <div class="boxContent blogEntryContent">
                         <wiki:formattedText value="#{blogEntry.entryDocument.content}"
                                             linkStyleClass="regularLink"
                                             brokenLinkStyleClass="brokenLink"
@@ -46,23 +54,24 @@
                                             linkBaseFile="#{blogEntry.entryDocument}"
                                             currentAreaNumber="#{currentDirectory.areaNumber}"
                                             enablePlugins="true"/>
-                    </div>
 
-                    <s:div rendered="#{preferences.get('Wiki').showTags and not blogEntry.entryDocument.macroPresent('hideTags') and not empty blogEntry.entryDocument.tags}"
-                           styleClass="documentTags undecoratedLink">
-                        <s:div>
-                            #{messages['lacewiki.label.docDisplay.Tags']}:&#160;
-                            <ui:repeat var="tag" value="#{blogEntry.entryDocument.tagsSplit}">
-                                <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tag}">
-                                    <f:param value="#{tag}" name="tag"/>
-                                </s:link>
-
-                                <h:outputText rendered="#{blogEntry.entryDocument.tagsSplit.indexOf(tag) &lt; blogEntry.entryDocument.tagsSplit.size()-1}"
-                                              value="&#160;|&#160;"/>
-                            </ui:repeat>
+                        <s:div rendered="#{preferences.get('Wiki').showTags and not blogEntry.entryDocument.macroPresent('hideTags') and not empty blogEntry.entryDocument.tags}"
+                               styleClass="documentTags undecoratedLink">
+                            <s:div>
+                                <h:outputText rendered="#{blogEntry.tagsAsList.size()==1}" value="#{messages['blogDirectory.label.Tag']}:&#160;"/>
+                                <h:outputText rendered="#{blogEntry.tagsAsList.size()>1}" value="#{messages['blogDirectory.label.Tags']}:&#160;"/>
+                                <ui:repeat var="tag" value="#{blogEntry.tagsAsList}">
+                                    <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tag}" propagation="none">
+                                        <f:param value="#{tag}" name="tag"/>
+                                    </s:link>
+                                    <h:outputText rendered="#{blogEntry.tagsAsList.indexOf(tag) &lt; blogEntry.tagsAsList.size()-1}"
+                                                  value="&#160;|&#160;"/>
+                                </ui:repeat>
+                            </s:div>
                         </s:div>
-                    </s:div>
 
+                    </div>
+
                     <div class="boxFooter blogEntryFooter">
                         <h:panelGrid styleClass="blogEntryFooterTable" columns="5" cellpadding="0" cellspacing="0" border="0">
                             <s:div styleClass="blogEntryCommentCount undecoratedLink"
@@ -111,36 +120,37 @@
                 <div class="blogEntrySeparator"/>
 
             </c:forEach>
+
         </s:div>
 
-        <h:panelGrid columns="5" rendered="#{blogDirectory.numOfBlogEntries > preferences.get('Blog').pageSize}"
+        <h:panelGrid columns="5" rendered="#{blogDirectory.pager.numOfRecords > blogDirectory.pager.pageSize}"
                      styleClass="blogPagerTable"
                      columnClasses="blogPagerColumn, blogPagerColumn, blogPagerTextColumn, blogPagerColumn, blogPagerColumn, "
                      cellpadding="0" cellspacing="0" border="0">
 
-            <h:outputLink rendered="#{blogDirectory.previousPageAvailable}" target="_top"
+            <h:outputLink rendered="#{blogDirectory.pager.previousPageAvailable}" target="_top"
                           value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}#{blogDirectory.tagUrl}">
                 <div style="width:30px;">
                 <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/page.first.gif" width="13" height="11"/>
                 </div>
             </h:outputLink>
             <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
-                            rendered="#{!blogDirectory.previousPageAvailable}"/>
+                            rendered="#{!blogDirectory.pager.previousPageAvailable}"/>
 
-            <h:outputLink rendered="#{blogDirectory.previousPageAvailable}" target="_top"
-                          value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.previousPage}#{blogDirectory.tagUrl}">
+            <h:outputLink rendered="#{blogDirectory.pager.previousPageAvailable}" target="_top"
+                          value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.pager.previousPage}#{blogDirectory.tagUrl}">
                 <div style="width:30px;">
                 <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/page.previous.gif" width="13" height="11"/>
                 </div>
             </h:outputLink>
             <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
-                            rendered="#{!blogDirectory.previousPageAvailable}"/>
+                            rendered="#{!blogDirectory.pager.previousPageAvailable}"/>
 
             <s:span>
                 <h:outputText value="#{messages['blogDirectory.label.Showing']}
-                                        #{blogDirectory.firstRow} #{messages['blogDirectory.label.To']}
-                                        #{blogDirectory.lastRow} #{messages['blogDirectory.label.Of']}
-                                        #{blogDirectory.numOfBlogEntries} #{messages['blogDirectory.label.BlogEntries']}"/>
+                                        #{blogDirectory.pager.firstRecord} #{messages['blogDirectory.label.To']}
+                                        #{blogDirectory.pager.lastRecord} #{messages['blogDirectory.label.Of']}
+                                        #{blogDirectory.pager.numOfRecords} #{messages['blogDirectory.label.BlogEntries']}"/>
 
                 <h:outputText rendered="#{!empty param.day || !empty param.month || !empty param.year}"
                               value="&#160;#{messages['blogDirectory.label.In']}"/>
@@ -150,23 +160,23 @@
                 <h:outputText rendered="#{!empty param.tag}" value="&#160;#{messages['blogDirectory.label.Tagged']} '#{param.tag}'"/>
             </s:span>
 
-            <h:outputLink rendered="#{blogDirectory.nextPageAvailable}" target="_top"
-                          value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.nextPage}#{blogDirectory.tagUrl}">
+            <h:outputLink rendered="#{blogDirectory.pager.nextPageAvailable}" target="_top"
+                          value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.pager.nextPage}#{blogDirectory.tagUrl}">
                 <div style="width:30px;">
                 <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/page.next.gif" width="13" height="11"/>
                 </div>
             </h:outputLink>
             <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
-                            rendered="#{!blogDirectory.nextPageAvailable}"/>
+                            rendered="#{!blogDirectory.pager.nextPageAvailable}"/>
 
-            <h:outputLink rendered="#{blogDirectory.nextPageAvailable}" target="_top"
-                          value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.lastPage}#{blogDirectory.tagUrl}">
+            <h:outputLink rendered="#{blogDirectory.pager.nextPageAvailable}" target="_top"
+                          value="#{wiki:renderURL(currentDocument)}#{blogDirectory.dateUrl}/Page/#{blogDirectory.pager.lastPage}#{blogDirectory.tagUrl}">
                 <div style="width:30px;">
                 <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/page.last.gif" width="13" height="11"/>
                 </div>
             </h:outputLink>
             <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/blank.gif" width="13" height="11"
-                            rendered="#{!blogDirectory.nextPageAvailable}"/>
+                            rendered="#{!blogDirectory.pager.nextPageAvailable}"/>
 
         </h:panelGrid>
 

Modified: trunk/examples/wiki/view/plugins/blogRecentEntries/plugin.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/blogRecentEntries/plugin.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/blogRecentEntries/plugin.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -12,15 +12,16 @@
 
         <s:div styleClass="blogRecentEntries">
 
-            <s:div styleClass="boxHeader" rendered="#{not preferences.get('Blog').recentEntriesSubscribeIcon}">
+            <s:div styleClass="boxHeader" rendered="#{not preferences.get('Blog', currentMacro).recentEntriesSubscribeIcon}">
                 <h:outputText value="#{messages['blogRecentEntries.label.RecentEntries']}"/>
             </s:div>
 
-            <h:panelGrid rendered="#{preferences.get('Blog').recentEntriesSubscribeIcon}"
+            <h:panelGrid rendered="#{preferences.get('Blog', currentMacro).recentEntriesSubscribeIcon}"
                          columns="2" cellpadding="0" cellspacing="0" border="0"
                          styleClass="boxHeader fullWidth">
 
-                <h:panelGrid rendered="#{not empty currentDirectory.feed}" columns="2" cellpadding="0" cellspacing="0" border="0">
+                <h:panelGrid styleClass="undecoratedLink smallFont" rendered="#{not empty currentDirectory.feed}" columns="2"
+                             cellpadding="2" cellspacing="0" border="0">
                     <h:outputLink
                             target="_top"
                             value="#{wiki:renderFeedURL(currentDirectory.feed, null, null)}">
@@ -43,14 +44,14 @@
                          columnClasses="defaultColumn"
                          cellpadding="0" cellspacing="0" border="0">
                 <h:column>
-                    <div class="blogRecentEntriesDay">
+                    <div class="blogRecentEntriesDay smallFont">
                         <h:outputText value="#{dayMap.key}">
                             <f:convertDateTime pattern="dd. MMM yyyy" timeZone="#{preferences.get('Wiki').timeZone}"/>
                         </h:outputText>
                     </div>
 
                     <h:dataTable value="#{dayMap.value}" var="be"
-                                 columnClasses="blogRecentEntriesItem"
+                                 columnClasses="blogRecentEntriesItem smallFont"
                                  cellpadding="0" cellspacing="0" border="0">
                         <h:column>
                             <h:outputLink styleClass="blogRecentEntriesItemLink" target="_top" value="#{wiki:renderURL(be.entryDocument)}">

Modified: trunk/examples/wiki/view/plugins/forumList/forumForm.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/forumList/forumForm.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/forumList/forumForm.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,7 +6,6 @@
        xmlns:f="http://java.sun.com/jsf/core"
        xmlns:h="http://java.sun.com/jsf/html"
        xmlns:a="https://ajax4jsf.dev.java.net/ajax"
-       xmlns:j4j="http://javascript4jsf.dev.java.net/"
        xmlns:wiki="http://jboss.com/products/seam/wiki">
 
 <s:fragment rendered="#{forumHome.showForm}">

Modified: trunk/examples/wiki/view/plugins/forumList/forumListTable.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/forumList/forumListTable.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/forumList/forumListTable.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -22,7 +22,7 @@
                             fivePercentColumn rightBorder bottomBorder alignCenter smallFont,
                             tenPercentColumn rightBorder bottomBorder alignCenter smallFont,
                             tenPercentColumn rightBorder bottomBorder alignCenter smallFont"
-             rowClasses="rowOdd"
+             rowClasses="forumListRow"
              cellpadding="0" cellspacing="0" border="0">
 
     <h:column>

Modified: trunk/examples/wiki/view/plugins/forumPosting/forumPostingHeader.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/forumPosting/forumPostingHeader.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/forumPosting/forumPostingHeader.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -64,7 +64,7 @@
     </h:panelGrid>
 
     <h:outputText escape="false"
-                  value="&lt;div class='forumPostingDocumentWrapper #{empty commentQuery.comments or not currentDocument.enableComments? 'noComments' : ''}'>"/>
+                  value="&lt;div class='box forumPostingDocumentWrapper #{empty commentQuery.comments or not currentDocument.enableComments? 'noComments' : ''}'>"/>
 
         <h:panelGrid columns="4" styleClass="commentHeader"
                      columnClasses="commentSubjectIcon, commentSubject, commentAuthorInfo smallFont, commentAuthorPortrait"

Modified: trunk/examples/wiki/view/plugins/forumReplies/plugin.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/forumReplies/plugin.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/forumReplies/plugin.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -30,14 +30,14 @@
 
             <h:panelGroup rendered="#{not replyHome.showForm and replyHome.isPersistAllowed(null,null)}">
 
-                <s:link tabindex="1"
+                <s:link tabindex="1" propagation="none"
                         action="#{replyHome.replyToDocument()}"
                         accesskey="#{messages['forum.button.Reply.accesskey']}"
                         styleClass="buttonNonpersistent">
                     <h:outputText styleClass="buttonLabel" escape="false" value="#{messages['forum.button.Reply']}"/>
                  </s:link>
 
-                <s:link tabindex="1"
+                <s:link tabindex="1" propagation="none"
                         action="#{replyHome.quoteDocument()}"
                         styleClass="buttonNonpersistent"
                         accesskey="#{messages['forum.button.Quote.accesskey']}">
@@ -51,7 +51,7 @@
     <!-- The forumPostingDocumentWrapper <div> is closed here! -->
     <h:outputText escape="false" value="&lt;/div>"/>
 
-    <s:span id="forumRepliesContainer">
+    <s:div id="forumRepliesContainer">
 
         <s:fragment rendered="#{currentDocument.enableComments}">
 
@@ -115,14 +115,14 @@
 
                             <s:fragment rendered="#{not replyHome.showForm and replyHome.isPersistAllowed(null,null)}">
 
-                                <s:link tabindex="102"
+                                <s:link tabindex="102" propagation="none"
                                         action="#{replyHome.replyTo()}"
                                         styleClass="buttonNonpersistent">
                                     <f:param name="parentCommentId" value="#{c.id}"/>
                                     <h:outputText styleClass="buttonLabel" value="#{messages['lacewiki.button.commentsDisplay.ReplyTo']}"/>
                                 </s:link>
 
-                                <s:link tabindex="102"
+                                <s:link tabindex="102" propagation="none"
                                         action="#{replyHome.quote()}"
                                         styleClass="buttonNonpersistent">
                                     <f:param name="parentCommentId" value="#{c.id}"/>
@@ -155,6 +155,6 @@
 
         </s:fragment>
 
-    </s:span>
+    </s:div>
 
 </wiki:plugin>
\ No newline at end of file

Modified: trunk/examples/wiki/view/plugins/tags/plugin.xhtml
===================================================================
--- trunk/examples/wiki/view/plugins/tags/plugin.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/plugins/tags/plugin.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -23,7 +23,7 @@
                         <h:outputLink value="#{wiki:renderURL(currentDocument)}/Tag/#{wiki:encodeURL(tagCount.tag)}">#{tagCount.tag}</h:outputLink>
                     </s:span>
                     <s:span rendered="#{param.tag != tagCount.tag and not preferences.get('Tags', currentMacro).linkToCurrentDocument}" styleClass="undecoratedLink">
-                        <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tagCount.tag}">
+                        <s:link view="/tagDisplay_#{skin}.xhtml" value="#{tagCount.tag}" propagation="none">
                             <f:param value="#{tagCount.tag}" name="tag"/>
                         </s:link>
                     </s:span>

Modified: trunk/examples/wiki/view/search_d.xhtml
===================================================================
--- trunk/examples/wiki/view/search_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/search_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,7 +6,6 @@
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:a="https://ajax4jsf.dev.java.net/ajax"
-                xmlns:j4j="http://javascript4jsf.dev.java.net/"
                 xmlns:wiki="http://jboss.com/products/seam/wiki"
                 template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
 

Modified: trunk/examples/wiki/view/tagDisplay_d.xhtml
===================================================================
--- trunk/examples/wiki/view/tagDisplay_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/tagDisplay_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -51,7 +51,8 @@
             </s:span>
 
             <s:span rendered="#{file.isInstance('WikiUpload') and s:hasPermission('Node', 'edit', file)}">
-                <s:link id="editFile" value="#{wiki:truncateString(file.name, 30, '...')}" tabindex="2" view="/uploadEdit_#{skin}.xhtml">
+                <s:link id="editFile" value="#{wiki:truncateString(file.name, 30, '...')}" propagation="none"
+                        tabindex="2" view="/uploadEdit_#{skin}.xhtml">
                     <f:param name="uploadId" value="#{file.id}"/>
                     <f:param name="parentDirectoryId" value="#{file.parent.id}"/>
                 </s:link>
@@ -71,7 +72,7 @@
             </f:facet>
             <h:graphicImage value="/themes/#{preferences.get('Wiki').themeName}/img/icon.dir.gif"
                             width="18" height="20" style="vertical-align: middle; margin-right: 5px;"/>
-            <s:link value="#{wiki:truncateString(file.parent.name, 20, '...')}"
+            <s:link value="#{wiki:truncateString(file.parent.name, 20, '...')}" propagation="none"
                     view="/dirDisplay_#{skin}.xhtml"
                     rendered="#{s:hasPermission('Node','read',file.parent)}" tabindex="1">
                 <f:param name="directoryId" value="#{file.parent.id}"/>

Modified: trunk/examples/wiki/view/themes/default/css/blogArchive.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/blogArchive.css	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/default/css/blogArchive.css	2008-02-03 15:01:48 UTC (rev 7347)
@@ -7,14 +7,3 @@
     color: #000;
     font-weight: normal;
 }
-
-.blogArchiveFooter {
-    background: white url(#{themePath}/img/th.bg.gif) 0 0 repeat-x;
-    padding-top: 5px;
-    padding-bottom: 10px;
-    padding-left: 15px;
-    padding-right: 15px;
-    font-weight: normal;
-    color: #962325;
-	text-decoration: none;
-}

Modified: trunk/examples/wiki/view/themes/default/css/blogDirectory.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/blogDirectory.css	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/default/css/blogDirectory.css	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,49 +1,34 @@
 .blogEntryHeader {
-    border-top: 1px solid #87786e;
-    border-left: 1px solid #87786e;
-    border-right: 1px solid #87786e;
-    background: #fff url(#{themePath}/img/th.bg.inverse.gif) 0 0 repeat-x;
-    padding-left: 15px;
-    padding-right: 15px;
-    padding-top: 5px;
-    padding-bottom: 5px;
 }
 
-.blogEntryHeader div {
+.blogEntryHeader .title {
+    text-align: left;
+    line-height: 200%;
+    font-size: 115%;
+}
+
+.blogEntryHeader .dateAuthor {
     text-align: right;
     white-space: nowrap;
     font-weight: normal;
-    padding-left: 15px;
-    padding-right: 15px;
     line-height: 100%;
 }
 
-.blogEntryCreatedOn {}
-.blogEntryCreatedOnText {}
-.blogEntryCreatedBy {}
-.blogEntryCreatedByLink {
-    color: #962325;
-}
-
 .blogEntryContent {
     padding-left: 15px;
     padding-right: 15px;
     line-height: 150%;
-    text-align:justify;
+    text-align: justify;
 }
 
+.blogEntryContent .wikiHeadline1 a,
+.blogEntryContent .wikiHeadline2 a,
+.blogEntryContent .wikiHeadline3 a,
+.blogEntryContent .wikiHeadline4 a {
+    color: black;
+}
+
 .blogEntryFooter {
-    background: white url(#{themePath}/img/th.bg.gif) 0 0 repeat-x;
-    border-bottom: 1px solid #87786e;
-    border-left: 1px solid #87786e;
-    border-right: 1px solid #87786e;
-    padding-top: 10px;
-    padding-bottom: 5px;
-    padding-left: 15px;
-    padding-right: 15px;
-    font-weight: normal;
-    color: #962325;
-	text-decoration: none;
 }
 
 .blogEntryFooterTable {}

Deleted: trunk/examples/wiki/view/themes/default/css/languageSelector.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/languageSelector.css	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/default/css/languageSelector.css	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,15 +0,0 @@
-#languageSelector {
-	text-align: right;
-	font-weight: bold;
-}
-
-#languageSelector .languageSelectorLink {
-	color: #C7B299;
-	text-decoration: none;
-	padding-left: 2px;
-	padding-right: 2px;
-}
-
-#languageSelector .languageSelectorSeparator {
-
-}
\ No newline at end of file

Modified: trunk/examples/wiki/view/themes/default/css/template.css
===================================================================
--- trunk/examples/wiki/view/themes/default/css/template.css	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/default/css/template.css	2008-02-03 15:01:48 UTC (rev 7347)
@@ -316,15 +316,16 @@
     padding-right: 10px;
 }
 
+.attentionMessage {
+	color: #600;
+}
+
 .attentionImage {
     vertical-align: text-top;
     padding-left: 10px;
     padding-right: 10px;
 }
 
-.attentionMessage {
-	color: #600;
-}
 
 .messageBox .attentionImage {
     vertical-align: text-top;
@@ -1218,15 +1219,6 @@
     font-size: 115%;
 }
 
-.boxHeader a {
-    color: #962325;
-    line-height: 100%;
-    margin-left: 5px;
-    font-size: 70%;
-}
-
-.boxHeader a:hover {color: #666}
-
 .boxContent {
     background-color: #fff;
     padding: 10px;
@@ -1347,6 +1339,7 @@
     margin-top: 20px;
 }
 
+.userInfoEmail {}
 
 .userInfoDetails {
     vertical-align: top;

Modified: trunk/examples/wiki/view/themes/default/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/default/template.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/default/template.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -268,7 +268,7 @@
             jQuery(".box").removeClass("box").addClass("boxShadowed");
         }
 
-        jQuery(function() {
+        function initPage() {
             $.contextMenu.defaults({
                 shadow: false,
                 menuStyle: {
@@ -286,6 +286,10 @@
             });
 
             wrapBoxes();
+        }
+
+        jQuery(function() {
+            initPage();
         });
     </script>
 

Modified: trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/blogDirectory.css	2008-02-03 15:01:48 UTC (rev 7347)
@@ -1,39 +1,38 @@
-.blogEntryContainer {
-    border: 1px solid #d3d2d1;
-}
 
-.blogEntryContainer .boxFooter {
-    border: 0;
+.blogEntryHeader {
 }
 
-.blogEntryHeader {
-    background: #fff url(#{themePath}/img/th.bg.inverse.gif) 0 0 repeat-x;
-    padding-left: 10px;
-    padding-right: 10px;
-    padding-top: 2px;
-    padding-bottom: 8px;
+.blogEntryHeader .title {
+    text-align: left;
+    line-height: 200%;
+    font-size: 115%;
 }
 
-.blogEntryHeader div {
+.blogEntryHeader .dateAuthor {
     text-align: right;
     white-space: nowrap;
     font-weight: normal;
     line-height: 100%;
-    padding-top: 3px;
 }
 
-.blogEntryCreatedOn {}
-.blogEntryCreatedOnText {}
-.blogEntryCreatedBy {}
-.blogEntryCreatedByLink {
-}
-
 .blogEntryContent {
-    padding-left: 10px;
-    padding-right: 10px;
+    padding-left: 15px;
+    padding-right: 15px;
     line-height: 150%;
+    text-align: justify;
 }
 
+.blogEntryContent .wikiPara {
+    margin-top: 0;
+}
+
+.blogEntryContent .wikiHeadline1 a,
+.blogEntryContent .wikiHeadline2 a,
+.blogEntryContent .wikiHeadline3 a,
+.blogEntryContent .wikiHeadline4 a {
+    color: black;
+}
+
 .blogEntryFooter {
 }
 
@@ -86,6 +85,5 @@
 }
 
 .documentTags {
-    margin-left: 10px;
-    margin-right: 10px;
+    margin-top: 10px;
 }
\ No newline at end of file

Modified: trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/sfwkorg/css/sfwk.css	2008-02-03 15:01:48 UTC (rev 7347)
@@ -664,7 +664,6 @@
     width: 100%;
     padding: 0;
     margin: 0;
-    border-top: 1px solid #d3d2d1;
     border-left: 1px solid #d3d2d1;
     border-right: 1px solid #d3d2d1;
     background: #ede8db url(../img/th.bg.gif) 0 0 repeat-x;
@@ -677,6 +676,14 @@
     width: 60%;
 }
 
+.pagerTop {
+    border-top: 1px solid #d3d2d1;
+}
+
+.pagerBottom {
+    border-bottom: 1px solid #d3d2d1;
+}
+
 /* Comments
 -----------------------------------------------*/
 
@@ -981,16 +988,6 @@
     font-size: 115%;
 }
 
-.boxHeader a {
-    color: #576c74;
-    line-height: 100%;
-    margin-left: 5px;
-    font-size: 70%;
-}
-
-.boxHeader a:hover {color: #000}
-.boxHeader a:visited {color: #576c74}
-
 .boxContent {
     background-color: #fff;
     border-left: 1px solid #d3d2d1;
@@ -1302,6 +1299,7 @@
     margin-top: 20px;
 }
 
+.userInfoEmail {}
 
 .userInfoDetails {
     vertical-align: top;

Added: trunk/examples/wiki/view/themes/sfwkorg/img/icon.check.gif
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/view/themes/sfwkorg/img/icon.check.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/examples/wiki/view/themes/sfwkorg/img/icon.jira.gif
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/view/themes/sfwkorg/img/icon.jira.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/examples/wiki/view/themes/sfwkorg/img/icon.log.gif
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/view/themes/sfwkorg/img/icon.log.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/examples/wiki/view/themes/sfwkorg/img/icon.news.gif
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/view/themes/sfwkorg/img/icon.news.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: trunk/examples/wiki/view/themes/sfwkorg/img/icon.updates.gif
===================================================================
(Binary files differ)


Property changes on: trunk/examples/wiki/view/themes/sfwkorg/img/icon.updates.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: trunk/examples/wiki/view/themes/sfwkorg/template.xhtml
===================================================================
--- trunk/examples/wiki/view/themes/sfwkorg/template.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/themes/sfwkorg/template.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -263,11 +263,12 @@
             // Noop for this skin
         }
 
-        jQuery(function() {
+        function initPage() {
             $.contextMenu.defaults({
                 shadow: false,
                 menuStyle: {
-                    padding: '0'
+                    padding: '0',
+                    width: '200px'
                 },
                 itemStyle: {
                     border: 'none',
@@ -279,6 +280,11 @@
                     padding: '4px'
                 }
             });
+            wrapBoxes();
+        }
+
+        jQuery(function() {
+            initPage();
         });
 
     </script>

Modified: trunk/examples/wiki/view/uploadCreate_d.xhtml
===================================================================
--- trunk/examples/wiki/view/uploadCreate_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/uploadCreate_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,7 +6,6 @@
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:wiki="http://jboss.com/products/seam/wiki"
-                xmlns:j4j="http://javascript4jsf.dev.java.net/"
                 xmlns:a="https://ajax4jsf.dev.java.net/ajax"
                 template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
 

Modified: trunk/examples/wiki/view/userHome_d.xhtml
===================================================================
--- trunk/examples/wiki/view/userHome_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/userHome_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,7 +6,6 @@
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:a="https://ajax4jsf.dev.java.net/ajax"
-                xmlns:j4j="http://javascript4jsf.dev.java.net/"
                 xmlns:wiki="http://jboss.com/products/seam/wiki"
                 template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
 

Modified: trunk/examples/wiki/view/userInfo_d.xhtml
===================================================================
--- trunk/examples/wiki/view/userInfo_d.xhtml	2008-02-03 14:18:57 UTC (rev 7346)
+++ trunk/examples/wiki/view/userInfo_d.xhtml	2008-02-03 15:01:48 UTC (rev 7347)
@@ -6,7 +6,6 @@
                 xmlns:f="http://java.sun.com/jsf/core"
                 xmlns:h="http://java.sun.com/jsf/html"
                 xmlns:a="https://ajax4jsf.dev.java.net/ajax"
-                xmlns:j4j="http://javascript4jsf.dev.java.net/"
                 xmlns:wiki="http://jboss.com/products/seam/wiki"
                 template="themes/#{preferences.get('Wiki').themeName}/template.xhtml">
 
@@ -35,7 +34,7 @@
 
         <s:div>
 
-            <s:div styleClass="form bottomBorder">
+            <s:div styleClass="box form bottomBorder">
                 <s:div styleClass="formHead">
                     <h:outputText value="#{messages['lacewiki.label.userInfo.UserInfo']} '#{userHome.instance.username}'"/>
                 </s:div>




More information about the seam-commits mailing list