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);