You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@rave.apache.org by ca...@apache.org on 2012/08/27 17:55:31 UTC

svn commit: r1377722 - in /rave/trunk: rave-portal-resources/src/main/webapp/static/script/ rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/ rave-providers/rave-opensocial-pr...

Author: carlucci
Date: Mon Aug 27 15:55:31 2012
New Revision: 1377722

URL: http://svn.apache.org/viewvc?rev=1377722&view=rev
Log:
RAVE-776: Don't render Widgets on hidden sub-pages / tabs upon initial page load

Modified:
    rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_layout.js
    rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js
    rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_wookie.js
    rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java
    rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
    rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java
    rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java

Modified: rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_layout.js
URL: http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_layout.js?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_layout.js (original)
+++ rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_layout.js Mon Aug 27 15:55:31 2012
@@ -769,6 +769,27 @@ rave.layout = rave.layout || (function()
         return $("#currentPageId").val();
     }
 
+    /**
+     * Determines if the widget should be rendered as part of the initial page view.  This can be used to help optimize
+     * page loads as widgets located on non-active sub pages will not be rendered initially.  The function will return
+     * false if one of the following criteria is met, and true otherwise:
+     *
+     * 1) the widget is on a top level page (not a sub page)
+     * 2) the widget is on a sub page that is currently requested in the URL via the hash tag
+     *    ie /app//person/canoniocal#My%20Activity
+     * 3) the widget is on the default sub page and the page request URL doesn't contain a sub-page hash tag
+     *    ie /app/person/canonical
+     *
+     * @return boolean
+     */
+    function isWidgetOnHiddenTab(widget) {
+        var hash = decodeURIComponent(location.hash);
+        var subPage = widget.subPage;
+        return !(subPage.id === null ||
+            ("#" + subPage.name) === hash ||
+            (hash === "" && subPage.isDefault));
+    }
+
    /***
     * initializes the rave.layout namespace code
     */
@@ -792,6 +813,7 @@ rave.layout = rave.layout || (function()
         movePage: movePage,
         closePageDialog: closePageDialog,
         moveWidgetToPage: moveWidgetToPage,
-        searchHandler : searchHandler
+        searchHandler : searchHandler,
+        isWidgetOnHiddenTab: isWidgetOnHiddenTab
     };
 })();

Modified: rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js
URL: http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js (original)
+++ rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_opensocial.js Mon Aug 27 15:55:31 2012
@@ -195,8 +195,11 @@ rave.opensocial = rave.opensocial || (fu
             }
         }
 
-        // if the gadget is not collapsed, render it
-        renderGadgetViewIfNotCollapsed(rave.opensocial.VIEW_NAMES.HOME, gadget);
+        // if the gadget is on a top level page, or an active sub page tab, render it
+        if (!rave.layout.isWidgetOnHiddenTab(gadget)) {
+            // if the gadget is not collapsed, render it
+            renderGadgetViewIfNotCollapsed(rave.opensocial.VIEW_NAMES.HOME, gadget);
+        }
     }
 
     /**

Modified: rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_wookie.js
URL: http://svn.apache.org/viewvc/rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_wookie.js?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_wookie.js (original)
+++ rave/trunk/rave-portal-resources/src/main/webapp/static/script/rave_wookie.js Mon Aug 27 15:55:31 2012
@@ -94,9 +94,13 @@ rave.wookie = rave.wookie || (function()
                 $(ooacontainer.getIframe()).hide();
             }
         };
-        // if in the collapsed state, hide the layer
-        if (widget.collapsed){
-            $(ooacontainer.getIframe()).hide();
+
+        // if the widget is on a top level page, or an active sub page tab, render it
+        if (!rave.layout.isWidgetOnHiddenTab(widget)) {
+            // if in the collapsed state, hide the layer
+            if (widget.collapsed){
+                $(ooacontainer.getIframe()).hide();
+            }
         }
     }
 

Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/main/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRenderer.java Mon Aug 27 15:55:31 2012
@@ -20,6 +20,8 @@
 package org.apache.rave.provider.opensocial.web.renderer;
 
 import org.apache.rave.exception.NotSupportedException;
+import org.apache.rave.portal.model.Page;
+import org.apache.rave.portal.model.PageType;
 import org.apache.rave.portal.model.RegionWidget;
 import org.apache.rave.portal.model.RegionWidgetPreference;
 import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
@@ -73,7 +75,9 @@ public class OpenSocialWidgetRenderer im
             " collapsed: %8$s, " +
             " widgetId: %9$s," +
             " locked: %10$s," +
-            " hideChrome: %11$s});</script>";
+            " hideChrome: %11$s," +
+            " subPage: {id: %12$s, name: '%13$s', isDefault: %14$s}" +
+            "});</script>";
     private static final String MARKUP = "<!-- RegionWidget %1$s placeholder -->";
 
     @Override
@@ -117,6 +121,20 @@ public class OpenSocialWidgetRenderer im
             }
         }
 
+        // get attributes about the sub page this regionWidget is on.  This is needed to assist the client in
+        // determining which gadgets are on visible tabs/sub pages initially to make widget rendering more efficient
+        Long pageId = null;
+        String pageName = "";
+        boolean isDefault = false;
+        Page page =  item.getRegion().getPage();
+        if (PageType.SUB_PAGE.equals(page.getPageType())) {
+            pageId = page.getId();
+            pageName = page.getName();
+            // check to see if this regionWidget is on the first sub page, which will be the default
+            // subpage rendered if the user doesn't specify which subpage via the URL hash
+            isDefault = isDefaultSubPage(page);
+        }
+
         return String.format(SCRIPT_BLOCK,
                 item.getRegion().getId(),
                 Constants.WIDGET_TYPE,
@@ -128,6 +146,14 @@ public class OpenSocialWidgetRenderer im
                 item.isCollapsed(),
                 item.getWidget().getId(),
                 item.isLocked(),
-                item.isHideChrome());
+                item.isHideChrome(),
+                pageId,
+                pageName,
+                isDefault
+                );
+    }
+
+    private boolean isDefaultSubPage(Page subPage) {
+        return subPage.getParentPage().getSubPages().get(0).getId().equals(subPage.getId());
     }
 }

Modified: rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java (original)
+++ rave/trunk/rave-providers/rave-opensocial-provider/rave-opensocial-client/src/test/java/org/apache/rave/provider/opensocial/web/renderer/OpenSocialWidgetRendererTest.java Mon Aug 27 15:55:31 2012
@@ -20,13 +20,8 @@
 package org.apache.rave.provider.opensocial.web.renderer;
 
 import org.apache.rave.exception.NotSupportedException;
-import org.apache.rave.portal.model.Region;
-import org.apache.rave.portal.model.RegionWidget;
-import org.apache.rave.portal.model.RegionWidgetPreference;
-import org.apache.rave.portal.model.impl.RegionImpl;
-import org.apache.rave.portal.model.impl.RegionWidgetImpl;
-import org.apache.rave.portal.model.impl.RegionWidgetPreferenceImpl;
-import org.apache.rave.portal.model.impl.WidgetImpl;
+import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.impl.*;
 import org.apache.rave.portal.web.renderer.RenderScope;
 import org.apache.rave.portal.web.renderer.Renderer;
 import org.apache.rave.portal.web.renderer.ScriptLocation;
@@ -39,6 +34,7 @@ import org.json.JSONException;
 import org.junit.Before;
 import org.junit.Test;
 
+import java.util.ArrayList;
 import java.util.Arrays;
 
 import static org.easymock.EasyMock.*;
@@ -79,15 +75,28 @@ public class OpenSocialWidgetRendererTes
         final long WIDGET_ID = 999L;
         final long REGION_WIDGET_ID = 12345L;
         final long REGION_ID = 8675309L;
+        final long VALID_SUBPAGE_ID = 778899L;
+        final String VALID_SUBPAGE_NAME = "My Activity";
+        final boolean VALID_IS_DEFAULT_SUBPAGE = true;
 
         expect(openSocialService.getGadgetMetadata(VALID_GADGET_URL)).andReturn(VALID_METADATA);
         replay(openSocialService);
 
+        Page page = new PageImpl();
+        page.setSubPages(new ArrayList<Page>());
+        Page subPage = new PageImpl();
+        subPage.setId(VALID_SUBPAGE_ID);
+        subPage.setName(VALID_SUBPAGE_NAME);
+        subPage.setParentPage(page);
+        subPage.setPageType(PageType.SUB_PAGE);
+        page.getSubPages().add(subPage);
+
         WidgetImpl w = new WidgetImpl();
         w.setId(WIDGET_ID);
         w.setType(Constants.WIDGET_TYPE);
         w.setUrl(VALID_GADGET_URL);
         Region region = new RegionImpl(REGION_ID);
+        region.setPage(subPage);
         RegionWidget rw = new RegionWidgetImpl();
         rw.setId(REGION_WIDGET_ID);
         rw.setCollapsed(VALID_COLLAPSED);
@@ -109,7 +118,8 @@ public class OpenSocialWidgetRendererTes
             " collapsed: " + VALID_COLLAPSED + ", " +
             " widgetId: " + WIDGET_ID + "," +
             " locked: " + VALID_LOCKED + "," +
-            " hideChrome: " + VALID_HIDE_CHROME +
+            " hideChrome: " + VALID_HIDE_CHROME + "," +
+            " subPage: {id: " + VALID_SUBPAGE_ID + ", name: '" + VALID_SUBPAGE_NAME + "', isDefault: " + VALID_IS_DEFAULT_SUBPAGE + "}" +
             "});</script>";
 
         expect(securityTokenService.getEncryptedSecurityToken(rw)).andReturn(VALID_SECURITY_TOKEN);
@@ -128,9 +138,13 @@ public class OpenSocialWidgetRendererTes
 
     @Test
     public void render_null() {
+        Page page = new PageImpl();
+        page.setPageType(PageType.USER);
+
         WidgetImpl w = new WidgetImpl();
         w.setType(Constants.WIDGET_TYPE);
         Region region = new RegionImpl(1L);
+        region.setPage(page);
         RegionWidget rw = new RegionWidgetImpl();
         rw.setWidget(w);
         rw.setRegion(region);
@@ -144,7 +158,10 @@ public class OpenSocialWidgetRendererTes
             " userPrefs: {}," +
             " collapsed: false, " +
             " widgetId: null," +
-            " locked: false, hideChrome: false});</script>";
+            " locked: false," +
+            " hideChrome: false," +
+            " subPage: {id: null, name: '', isDefault: false}" +
+            "});</script>";
 
         scriptManager.registerScriptBlock(OpenSocialWidgetRenderer.REGISTER_WIDGET_KEY, markup, ScriptLocation.AFTER_RAVE, RenderScope.CURRENT_REQUEST, null);
         expectLastCall();

Modified: rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java (original)
+++ rave/trunk/rave-providers/rave-w3c-provider/src/main/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRenderer.java Mon Aug 27 15:55:31 2012
@@ -20,10 +20,7 @@
 package org.apache.rave.provider.w3c.web.renderer;
 
 import org.apache.rave.exception.NotSupportedException;
-import org.apache.rave.portal.model.RegionWidget;
-import org.apache.rave.portal.model.RegionWidgetPreference;
-import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.Widget;
+import org.apache.rave.portal.model.*;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.WidgetProviderService;
 import org.apache.rave.portal.web.renderer.RegionWidgetRenderer;
@@ -75,7 +72,9 @@ public class W3cWidgetRenderer implement
         " collapsed: %7$s, " +
         " widgetId: %8$s, " +
         " locked: %9$s, " +
-        " hideChrome: %10$s});</script>";
+        " hideChrome: %10$s, " +
+        " subPage: {id: %11$s, name: '%12$s', isDefault: %13$s}" +
+        "});</script>";
     private static final String MARKUP = "<!-- RegionWidget %1$s placeholder -->";
 
 
@@ -150,6 +149,20 @@ public class W3cWidgetRenderer implement
         if (contextualizedWidget.getHeight() > 0)
         	height = String.valueOf(contextualizedWidget.getHeight()) + "px";
 
+        // get attributes about the sub page this regionWidget is on.  This is needed to assist the client in
+        // determining which gadgets are on visible tabs/sub pages initially to make widget rendering more efficient
+        Long pageId = null;
+        String pageName = "";
+        boolean isDefault = false;
+        Page page =  item.getRegion().getPage();
+        if (PageType.SUB_PAGE.equals(page.getPageType())) {
+            pageId = page.getId();
+            pageName = page.getName();
+            // check to see if this regionWidget is on the first sub page, which will be the default
+            // subpage rendered if the user doesn't specify which subpage via the URL hash
+            isDefault = isDefaultSubPage(page);
+        }
+
         //
         // Construct and return script block
         //
@@ -163,6 +176,13 @@ public class W3cWidgetRenderer implement
                 item.isCollapsed(),
                 item.getWidget().getId(),
                 item.isLocked(),
-                item.isHideChrome());
+                item.isHideChrome(),
+                pageId,
+                pageName,
+                isDefault);
+    }
+
+    private boolean isDefaultSubPage(Page subPage) {
+        return subPage.getParentPage().getSubPages().get(0).getId().equals(subPage.getId());
     }
 }

Modified: rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java
URL: http://svn.apache.org/viewvc/rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java?rev=1377722&r1=1377721&r2=1377722&view=diff
==============================================================================
--- rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java (original)
+++ rave/trunk/rave-providers/rave-w3c-provider/src/test/java/org/apache/rave/provider/w3c/web/renderer/W3cWidgetRendererTest.java Mon Aug 27 15:55:31 2012
@@ -20,14 +20,8 @@
 package org.apache.rave.provider.w3c.web.renderer;
 
 import org.apache.rave.exception.NotSupportedException;
-import org.apache.rave.portal.model.Region;
-import org.apache.rave.portal.model.RegionWidget;
-import org.apache.rave.portal.model.User;
-import org.apache.rave.portal.model.Widget;
-import org.apache.rave.portal.model.impl.RegionImpl;
-import org.apache.rave.portal.model.impl.RegionWidgetImpl;
-import org.apache.rave.portal.model.impl.UserImpl;
-import org.apache.rave.portal.model.impl.WidgetImpl;
+import org.apache.rave.portal.model.*;
+import org.apache.rave.portal.model.impl.*;
 import org.apache.rave.portal.service.UserService;
 import org.apache.rave.portal.service.WidgetProviderService;
 import org.apache.rave.portal.web.renderer.Renderer;
@@ -38,6 +32,8 @@ import org.apache.rave.provider.w3c.serv
 import org.junit.Before;
 import org.junit.Test;
 
+import java.util.ArrayList;
+
 import static org.easymock.EasyMock.*;
 import static org.hamcrest.CoreMatchers.equalTo;
 import static org.hamcrest.CoreMatchers.is;
@@ -75,15 +71,28 @@ public class W3cWidgetRendererTest {
     public void render_valid() {
         final long REGION_ID = 222L;
         final long REGION_WIDGET_ID = 444L;
+        final long VALID_SUBPAGE_ID = 778899L;
+        final String VALID_SUBPAGE_NAME = "My Activity";
+        final boolean VALID_IS_DEFAULT_SUBPAGE = true;
 
         User user = new UserImpl(9999L, "testUser");
         expect(userService.getAuthenticatedUser()).andReturn(user);
         replay(userService);
-        
+
+        Page page = new PageImpl();
+        page.setSubPages(new ArrayList<Page>());
+        Page subPage = new PageImpl();
+        subPage.setId(VALID_SUBPAGE_ID);
+        subPage.setName(VALID_SUBPAGE_NAME);
+        subPage.setParentPage(page);
+        subPage.setPageType(PageType.SUB_PAGE);
+        page.getSubPages().add(subPage);
+
         W3CWidget w = new W3CWidget();
         w.setType(Constants.WIDGET_TYPE);
         w.setUrl("http://example.com/widgets/1");
         Region region = new RegionImpl(REGION_ID);
+        region.setPage(subPage);
         RegionWidget rw = new RegionWidgetImpl();
         rw.setId(REGION_WIDGET_ID);
         rw.setWidget(w);