You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ar...@apache.org on 2010/03/04 00:18:23 UTC
svn commit: r918762 - in /myfaces/trinidad/branches/jsf2_ajax:
trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml
trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
Author: arobinson74
Date: Wed Mar 3 23:18:23 2010
New Revision: 918762
URL: http://svn.apache.org/viewvc?rev=918762&view=rev
Log:
Add focus restoration code to the JSF ajax calls
Modified:
myfaces/trinidad/branches/jsf2_ajax/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml
myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
Modified: myfaces/trinidad/branches/jsf2_ajax/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml?rev=918762&r1=918761&r2=918762&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml (original)
+++ myfaces/trinidad/branches/jsf2_ajax/trinidad-examples/trinidad-demo/src/main/webapp/demos/ajaxPPRDemos.xhtml Wed Mar 3 23:18:23 2010
@@ -62,6 +62,10 @@
TrPage.getInstance().getRequestQueue().addStateChangeListener(pprStateChangeFunction);
TrPage.getInstance().addDomReplaceListener(pprDomReplacementFunction);
}
+function setFocus(event)
+{
+ event.target.focus();
+}
</trh:script>
</tr:group>
</f:facet>
@@ -196,6 +200,16 @@
</tr:panelLabelAndMessage>
</tr:panelGroupLayout>
</tr:panelHeader>
+ <tr:panelHeader text="Focus Restoration">
+ <tr:outputFormatted styleUsage="instruction"
+ value="The below command button gets the focus on mouse down and its parent is updated by PPR. It should regain focus after the PPR completes." />
+ <tr:panelGroupLayout id="frpgl1" layout="vertical" partialTriggers="frcb1">
+ <tr:commandButton id="frcb1" text="Demonstrate focus restoration"
+ partialSubmit="true">
+ <trd:invokeFunctionBehavior function="setFocus" event="mousedown" />
+ </tr:commandButton>
+ </tr:panelGroupLayout>
+ </tr:panelHeader>
</tr:panelGroupLayout>
<tr:panelLabelAndMessage id="plam1" label="Ajax Status Log">
<tr:inputText id="it1" value="" simple="true" rows="7" columns="100" />
Modified: myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js?rev=918762&r1=918761&r2=918762&view=diff
==============================================================================
--- myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js (original)
+++ myfaces/trinidad/branches/jsf2_ajax/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/Page.js Wed Mar 3 23:18:23 2010
@@ -63,6 +63,7 @@
if (params != null)
source = params.source;
+ // TODO: move this to the request queue
TrPage._delegateToJSFAjax(actionForm, source, event, params);
@@ -811,14 +812,41 @@
this._requestQueue._broadcastStateChangeEvent(this._requestQueue._state);
break;
case "success":
+ var oldElems = this._ajaxOldDomElements;
try
{
- this._notifyDomReplacementListeners(this._ajaxOldDomElements);
+ this._notifyDomReplacementListeners(oldElems);
}
finally
{
delete this._ajaxOldDomElements;
}
+ if (this._activeNode)
+ {
+ var activeNode = this._activeNode;
+ delete this._activeNode;
+ var index = -1;
+ if (activeNode.id)
+ {
+ for (var i = 0, size = oldElems.length; i < size; ++i)
+ {
+ if (TrPage._isDomAncestorOf(activeNode, oldElems[i].element))
+ {
+ index = i;
+ break;
+ }
+ }
+ if (index >= 0)
+ {
+ activeNode = document.getElementById(activeNode.id);
+ window._trActiveElement = activeNode;
+ if (activeNode)
+ {
+ activeNode.focus();
+ }
+ }
+ }
+ }
this._requestQueue._state = TrRequestQueue.STATE_READY;
this._requestQueue._broadcastStateChangeEvent(this._requestQueue._state);
break;
@@ -827,6 +855,7 @@
// Collect the DOM elements that will be replaced to be able to fire the
// DOM replacement events
this._ajaxOldDomElements = this._getDomToBeUpdated(data.responseCode, data.responseXML);
+ this._activeNode = _getActiveElement();
break;
}
}
@@ -838,6 +867,7 @@
this._requestQueue._state = TrRequestQueue.STATE_READY;
this._requestQueue._broadcastStateChangeEvent(this._requestQueue._state);
delete this._ajaxOldDomElements;
+ delete this._activeNode;
}
TrPage.prototype._notifyDomReplacementListeners = function(dataArray)