You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@deltaspike.apache.org by ta...@apache.org on 2015/08/08 14:27:44 UTC
deltaspike git commit: DELTASPIKE-968 implemented storeWindowTree for
buttons and ajax requests
Repository: deltaspike
Updated Branches:
refs/heads/master 3b355587a -> 97cc3e300
DELTASPIKE-968 implemented storeWindowTree for buttons and ajax requests
Project: http://git-wip-us.apache.org/repos/asf/deltaspike/repo
Commit: http://git-wip-us.apache.org/repos/asf/deltaspike/commit/97cc3e30
Tree: http://git-wip-us.apache.org/repos/asf/deltaspike/tree/97cc3e30
Diff: http://git-wip-us.apache.org/repos/asf/deltaspike/diff/97cc3e30
Branch: refs/heads/master
Commit: 97cc3e30067e46df16e79fdb7383c1ea0b2d41bd
Parents: 3b35558
Author: Thomas Andraschko <ta...@apache.org>
Authored: Sat Aug 8 14:27:34 2015 +0200
Committer: Thomas Andraschko <ta...@apache.org>
Committed: Sat Aug 8 14:27:34 2015 +0200
----------------------------------------------------------------------
.../spi/scope/window/ClientWindowConfig.java | 25 +++++++--
.../scope/window/DefaultClientWindowConfig.java | 16 +++++-
.../component/window/WindowIdHtmlRenderer.java | 9 ++-
.../resources/deltaspike/windowhandler.js | 58 +++++++++++++++++++-
4 files changed, 97 insertions(+), 11 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/97cc3e30/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindowConfig.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindowConfig.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindowConfig.java
index 11ea056..65ef633 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindowConfig.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/ClientWindowConfig.java
@@ -88,14 +88,31 @@ public interface ClientWindowConfig extends Serializable
String getClientWindowHtml();
/**
- * @return whether localStorage is used in the browser to store the HTML content between client redirects.
- * Currently it's only used by {@link ClientWindowRenderMode#CLIENTWINDOW}.
+ * @return Whether the DOM tree should stored in the localStorage for the windowhandler.html
+ * when clicking on a link.
+ * Currently it's only used by {@link ClientWindowRenderMode#CLIENTWINDOW}.
* @see windowhandler.html
*/
- boolean isClientWindowStoreWindowTreeEnabled();
+ boolean isClientWindowStoreWindowTreeEnabledOnLinkClick();
- boolean isClientWindowTokenizedRedirectEnabled();
+ /**
+ * @return Whether the DOM tree should stored in the localStorage for the windowhandler.html
+ * when sending a AJAX request.
+ * Currently it's only used by {@link ClientWindowRenderMode#CLIENTWINDOW}.
+ * @see windowhandler.html
+ */
+ boolean isClientWindowStoreWindowTreeEnabledOnAjaxRequest();
+
+ /**
+ * @return Whether the DOM tree should stored in the localStorage for the windowhandler.html
+ * when clicking on a button.
+ * Currently it's only used by {@link ClientWindowRenderMode#CLIENTWINDOW}.
+ * @see windowhandler.html
+ */
+ boolean isClientWindowStoreWindowTreeEnabledOnButtonClick();
+ boolean isClientWindowTokenizedRedirectEnabled();
+
/**
* Restricts the number of active windows.
*
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/97cc3e30/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/DefaultClientWindowConfig.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/DefaultClientWindowConfig.java b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/DefaultClientWindowConfig.java
index 67549f9..7232767 100644
--- a/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/DefaultClientWindowConfig.java
+++ b/deltaspike/modules/jsf/api/src/main/java/org/apache/deltaspike/jsf/spi/scope/window/DefaultClientWindowConfig.java
@@ -231,11 +231,23 @@ public class DefaultClientWindowConfig implements ClientWindowConfig
}
@Override
- public boolean isClientWindowStoreWindowTreeEnabled()
+ public boolean isClientWindowStoreWindowTreeEnabledOnLinkClick()
{
return true;
}
-
+
+ @Override
+ public boolean isClientWindowStoreWindowTreeEnabledOnAjaxRequest()
+ {
+ return false;
+ }
+
+ @Override
+ public boolean isClientWindowStoreWindowTreeEnabledOnButtonClick()
+ {
+ return false;
+ }
+
@Override
public boolean isClientWindowTokenizedRedirectEnabled()
{
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/97cc3e30/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
index 59bdc0f..1858aac 100644
--- a/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
+++ b/deltaspike/modules/jsf/impl/src/main/java/org/apache/deltaspike/jsf/impl/component/window/WindowIdHtmlRenderer.java
@@ -77,8 +77,13 @@ public class WindowIdHtmlRenderer extends Renderer
writer.write("(function(){");
writer.write("dswh.init('" + windowId + "','" + clientWindowRenderMode.name() + "',{");
- writer.write("'storeWindowTree':" + clientWindowConfig.isClientWindowStoreWindowTreeEnabled());
- writer.write(",'tokenizedRedirect':" + clientWindowConfig.isClientWindowTokenizedRedirectEnabled());
+ writer.write("'tokenizedRedirect':" + clientWindowConfig.isClientWindowTokenizedRedirectEnabled());
+ writer.write(",'storeWindowTreeOnLinkClick':"
+ + clientWindowConfig.isClientWindowStoreWindowTreeEnabledOnLinkClick());
+ writer.write(",'storeWindowTreeOnButtonClick':"
+ + clientWindowConfig.isClientWindowStoreWindowTreeEnabledOnButtonClick());
+ writer.write(",'storeWindowTreeOnAjaxRequest':"
+ + clientWindowConfig.isClientWindowStoreWindowTreeEnabledOnAjaxRequest());
// see #729
if (!delegatedWindowMode && clientWindow.isInitialRedirectSupported(context))
http://git-wip-us.apache.org/repos/asf/deltaspike/blob/97cc3e30/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
----------------------------------------------------------------------
diff --git a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
index 3e55f7e..2bcb89d 100644
--- a/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
+++ b/deltaspike/modules/jsf/impl/src/main/resources/META-INF/resources/deltaspike/windowhandler.js
@@ -77,9 +77,26 @@ window.dswh = window.dswh || {
},
init : function(ajax) {
- this.overwriteOnClickEvents();
+ this.overwriteLinkOnClickEvents();
+ this.overwriteButtonOnClickEvents();
dswh.utils.appendHiddenWindowIdToForms();
+
+ if (ajax === false && dswh.utils.isHtml5() && dswh.cfg.storeWindowTreeOnAjaxRequest) {
+ // JSF ajax callback
+ jsf.ajax.addOnEvent(function(event) {
+ if (event.status === "begin") {
+ dswh.strategy.CLIENTWINDOW.storeWindowTree();
+ }
+ });
+
+ // PF ajax callback
+ if (window.$ && window.PrimeFaces) {
+ $(document).on('pfAjaxSend', function () {
+ dswh.strategy.CLIENTWINDOW.storeWindowTree();
+ });
+ }
+ }
},
assertWindowId : function() {
@@ -90,10 +107,10 @@ window.dswh = window.dswh || {
}
},
- overwriteOnClickEvents : function() {
+ overwriteLinkOnClickEvents : function() {
var tokenizedRedirectEnabled = dswh.cfg.tokenizedRedirect;
- var storeWindowTreeEnabled = dswh.utils.isHtml5() && dswh.cfg.storeWindowTree;
+ var storeWindowTreeEnabled = dswh.utils.isHtml5() && dswh.cfg.storeWindowTreeOnLinkClick;
if (tokenizedRedirectEnabled || storeWindowTreeEnabled) {
var links = document.getElementsByTagName("a");
@@ -143,6 +160,41 @@ window.dswh = window.dswh || {
}
}
},
+
+ overwriteButtonOnClickEvents : function() {
+
+ var storeWindowTreeEnabled = dswh.utils.isHtml5() && dswh.cfg.storeWindowTreeOnButtonClick;
+
+ if (storeWindowTreeEnabled) {
+ var inputs = document.getElementsByTagName("input");
+ for (var i = 0; i < inputs.length; i++) {
+ var input = inputs[i];
+ if (input.getAttribute("type") === "submit" || input.getAttribute("type") === "button") {
+ if (!input.onclick) {
+ input.onclick = function() {
+ dswh.strategy.CLIENTWINDOW.storeWindowTree();
+ return true;
+ };
+ } else {
+ // prevent double decoration
+ if (!("" + input.onclick).match(".*storeWindowTree().*")) {
+ //the function wrapper is important otherwise the
+ //last onclick handler would be assigned to oldonclick
+ (function storeEvent() {
+ var oldonclick = input.onclick;
+ input.onclick = function(evt) {
+ //ie handling added
+ evt = evt || window.event;
+
+ return dswh.strategy.CLIENTWINDOW.storeWindowTree() && oldonclick.bind(this)(evt);
+ };
+ })();
+ }
+ }
+ }
+ }
+ }
+ },
isHrefDefined : function(link) {
// skip link without href