You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by ga...@apache.org on 2009/05/31 11:32:20 UTC
svn commit: r780394 [2/2] - in
/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces:
_impl/_util/ _impl/core/ _impl/xhrCore/ api/
Modified: myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxResponse.js
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxResponse.js?rev=780394&r1=780393&r2=780394&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxResponse.js (original)
+++ myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxResponse.js Sun May 31 09:32:13 2009
@@ -1,394 +1,394 @@
-/*
- * Copyright 2009 Ganesh Jung
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Author: Ganesh Jung (latest modification by $Author: werpu $)
- * Version: $Revision: 1.18 $ $Date: 2009/04/24 13:14:02 $
- *
- */
-
-_reserveMyfacesNamespaces();
-
-
-if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_AjaxResponse")) {
-
-
- /**
- * Constructor
- * @param {String} alarmThreshold
- */
- myfaces._impl.xhrCore._AjaxResponse = function(alarmThreshold) {
- this.alarmThreshold = alarmThreshold;
- this.m_exception = new myfaces._impl.xhrCore._Exception("myfaces._impl.xhrCore._AjaxResponse", this.alarmThreshold);
- };
-
- /*partial response types*/
- myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSE_PARTIAL = "partial-response";
- myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSETYPE_ERROR = "error";
- myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSETYPE_REDIRECT = "redirect";
- myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSETYPE_REDIRECT = "changes";
-
- /*partial commands*/
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_CHANGES = "changes";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_UPDATE = "update";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_DELETE = "delete";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_INSERT = "insert";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_EVAL = "eval";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_ERROR = "error";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_ATTRIBUTES = "attributes";
- myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_EXTENSION = "extension";
-
- /**
- * uses response to start Html element replacement
- * @param {Map} context - AJAX context
- *
- * A special handling has to be added to the update cycle
- * according to the JSDoc specs if the CDATA block contains html tags the outer rim must be stripped
- * if the CDATA block contains a head section the document head must be replaced
- * and if the CDATA block contains a body section the document body must be replaced!
- *
- */
- myfaces._impl.xhrCore._AjaxResponse.prototype.processResponse = function(request, context) {
- try {
- // TODO:
- // Solution from
- // http://www.codingforums.com/archive/index.php/t-47018.html
- // to solve IE error 1072896658 when a Java server sends iso88591
- // istead of ISO-8859-1
- if ('undefined' == typeof(request) || null == request) {
- throw Exception("jsf.ajaxResponse: The response cannot be null or empty!");
- }
-
- if (!myfaces._impl._util._LangUtils.exists(request, "responseXML")) {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_EMPTY_RESPONSE);
- return;
- }
-
- var xmlContent = request.responseXML;
- if (xmlContent.firstChild.tagName == "parsererror") {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML);
- return;
- }
- var partials = xmlContent.childNodes[0];
- if ('undefined' == typeof partials || partials == null
- || partials.tagName != this._RESPONSE_PARTIAL) {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML);
- return;
- }
-
- var childNodesLength = partials.childNodes.length;
-
- for (var loop = 0; loop < childNodesLength; loop++) {
- var childNode = partials.childNodes[loop];
- var tagName = childNode.tagName;
-
- /**
- * <eval>
- * <![CDATA[javascript]]>
- * </eval>
- */
-
-
-
- //this ought to be enough for eval
- //however the run scripts still makes sense
- //in the update and insert area for components
- //which do not use the response writer properly
- //we might add this one as custom option in update and
- //insert!
- if (tagName == this._PCMD_ERROR) {
- this.processError(request, context, childNode);
- return;
- } else if (tagName == this._PCMD_REDIRECT) {
- if (!this.processRedirect(request, context, childNode)) return;
- } else if (tagName == this._PCMD_CHANGES) {
- if (!this.processChanges(request, context, childNode)) return;
- }
- }
- } catch (e) {
- this.m_exception.throwError(request, context, "processResponse", e);
- }
- };
-
- myfaces._impl.xhrCore._AjaxResponse.prototype.processError = function(request, context, node) {
- /**
- * <error>
- * <error-name>String</error-name>
- * <error-message><![CDATA[message]]></error-message>
- * <error>
- */
- var errorName = node.firstChild.textContent;
- var errorMessage = node.childNodes[1].firstChild.data;
-
- if('undefined' == typeof errorName || null == errorName) {
- errorName = "";
- }
- if('undefined' == typeof errorMessage || null == errorMessage) {
- errorMessage = "";
- }
- jsf.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_SERVER_ERROR , errorName, errorMessage);
- }
-
- myfaces._impl.xhrCore._AjaxResponse.prototype.processRedirect = function(request, context, node) {
- /**
- * <redirect url="url to redirect" />
- */
- var redirectUrl = node.getAttribute("url");
- if('undefined' == typeof redirectUrl || null == redirectUrl) {
- jsf.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,"Redirect without url");
- return false;
- }
- redirectUrl = myfaces._impl._util._LangUtils.trim(redirectUrl);
- if(redirectUrl == "") {
- return false;
- }
- window.location = redirectUrl;
- return true;
- }
-
- myfaces._impl.xhrCore._AjaxResponse.prototype.processChanges = function(request, context, node) {
- var changes = node.childNodes;
-
- for (var i = 0; i < changes.length; i++) {
- if (changes[i].tagName == "update") {
- if (!this.processUpdate(request, context, changes[i])) return false;
- } else if (changes[i].tagName == this._PCMD_EVAL) {
- //eval is always in CDATA blocks
- myfaces._impl._util._Utils.globalEval(changes[i].firstChild.data);
- } else if (changes[i].tagName == this._PCMD_INSERT) {
- if (!this.processInsert(request, context, changes[i])) return false;
- } else if (changes[i].tagName == this._PCMD_DELETE) {
- if (!this.processDelete(request, context, changes[i])) return false;
- } else if (changes[i].tagName == this._PCMD_ATTRIBUTES) {
- if (!this.processAttributes(request, context, changes[i])) return false;
- // this._responseHandler.doAtttributes(childNode);
- //TODO check the spec if this part is obsolete!!!
- //} else if (changes[i].tagName == this._PCMD_EXTENSION) {
- // this._responseHandler.doExtension(childNode);
-
- } else {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML);
- return false;
- }
- }
- return true;
- }
-
- myfaces._impl.xhrCore._AjaxResponse.prototype.processUpdate = function(request, context, node) {
- if (node.getAttribute('id') == "javax.faces.ViewState") {
- /*if(null != document.getElementById("javax.faces.ViewState")) {
- document.getElementById("javax.faces.ViewState").value = node.firstChild.nodeValue;
- } else {
-
- }*/
- //update the submitting forms viewstate to the new value
-
- var sourceForm = myfaces._impl._util._Utils.getParent(null, context, context.source, "form");
-
- if ('undefined' == typeof sourceForm || null == sourceForm) {
- sourceForm = document.forms.length > 0 ? document.forms[0]:null;
- }
- if(null != sourceForm) {
- /*we check for an element and include a namesearch, but only within the bounds of the committing form*/
- var element = myfaces._impl._util._Utils.getElementFromForm(request, context, "javax.faces.ViewState", sourceForm, true, true);
- if(null == element) {//no element found we have to append a hidden field
- element = document.createElement("input");
- myfaces._impl._util._Utils.setAttribute(element,"type", "hidden");
- myfaces._impl._util._Utils.setAttribute(element,"name","javax.faces.ViewState");
- sourceForm.appendChild(element);
- }
- myfaces._impl._util._Utils.setAttribute(element,"value", node.firstChild.nodeValue);
-
- }
- //else??? the latest spec has this omitted we have to wait for the RI which probably covers this
-
- } else {
- var cDataBlock = [];
- // response may contain sevaral blocks
- for (var i = 0; i < node.childNodes.length; i++) {
- cDataBlock.push( node.childNodes[i].data);
- }
- //a join is more efficient that normal string ops!
- cDataBlock = cDataBlock.join("");
-
- var body = document.getElementsByTagName('body')[0];
- var head = document.getElementsByTagName('head')[0];
-
- switch(node.getAttribute('id')) {
- case "javax.faces.ViewRoot":
-
- var parser = jsf.ajax._impl = new (myfaces._impl._util._Utils.getGlobalConfig("updateParser",myfaces._impl._util._HtmlStripper))();
-
- document.documentElement.innerHTML = parser.parse(cDataBlock);
- // innerHTML doesn't execute scripts, so no browser switch here
- myfaces._impl._util._Utils.runScripts(request, context, cDataBlock);
-
- break;
- case "javax.faces.ViewHead":
- //we assume the cdata block is our head including the tag
- this._replaceElement(request, context, head, cDataBlock );
-
-
- break;
- case "javax.faces.ViewBody":
- //we assume the cdata block is our body including the tag
- this._replaceElement(request, context, body, cDataBlock );
-
- break;
-
- default:
- this._replaceElement(request, context,node.getAttribute('id'), cDataBlock );
-
- break;
- }
- }
- return true;
- };
-
- /**
- * Helper method to avoid duplicate code
- * @param request our request object
- * @param contect the response context
- * @param {DomNode}Â oldElement the element to be replaced
- * @param {String} newData the markup which replaces the old dom node!
- */
- myfaces._impl.xhrCore._AjaxResponse.prototype._replaceElement = function(request, context, oldElement, newData) {
- myfaces._impl._util._Utils.replaceHtmlItem(request, context,
- oldElement, newData, this.m_htmlFormElement);
- //fetch the scripts and do an eval on the scripts to bypass
- //browser inconsistencies in this area
- //lets have the browser itself deal with this issue, j4fry
- //is pretty well optimized in this area!
- if (myfaces._impl._util._Utils.isManualScriptEval()) {
- myfaces._impl._util._Utils.runScripts(request, context, newData);
- }
- };
-
- /*insert, three attributes can be present
- * id = insert id
- * before = before id
- * after = after id
- *
- * the insert id is the id of the node to be inserted
- * the before is the id if set which the component has to be inserted before
- * the after is the id if set which the component has to be inserted after
- **/
- myfaces._impl.xhrCore._AjaxResponse.prototype.processInsert = function(request, context, node) {
- var insertId = node.getAttribute('id');
- var beforeId = node.getAttribute('before');
- var afterId = node.getAttribute('after');
-
- var insertSet = 'undefined' != typeof insertId && null != insertId && myfaces._impl._util._LangUtils.trim(insertId) != "";
- var beforeSet = 'undefined' != typeof beforeId && null != beforeId && myfaces._impl._util._LangUtils.trim(beforeId) != "";
- var afterSet = 'undefined' != typeof afterId && null != afterId && myfaces._impl._util._LangUtils.trim(afterId) != "";
-
- if(!insertSet) {
- jsf.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, id must be present");
- return false;
- }
- if(!(beforeSet || afterSet)) {
- jsf.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, before id or after id must be present");
- return false;
- }
- //either before or after but not two at the same time
- if(beforeSet) {
- beforeId = myfaces._impl._util._LangUtils.trim(beforeId);
- var beforeNode = document.getElementById(beforeId);
- if('undefined' == typeof beforeNode || null == beforeNode) {
- jsf.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, before node of id "+beforeId+" does not exist in document");
- return false;
- }
- /**
- *we generate a temp holder
- *so that we can use innerHTML for
- *generating the content upfront
- *before inserting it"
- **/
- var nodeHolder = document.createElement("div");
- var parentNode = beforeNode.parentNode;
- parentNode.insertBefore(nodeHolder, beforeNode);
-
- myfaces._impl._util._Utils.replaceHtmlItem(request, context,
- nodeHolder, node.firstChild.data, null);
-
- } else {
- afterId = myfaces._impl._util._LangUtils.trim(afterId);
- var afterNode = document.getElementById(afterId);
- if('undefined' == typeof afterNode || null == afterNode) {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, after node of id "+after+" does not exist in document");
- return false;
- }
- var nodeHolder = document.createElement("div");
- var parentNode = afterNode.parentNode;
- parentNode.insertBefore(nodeHolder, afterNode.nextSibling);
- myfaces._impl._util._Utils.replaceHtmlItem(request, context,
- nodeHolder, node.firstChild.data, null);
- }
- return true;
- }
-
- myfaces._impl.xhrCore._AjaxResponse.prototype.processDelete = function(request, context, node) {
- var deleteId = node.getAttribute('id');
- if('undefined' == typeof deleteId || null == deleteId) {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,
- myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in delete, id not in xml markup");
- return false;
- }
-
- myfaces._impl._util._Utils.deleteItem(request, context, deleteId, "","");
- return true;
- }
-
- myfaces._impl.xhrCore._AjaxResponse.prototype.processAttributes = function(request, context, node) {
- //we now route into our attributes function to bypass
- //IE quirks mode incompatibilities to the biggest possible extent
- //most browsers just have to do a setAttributes but IE
- //behaves as usual not like the official standard
- //myfaces._impl._util._Utils.setAttribute(domNode, attribute, value;
-
- //<attributes id="id of element"> <attribute name="attribute name" value="attribute value" />* </attributes>
- var attributesRoot = node;
- var elementId = attributesRoot.getAttribute('id');
- if('undefined' == typeof elementId || null == elementId) {
- jsf.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML
- ,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in attributes, id not in xml markup");
- return false;
- }
- var childs = attributesRoot.childNodes;
-
- if('undefined' == typeof childs || null == childs) {
- return false;
- }
- for(var loop2 = 0; loop2 < childs.length; loop2++) {
- var attributesNode = childs[loop2];
-
- var attributeName = attributesNode.getAttribute("name");
- var attributeValue = attributesNode.getAttribute("value");
-
- if('undefined' == typeof attributeName || null == attributeName) {
- continue;
- }
-
- attributeName = myfaces._impl._util._LangUtils.trim(attributeName);
- /*no value means reset*/
- if('undefined' == typeof attributeValue || null == attributeValue) {
- attributeValue = "";
- }
-
- myfaces._impl._util._Utils.setAttribute(document.getElementById(elementId), attributeName, attributeValue);
- }
- return true;
- }
-
+/*
+ * Copyright 2009 Ganesh Jung
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Ganesh Jung (latest modification by $Author: ganeshpuri $)
+ * Version: $Revision: 1.2 $ $Date: 2009/05/30 17:54:57 $
+ *
+ */
+
+_reserveMyfacesNamespaces();
+
+
+if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_AjaxResponse")) {
+
+
+ /**
+ * Constructor
+ * @param {String} alarmThreshold
+ */
+ myfaces._impl.xhrCore._AjaxResponse = function(alarmThreshold) {
+ this.alarmThreshold = alarmThreshold;
+ this.m_exception = new myfaces._impl.xhrCore._Exception("myfaces._impl.xhrCore._AjaxResponse", this.alarmThreshold);
+ };
+
+ /*partial response types*/
+ myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSE_PARTIAL = "partial-response";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSETYPE_ERROR = "error";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSETYPE_REDIRECT = "redirect";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._RESPONSETYPE_REDIRECT = "changes";
+
+ /*partial commands*/
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_CHANGES = "changes";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_UPDATE = "update";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_DELETE = "delete";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_INSERT = "insert";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_EVAL = "eval";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_ERROR = "error";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_ATTRIBUTES = "attributes";
+ myfaces._impl.xhrCore._AjaxResponse.prototype._PCMD_EXTENSION = "extension";
+
+ /**
+ * uses response to start Html element replacement
+ * @param {Map} context - AJAX context
+ *
+ * A special handling has to be added to the update cycle
+ * according to the JSDoc specs if the CDATA block contains html tags the outer rim must be stripped
+ * if the CDATA block contains a head section the document head must be replaced
+ * and if the CDATA block contains a body section the document body must be replaced!
+ *
+ */
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processResponse = function(request, context) {
+ try {
+ // TODO:
+ // Solution from
+ // http://www.codingforums.com/archive/index.php/t-47018.html
+ // to solve IE error 1072896658 when a Java server sends iso88591
+ // istead of ISO-8859-1
+ if ('undefined' == typeof(request) || null == request) {
+ throw Exception("jsf.ajaxResponse: The response cannot be null or empty!");
+ }
+
+ if (!myfaces._impl._util._LangUtils.exists(request, "responseXML")) {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_EMPTY_RESPONSE);
+ return;
+ }
+
+ var xmlContent = request.responseXML;
+ if (xmlContent.firstChild.tagName == "parsererror") {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML);
+ return;
+ }
+ var partials = xmlContent.childNodes[0];
+ if ('undefined' == typeof partials || partials == null
+ || partials.tagName != this._RESPONSE_PARTIAL) {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML);
+ return;
+ }
+
+ var childNodesLength = partials.childNodes.length;
+
+ for (var loop = 0; loop < childNodesLength; loop++) {
+ var childNode = partials.childNodes[loop];
+ var tagName = childNode.tagName;
+
+ /**
+ * <eval>
+ * <![CDATA[javascript]]>
+ * </eval>
+ */
+
+
+
+ //this ought to be enough for eval
+ //however the run scripts still makes sense
+ //in the update and insert area for components
+ //which do not use the response writer properly
+ //we might add this one as custom option in update and
+ //insert!
+ if (tagName == this._PCMD_ERROR) {
+ this.processError(request, context, childNode);
+ return;
+ } else if (tagName == this._PCMD_REDIRECT) {
+ if (!this.processRedirect(request, context, childNode)) return;
+ } else if (tagName == this._PCMD_CHANGES) {
+ if (!this.processChanges(request, context, childNode)) return;
+ }
+ }
+ } catch (e) {
+ this.m_exception.throwError(request, context, "processResponse", e);
+ }
+ };
+
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processError = function(request, context, node) {
+ /**
+ * <error>
+ * <error-name>String</error-name>
+ * <error-message><![CDATA[message]]></error-message>
+ * <error>
+ */
+ var errorName = node.firstChild.textContent;
+ var errorMessage = node.childNodes[1].firstChild.data;
+
+ if('undefined' == typeof errorName || null == errorName) {
+ errorName = "";
+ }
+ if('undefined' == typeof errorMessage || null == errorMessage) {
+ errorMessage = "";
+ }
+ myfaces.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_SERVER_ERROR , errorName, errorMessage);
+ }
+
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processRedirect = function(request, context, node) {
+ /**
+ * <redirect url="url to redirect" />
+ */
+ var redirectUrl = node.getAttribute("url");
+ if('undefined' == typeof redirectUrl || null == redirectUrl) {
+ myfaces.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,"Redirect without url");
+ return false;
+ }
+ redirectUrl = myfaces._impl._util._LangUtils.trim(redirectUrl);
+ if(redirectUrl == "") {
+ return false;
+ }
+ window.location = redirectUrl;
+ return true;
+ }
+
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processChanges = function(request, context, node) {
+ var changes = node.childNodes;
+
+ for (var i = 0; i < changes.length; i++) {
+ if (changes[i].tagName == "update") {
+ if (!this.processUpdate(request, context, changes[i])) return false;
+ } else if (changes[i].tagName == this._PCMD_EVAL) {
+ //eval is always in CDATA blocks
+ myfaces._impl._util._Utils.globalEval(changes[i].firstChild.data);
+ } else if (changes[i].tagName == this._PCMD_INSERT) {
+ if (!this.processInsert(request, context, changes[i])) return false;
+ } else if (changes[i].tagName == this._PCMD_DELETE) {
+ if (!this.processDelete(request, context, changes[i])) return false;
+ } else if (changes[i].tagName == this._PCMD_ATTRIBUTES) {
+ if (!this.processAttributes(request, context, changes[i])) return false;
+ // this._responseHandler.doAtttributes(childNode);
+ //TODO check the spec if this part is obsolete!!!
+ //} else if (changes[i].tagName == this._PCMD_EXTENSION) {
+ // this._responseHandler.doExtension(childNode);
+
+ } else {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML);
+ return false;
+ }
+ }
+ return true;
+ }
+
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processUpdate = function(request, context, node) {
+ if (node.getAttribute('id') == "javax.faces.ViewState") {
+ /*if(null != document.getElementById("javax.faces.ViewState")) {
+ document.getElementById("javax.faces.ViewState").value = node.firstChild.nodeValue;
+ } else {
+
+ }*/
+ //update the submitting forms viewstate to the new value
+
+ var sourceForm = myfaces._impl._util._Utils.getParent(null, context, context.source, "form");
+
+ if ('undefined' == typeof sourceForm || null == sourceForm) {
+ sourceForm = document.forms.length > 0 ? document.forms[0]:null;
+ }
+ if(null != sourceForm) {
+ /*we check for an element and include a namesearch, but only within the bounds of the committing form*/
+ var element = myfaces._impl._util._Utils.getElementFromForm(request, context, "javax.faces.ViewState", sourceForm, true, true);
+ if(null == element) {//no element found we have to append a hidden field
+ element = document.createElement("input");
+ myfaces._impl._util._Utils.setAttribute(element,"type", "hidden");
+ myfaces._impl._util._Utils.setAttribute(element,"name","javax.faces.ViewState");
+ sourceForm.appendChild(element);
+ }
+ myfaces._impl._util._Utils.setAttribute(element,"value", node.firstChild.nodeValue);
+
+ }
+ //else??? the latest spec has this omitted we have to wait for the RI which probably covers this
+
+ } else {
+ var cDataBlock = [];
+ // response may contain sevaral blocks
+ for (var i = 0; i < node.childNodes.length; i++) {
+ cDataBlock.push( node.childNodes[i].data);
+ }
+ //a join is more efficient that normal string ops!
+ cDataBlock = cDataBlock.join("");
+
+ var body = document.getElementsByTagName('body')[0];
+ var head = document.getElementsByTagName('head')[0];
+
+ switch(node.getAttribute('id')) {
+ case "javax.faces.ViewRoot":
+
+ var parser = myfaces.ajax._impl = new (myfaces._impl._util._Utils.getGlobalConfig("updateParser",myfaces._impl._util._HtmlStripper))();
+
+ document.documentElement.innerHTML = parser.parse(cDataBlock);
+ // innerHTML doesn't execute scripts, so no browser switch here
+ myfaces._impl._util._Utils.runScripts(request, context, cDataBlock);
+
+ break;
+ case "javax.faces.ViewHead":
+ //we assume the cdata block is our head including the tag
+ this._replaceElement(request, context, head, cDataBlock );
+
+
+ break;
+ case "javax.faces.ViewBody":
+ //we assume the cdata block is our body including the tag
+ this._replaceElement(request, context, body, cDataBlock );
+
+ break;
+
+ default:
+ this._replaceElement(request, context,node.getAttribute('id'), cDataBlock );
+
+ break;
+ }
+ }
+ return true;
+ };
+
+ /**
+ * Helper method to avoid duplicate code
+ * @param request our request object
+ * @param contect the response context
+ * @param {DomNode}Â oldElement the element to be replaced
+ * @param {String} newData the markup which replaces the old dom node!
+ */
+ myfaces._impl.xhrCore._AjaxResponse.prototype._replaceElement = function(request, context, oldElement, newData) {
+ myfaces._impl._util._Utils.replaceHtmlItem(request, context,
+ oldElement, newData, this.m_htmlFormElement);
+ //fetch the scripts and do an eval on the scripts to bypass
+ //browser inconsistencies in this area
+ //lets have the browser itself deal with this issue, j4fry
+ //is pretty well optimized in this area!
+ if (myfaces._impl._util._Utils.isManualScriptEval()) {
+ myfaces._impl._util._Utils.runScripts(request, context, newData);
+ }
+ };
+
+ /*insert, three attributes can be present
+ * id = insert id
+ * before = before id
+ * after = after id
+ *
+ * the insert id is the id of the node to be inserted
+ * the before is the id if set which the component has to be inserted before
+ * the after is the id if set which the component has to be inserted after
+ **/
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processInsert = function(request, context, node) {
+ var insertId = node.getAttribute('id');
+ var beforeId = node.getAttribute('before');
+ var afterId = node.getAttribute('after');
+
+ var insertSet = 'undefined' != typeof insertId && null != insertId && myfaces._impl._util._LangUtils.trim(insertId) != "";
+ var beforeSet = 'undefined' != typeof beforeId && null != beforeId && myfaces._impl._util._LangUtils.trim(beforeId) != "";
+ var afterSet = 'undefined' != typeof afterId && null != afterId && myfaces._impl._util._LangUtils.trim(afterId) != "";
+
+ if(!insertSet) {
+ myfaces.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, id must be present");
+ return false;
+ }
+ if(!(beforeSet || afterSet)) {
+ myfaces.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, before id or after id must be present");
+ return false;
+ }
+ //either before or after but not two at the same time
+ if(beforeSet) {
+ beforeId = myfaces._impl._util._LangUtils.trim(beforeId);
+ var beforeNode = document.getElementById(beforeId);
+ if('undefined' == typeof beforeNode || null == beforeNode) {
+ myfaces.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, before node of id "+beforeId+" does not exist in document");
+ return false;
+ }
+ /**
+ *we generate a temp holder
+ *so that we can use innerHTML for
+ *generating the content upfront
+ *before inserting it"
+ **/
+ var nodeHolder = document.createElement("div");
+ var parentNode = beforeNode.parentNode;
+ parentNode.insertBefore(nodeHolder, beforeNode);
+
+ myfaces._impl._util._Utils.replaceHtmlItem(request, context,
+ nodeHolder, node.firstChild.data, null);
+
+ } else {
+ afterId = myfaces._impl._util._LangUtils.trim(afterId);
+ var afterNode = document.getElementById(afterId);
+ if('undefined' == typeof afterNode || null == afterNode) {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in PPR Insert, after node of id "+after+" does not exist in document");
+ return false;
+ }
+ var nodeHolder = document.createElement("div");
+ var parentNode = afterNode.parentNode;
+ parentNode.insertBefore(nodeHolder, afterNode.nextSibling);
+ myfaces._impl._util._Utils.replaceHtmlItem(request, context,
+ nodeHolder, node.firstChild.data, null);
+ }
+ return true;
+ }
+
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processDelete = function(request, context, node) {
+ var deleteId = node.getAttribute('id');
+ if('undefined' == typeof deleteId || null == deleteId) {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML,
+ myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in delete, id not in xml markup");
+ return false;
+ }
+
+ myfaces._impl._util._Utils.deleteItem(request, context, deleteId, "","");
+ return true;
+ }
+
+ myfaces._impl.xhrCore._AjaxResponse.prototype.processAttributes = function(request, context, node) {
+ //we now route into our attributes function to bypass
+ //IE quirks mode incompatibilities to the biggest possible extent
+ //most browsers just have to do a setAttributes but IE
+ //behaves as usual not like the official standard
+ //myfaces._impl._util._Utils.setAttribute(domNode, attribute, value;
+
+ //<attributes id="id of element"> <attribute name="attribute name" value="attribute value" />* </attributes>
+ var attributesRoot = node;
+ var elementId = attributesRoot.getAttribute('id');
+ if('undefined' == typeof elementId || null == elementId) {
+ myfaces.ajax.sendError(request, context,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML
+ ,myfaces._impl.core._jsfImpl._ERROR_MALFORMEDXML, "Error in attributes, id not in xml markup");
+ return false;
+ }
+ var childs = attributesRoot.childNodes;
+
+ if('undefined' == typeof childs || null == childs) {
+ return false;
+ }
+ for(var loop2 = 0; loop2 < childs.length; loop2++) {
+ var attributesNode = childs[loop2];
+
+ var attributeName = attributesNode.getAttribute("name");
+ var attributeValue = attributesNode.getAttribute("value");
+
+ if('undefined' == typeof attributeName || null == attributeName) {
+ continue;
+ }
+
+ attributeName = myfaces._impl._util._LangUtils.trim(attributeName);
+ /*no value means reset*/
+ if('undefined' == typeof attributeValue || null == attributeValue) {
+ attributeValue = "";
+ }
+
+ myfaces._impl._util._Utils.setAttribute(document.getElementById(elementId), attributeName, attributeValue);
+ }
+ return true;
+ }
+
}
\ No newline at end of file
Modified: myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxUtils.js
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxUtils.js?rev=780394&r1=780393&r2=780394&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxUtils.js (original)
+++ myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_AjaxUtils.js Sun May 31 09:32:13 2009
@@ -1,243 +1,243 @@
-/*
- * Copyright 2009 Ganesh Jung
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Author: Ganesh Jung (latest modification by $Author: werpu $)
- * Version: $Revision: 1.7 $ $Date: 2009/04/23 11:03:09 $
- *
- */
-
-_reserveMyfacesNamespaces();
-
-if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_AjaxUtils")) {
-
- /**
- * Constructor
- * @param {String} alarmThreshold - Error Level
- */
- myfaces._impl.xhrCore._AjaxUtils = function(alarmThreshold) {
- // Exception Objekt
- this.alarmThreshold = alarmThreshold;
- this.m_exception = new myfaces._impl.xhrCore._Exception("myfaces._impl.xhrCore._AjaxUtils", this.alarmThreshold);
- };
-
- /**
- * determines fields to submit
- * @param {HtmlElement} item - item that triggered the event
- * @param {HtmlElement} parentItem - form element item is nested in
- * @param {Array} partialIds - ids fo PPS
- */
- myfaces._impl.xhrCore._AjaxUtils.prototype.processUserEntries = function(request, context, item,
- parentItem, partialIds) {
- try {
- var form = parentItem;
-
- if (form == null) {
- this.m_exception.throwWarning(request, context, "processUserEntries",
- "Html-Component is not nested in a Form-Tag");
- return null;
- }
-
- var stringBuffer = new Array();
-
- if (partialIds != null && partialIds.length > 0) {
- // recursivly check items
- this.addNodes(form, false, partialIds, stringBuffer);
- } else {
- // add all nodes
- var eLen = form.elements.length;
- for ( var e = 0; e < eLen; e++) {
- this.addField(form.elements[e], stringBuffer);
- } // end of for (formElements)
- }
-
- // if triggered by a Button send it along
- if (item.type != null && item.type.toLowerCase() == "submit") {
- stringBuffer[stringBuffer.length] = encodeURIComponent(item.name);
- stringBuffer[stringBuffer.length] = "=";
- stringBuffer[stringBuffer.length] = encodeURIComponent(item.value);
- stringBuffer[stringBuffer.length] = "&";
- }
-
- return stringBuffer.join("");
- } catch (e) {
- alert(e);
- this.m_exception.throwError(request, context, "processUserEntries", e);
- }
- };
-
- /**
- * checks recursively if contained in PPS
- * @param {} node -
- * @param {} insideSubmittedPart -
- * @param {} partialIds -
- * @param {} stringBuffer -
- */
- myfaces._impl.xhrCore._AjaxUtils.prototype.addNodes = function(node, insideSubmittedPart,
- partialIds, stringBuffer) {
- if (node != null && node.childNodes != null) {
- var nLen = node.childNodes.length;
- for ( var i = 0; i < nLen; i++) {
- var child = node.childNodes[i];
- var id = child.id;
- var elementName = child.name;
- if (child.nodeType == 1) {
- var isPartialSubmitContainer = ((id != null)
- && myfaces._impl._util._LangUtils.arrayContains(partialIds, id));
- if (insideSubmittedPart
- || isPartialSubmitContainer
- || (elementName != null
- && elementName == myfaces._impl.core._jsfImpl._PROP_VIEWSTATE)) {
- // node required for PPS
- this.addField(child, stringBuffer);
- if (insideSubmittedPart || isPartialSubmitContainer) {
- // check for further children
- this.addNodes(child, true, partialIds, stringBuffer);
- }
- } else {
- // check for further children
- this.addNodes(child, false, partialIds, stringBuffer);
- }
- }
- }
- }
- }
-
- /**
- * encapsulated xhr object which tracks down various implementations
- * of the xhr object in a browser independend fashion
- * (ie pre 7 used to have non standard implementations because
- * the xhr object standard came after IE had implemented it first
- * newer ie versions adhere to the standard and all other new browsers do anyway)
- */
- myfaces._impl.xhrCore._AjaxUtils.prototype.getXHRObject = function() {
- if('undefined' != typeof XMLHttpRequest && null != XMLHttpRequest) {
- return new XMLHttpRequest();
- }
- //IE
- try {
- return new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- return new ActiveXObject('Microsoft.XMLHTTP');
- }
-
- }
-
-
- /**
- * loads a script and executes it under a global scope
- * @param {String} src the source to be loaded
- * @param {String} type the mime type of the script (currently ignored
- * but in the long run it will be used)
- */
- myfaces._impl.xhrCore._AjaxUtils.prototype.loadScript = function(src, type, defer, charSet) {
- var xhr = this.getXHRObject();
- xhr.open("GET", src, false);
-
- if('undefined' != typeof charSet && null != charSet) {
- xhr.setRequestHeader("Content-Type","application/x-javascript; charset:"+charSet);
- }
-
- xhr.send(null);
-
- //since we are synchronous we do it after not with onReadyStateChange
- if(xhr.readyState == 4) {
- if (xhr.status == 200) {
- //defer also means we have to process after the ajax response
- //has been processed
- //we can achieve that with a small timeout, the timeout
- //triggers after the processing is done!
- if(!defer) {
- myfaces._impl._util._Utils.globalEval(xhr.responseText);
- } else {
- setTimeout(function() {
- myfaces._impl._util._Utils.globalEval(xhr.responseText);
- },1);
- }
- } else {
- throw Error(xhr.responseText);
- }
- } else {
- throw Error("Loading of script "+src+" failed ");
- }
- }
-
-
-
- /**
- * add a single field to stringbuffer for param submission
- * @param {HtmlElement} element -
- * @param {} stringBuffer -
- */
- myfaces._impl.xhrCore._AjaxUtils.prototype.addField = function(element, stringBuffer) {
- var elementName = element.name;
- var elementTagName = element.tagName.toLowerCase();
- var elementType = element.type;
- if (elementType != null) {
- elementType = elementType.toLowerCase();
- }
-
- // routine for all elements
- // rules:
- // - process only inputs, textareas and selects
- // - elements muest have attribute "name"
- // - elements must not be disabled
- if (((elementTagName == "input" || elementTagName == "textarea" || elementTagName == "select") &&
- (elementName != null && elementName != "")) && element.disabled == false) {
-
- // routine for select elements
- // rules:
- // - if select-one and value-Attribute exist => "name=value"
- // (also if value empty => "name=")
- // - if select-one and value-Attribute don't exist =>
- // "name=DisplayValue"
- // - if select multi and multple selected => "name=value1&name=value2"
- // - if select and selectedIndex=-1 don't submit
- if (elementTagName == "select") {
- // selectedIndex must be >= 0 sein to be submittet
- if (element.selectedIndex >= 0) {
- var uLen = element.options.length;
- for ( var u = 0; u < uLen; u++) {
- // find all selected options
- if (element.options[u].selected == true) {
- var elementOption = element.options[u];
- stringBuffer[stringBuffer.length] = encodeURIComponent(elementName);
- stringBuffer[stringBuffer.length] = "=";
- if (elementOption.getAttribute("value") != null) {
- stringBuffer[stringBuffer.length] = encodeURIComponent(elementOption.value);
- } else {
- stringBuffer[stringBuffer.length] = encodeURIComponent(elementOption.text);
- }
- stringBuffer[stringBuffer.length] = "&";
- }
- }
- }
- }
-
- // routine for remaining elements
- // rules:
- // - don't submit no selects (processed above), buttons, reset buttons, submit buttons,
- // - submit checkboxes and radio inputs only if checked
- if ((elementTagName != "select" && elementType != "button"
- && elementType != "reset" && elementType != "submit" && elementType != "image")
- && ((elementType != "checkbox" && elementType != "radio") || element.checked)) {
- stringBuffer[stringBuffer.length] = encodeURIComponent(elementName);
- stringBuffer[stringBuffer.length] = "=";
- stringBuffer[stringBuffer.length] = encodeURIComponent(element.value);
- stringBuffer[stringBuffer.length] = "&";
- }
-
- }
- }
+/*
+ * Copyright 2009 Ganesh Jung
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Ganesh Jung (latest modification by $Author: ganeshpuri $)
+ * Version: $Revision: 1.1 $ $Date: 2009/05/26 21:24:42 $
+ *
+ */
+
+_reserveMyfacesNamespaces();
+
+if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_AjaxUtils")) {
+
+ /**
+ * Constructor
+ * @param {String} alarmThreshold - Error Level
+ */
+ myfaces._impl.xhrCore._AjaxUtils = function(alarmThreshold) {
+ // Exception Objekt
+ this.alarmThreshold = alarmThreshold;
+ this.m_exception = new myfaces._impl.xhrCore._Exception("myfaces._impl.xhrCore._AjaxUtils", this.alarmThreshold);
+ };
+
+ /**
+ * determines fields to submit
+ * @param {HtmlElement} item - item that triggered the event
+ * @param {HtmlElement} parentItem - form element item is nested in
+ * @param {Array} partialIds - ids fo PPS
+ */
+ myfaces._impl.xhrCore._AjaxUtils.prototype.processUserEntries = function(request, context, item,
+ parentItem, partialIds) {
+ try {
+ var form = parentItem;
+
+ if (form == null) {
+ this.m_exception.throwWarning(request, context, "processUserEntries",
+ "Html-Component is not nested in a Form-Tag");
+ return null;
+ }
+
+ var stringBuffer = new Array();
+
+ if (partialIds != null && partialIds.length > 0) {
+ // recursivly check items
+ this.addNodes(form, false, partialIds, stringBuffer);
+ } else {
+ // add all nodes
+ var eLen = form.elements.length;
+ for ( var e = 0; e < eLen; e++) {
+ this.addField(form.elements[e], stringBuffer);
+ } // end of for (formElements)
+ }
+
+ // if triggered by a Button send it along
+ if (item.type != null && item.type.toLowerCase() == "submit") {
+ stringBuffer[stringBuffer.length] = encodeURIComponent(item.name);
+ stringBuffer[stringBuffer.length] = "=";
+ stringBuffer[stringBuffer.length] = encodeURIComponent(item.value);
+ stringBuffer[stringBuffer.length] = "&";
+ }
+
+ return stringBuffer.join("");
+ } catch (e) {
+ alert(e);
+ this.m_exception.throwError(request, context, "processUserEntries", e);
+ }
+ };
+
+ /**
+ * checks recursively if contained in PPS
+ * @param {} node -
+ * @param {} insideSubmittedPart -
+ * @param {} partialIds -
+ * @param {} stringBuffer -
+ */
+ myfaces._impl.xhrCore._AjaxUtils.prototype.addNodes = function(node, insideSubmittedPart,
+ partialIds, stringBuffer) {
+ if (node != null && node.childNodes != null) {
+ var nLen = node.childNodes.length;
+ for ( var i = 0; i < nLen; i++) {
+ var child = node.childNodes[i];
+ var id = child.id;
+ var elementName = child.name;
+ if (child.nodeType == 1) {
+ var isPartialSubmitContainer = ((id != null)
+ && myfaces._impl._util._LangUtils.arrayContains(partialIds, id));
+ if (insideSubmittedPart
+ || isPartialSubmitContainer
+ || (elementName != null
+ && elementName == myfaces._impl.core._jsfImpl._PROP_VIEWSTATE)) {
+ // node required for PPS
+ this.addField(child, stringBuffer);
+ if (insideSubmittedPart || isPartialSubmitContainer) {
+ // check for further children
+ this.addNodes(child, true, partialIds, stringBuffer);
+ }
+ } else {
+ // check for further children
+ this.addNodes(child, false, partialIds, stringBuffer);
+ }
+ }
+ }
+ }
+ }
+
+ /**
+ * encapsulated xhr object which tracks down various implementations
+ * of the xhr object in a browser independend fashion
+ * (ie pre 7 used to have non standard implementations because
+ * the xhr object standard came after IE had implemented it first
+ * newer ie versions adhere to the standard and all other new browsers do anyway)
+ */
+ myfaces._impl.xhrCore._AjaxUtils.prototype.getXHRObject = function() {
+ if('undefined' != typeof XMLHttpRequest && null != XMLHttpRequest) {
+ return new XMLHttpRequest();
+ }
+ //IE
+ try {
+ return new ActiveXObject("Msxml2.XMLHTTP");
+ } catch (e) {
+ return new ActiveXObject('Microsoft.XMLHTTP');
+ }
+
+ }
+
+
+ /**
+ * loads a script and executes it under a global scope
+ * @param {String} src the source to be loaded
+ * @param {String} type the mime type of the script (currently ignored
+ * but in the long run it will be used)
+ */
+ myfaces._impl.xhrCore._AjaxUtils.prototype.loadScript = function(src, type, defer, charSet) {
+ var xhr = this.getXHRObject();
+ xhr.open("GET", src, false);
+
+ if('undefined' != typeof charSet && null != charSet) {
+ xhr.setRequestHeader("Content-Type","application/x-javascript; charset:"+charSet);
+ }
+
+ xhr.send(null);
+
+ //since we are synchronous we do it after not with onReadyStateChange
+ if(xhr.readyState == 4) {
+ if (xhr.status == 200) {
+ //defer also means we have to process after the ajax response
+ //has been processed
+ //we can achieve that with a small timeout, the timeout
+ //triggers after the processing is done!
+ if(!defer) {
+ myfaces._impl._util._Utils.globalEval(xhr.responseText);
+ } else {
+ setTimeout(function() {
+ myfaces._impl._util._Utils.globalEval(xhr.responseText);
+ },1);
+ }
+ } else {
+ throw Error(xhr.responseText);
+ }
+ } else {
+ throw Error("Loading of script "+src+" failed ");
+ }
+ }
+
+
+
+ /**
+ * add a single field to stringbuffer for param submission
+ * @param {HtmlElement} element -
+ * @param {} stringBuffer -
+ */
+ myfaces._impl.xhrCore._AjaxUtils.prototype.addField = function(element, stringBuffer) {
+ var elementName = element.name;
+ var elementTagName = element.tagName.toLowerCase();
+ var elementType = element.type;
+ if (elementType != null) {
+ elementType = elementType.toLowerCase();
+ }
+
+ // routine for all elements
+ // rules:
+ // - process only inputs, textareas and selects
+ // - elements muest have attribute "name"
+ // - elements must not be disabled
+ if (((elementTagName == "input" || elementTagName == "textarea" || elementTagName == "select") &&
+ (elementName != null && elementName != "")) && element.disabled == false) {
+
+ // routine for select elements
+ // rules:
+ // - if select-one and value-Attribute exist => "name=value"
+ // (also if value empty => "name=")
+ // - if select-one and value-Attribute don't exist =>
+ // "name=DisplayValue"
+ // - if select multi and multple selected => "name=value1&name=value2"
+ // - if select and selectedIndex=-1 don't submit
+ if (elementTagName == "select") {
+ // selectedIndex must be >= 0 sein to be submittet
+ if (element.selectedIndex >= 0) {
+ var uLen = element.options.length;
+ for ( var u = 0; u < uLen; u++) {
+ // find all selected options
+ if (element.options[u].selected == true) {
+ var elementOption = element.options[u];
+ stringBuffer[stringBuffer.length] = encodeURIComponent(elementName);
+ stringBuffer[stringBuffer.length] = "=";
+ if (elementOption.getAttribute("value") != null) {
+ stringBuffer[stringBuffer.length] = encodeURIComponent(elementOption.value);
+ } else {
+ stringBuffer[stringBuffer.length] = encodeURIComponent(elementOption.text);
+ }
+ stringBuffer[stringBuffer.length] = "&";
+ }
+ }
+ }
+ }
+
+ // routine for remaining elements
+ // rules:
+ // - don't submit no selects (processed above), buttons, reset buttons, submit buttons,
+ // - submit checkboxes and radio inputs only if checked
+ if ((elementTagName != "select" && elementType != "button"
+ && elementType != "reset" && elementType != "submit" && elementType != "image")
+ && ((elementType != "checkbox" && elementType != "radio") || element.checked)) {
+ stringBuffer[stringBuffer.length] = encodeURIComponent(elementName);
+ stringBuffer[stringBuffer.length] = "=";
+ stringBuffer[stringBuffer.length] = encodeURIComponent(element.value);
+ stringBuffer[stringBuffer.length] = "&";
+ }
+
+ }
+ }
}
\ No newline at end of file
Modified: myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_Exception.js
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_Exception.js?rev=780394&r1=780393&r2=780394&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_Exception.js (original)
+++ myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_Exception.js Sun May 31 09:32:13 2009
@@ -1,91 +1,91 @@
-/*
- * Copyright 2009 Ganesh Jung
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Author: Ganesh Jung (latest modification by $Author: werpu $)
- * Version: $Revision: 1.5 $ $Date: 2009/04/23 11:03:09 $
- *
- */
-
-_reserveMyfacesNamespaces();
-
-
-if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_Exception")) {
-
-
- myfaces._impl.xhrCore._Exception = function(sourceClass, threshold) {
- this.m_class = sourceClass
- this.m_threshold = threshold
- };
-
- /**
- * [STATIC]
- * static method used by static methods that throw errors
- */
- myfaces._impl.xhrCore._Exception.throwNewError = function(request, context, sourceClass, func, exception) {
- newException = new myfaces._impl.xhrCore._Exception(request, context, sourceClass, "ERROR");
- newException.throwError(request, context, func, exception);
- };
-
- /**
- * [STATIC]
- * static method used by static methods that throw warnings
- */
- myfaces._impl.xhrCore._Exception.throwNewWarning = function(request, context, sourceClass, func, message){
- newException = new myfaces._impl.xhrCore._Exception(request, context, sourceClass, "WARNING");
- newException.throwWarning(request, context, func, message);
- };
-
- /**
- * throws errors
- */
- myfaces._impl.xhrCore._Exception.prototype.throwError = function(request, context, func, exception) {
- if (this.m_threshold == "ERROR") {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_CLIENT_ERROR, exception.name,
- "MyFaces ERROR\n"
- + "Affected Class: " + this.m_class + "\n"
- + "Affected Method: " + func + "\n"
- + "Error name: " + exception.name + "\n"
- + "Error message: " + exception.message + "\n"
- + "Error description: " + exception.description + "\n"
- + "Error number: " + exception.number + "\n"
- + "Error line number: " + exception.lineNumber);
- }
- this.destroy();
- };
-
- /**
- * throws warnings
- */
- myfaces._impl.xhrCore._Exception.prototype.throwWarning = function(request, context, func, message) {
- if (this.m_threshold == "WARNING" || this.m_threshold == "ERROR") {
- jsf.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_CLIENT_ERROR, exception.name,
- "MyFaces WARNING\n[" + this.m_class + "::" + func + "]\n\n"
- + message);
- }
- this.destroy();
- };
-
- /**
- * cleanup activities if an error occurs
- */
- myfaces._impl.xhrCore._Exception.prototype.destroy = function() {
- if (myfaces._impl.xhrCore._AjaxRequestQueue.queue &&
- myfaces._impl.xhrCore._AjaxRequestQueue.queue != null) {
- // clear RequestQueue when an exception occurs
- myfaces._impl.xhrCore._AjaxRequestQueue.queue.clearQueue();
- }
- };
-
+/*
+ * Copyright 2009 Ganesh Jung
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Ganesh Jung (latest modification by $Author: ganeshpuri $)
+ * Version: $Revision: 1.2 $ $Date: 2009/05/30 17:54:57 $
+ *
+ */
+
+_reserveMyfacesNamespaces();
+
+
+if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_Exception")) {
+
+
+ myfaces._impl.xhrCore._Exception = function(sourceClass, threshold) {
+ this.m_class = sourceClass
+ this.m_threshold = threshold
+ };
+
+ /**
+ * [STATIC]
+ * static method used by static methods that throw errors
+ */
+ myfaces._impl.xhrCore._Exception.throwNewError = function(request, context, sourceClass, func, exception) {
+ newException = new myfaces._impl.xhrCore._Exception(request, context, sourceClass, "ERROR");
+ newException.throwError(request, context, func, exception);
+ };
+
+ /**
+ * [STATIC]
+ * static method used by static methods that throw warnings
+ */
+ myfaces._impl.xhrCore._Exception.throwNewWarning = function(request, context, sourceClass, func, message){
+ newException = new myfaces._impl.xhrCore._Exception(request, context, sourceClass, "WARNING");
+ newException.throwWarning(request, context, func, message);
+ };
+
+ /**
+ * throws errors
+ */
+ myfaces._impl.xhrCore._Exception.prototype.throwError = function(request, context, func, exception) {
+ if (this.m_threshold == "ERROR") {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_CLIENT_ERROR, exception.name,
+ "MyFaces ERROR\n"
+ + "Affected Class: " + this.m_class + "\n"
+ + "Affected Method: " + func + "\n"
+ + "Error name: " + exception.name + "\n"
+ + "Error message: " + exception.message + "\n"
+ + "Error description: " + exception.description + "\n"
+ + "Error number: " + exception.number + "\n"
+ + "Error line number: " + exception.lineNumber);
+ }
+ this.destroy();
+ };
+
+ /**
+ * throws warnings
+ */
+ myfaces._impl.xhrCore._Exception.prototype.throwWarning = function(request, context, func, message) {
+ if (this.m_threshold == "WARNING" || this.m_threshold == "ERROR") {
+ myfaces.ajax.sendError(request, context, myfaces._impl.core._jsfImpl._ERROR_CLIENT_ERROR, exception.name,
+ "MyFaces WARNING\n[" + this.m_class + "::" + func + "]\n\n"
+ + message);
+ }
+ this.destroy();
+ };
+
+ /**
+ * cleanup activities if an error occurs
+ */
+ myfaces._impl.xhrCore._Exception.prototype.destroy = function() {
+ if (myfaces._impl.xhrCore._AjaxRequestQueue.queue &&
+ myfaces._impl.xhrCore._AjaxRequestQueue.queue != null) {
+ // clear RequestQueue when an exception occurs
+ myfaces._impl.xhrCore._AjaxRequestQueue.queue.clearQueue();
+ }
+ };
+
}
\ No newline at end of file
Modified: myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_xhrCoreAdapter.js
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_xhrCoreAdapter.js?rev=780394&r1=780393&r2=780394&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_xhrCoreAdapter.js (original)
+++ myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/_impl/xhrCore/_xhrCoreAdapter.js Sun May 31 09:32:13 2009
@@ -1,65 +1,65 @@
-/*
- * Copyright 2009 Ganesh Jung
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- *
- * Author: Ganesh Jung (latest modification by $Author: werpu $)
- * Version: $Revision: 1.9 $ $Date: 2009/04/23 11:03:09 $
- *
- */
-
-_reserveMyfacesNamespaces();
-
-if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_Ajax")) {
-
-
- /**
- * Constructor
- */
- myfaces._impl.xhrCore._Ajax = function() {}
-
- /**
- * Spec. 13.3.1
- * Collect and encode input elements.
- * Additinoaly the hidden element javax.faces.ViewState
- * @param {String} FORM_ELEMENT - Client-Id of Form-Element
- * @return {String} - Concatenated String of the encoded input elements
- * and javax.faces.ViewState element
- */
- myfaces._impl.xhrCore._Ajax.prototype.getViewState = function(FORM_ELEMENT) {
- return myfaces._impl.xhrCore._AjaxRequestQueue.queue.m_request.getViewState();
- }
-
-
- /**
- * mapped options already have the exec and view properly in place
- * myfaces specifics can be found under mappedOptions.myFaces
- * @param ajaxContext the ajax context which also has to be pushed into the messages and into the response
- **/
-
- myfaces._impl.xhrCore._Ajax.prototype._ajaxRequest = function(source, sourceForm, context, passThroughValues ) {
- myfaces._impl.xhrCore._AjaxRequestQueue.queue.queueRequest(
- new myfaces._impl.xhrCore._AjaxRequest(source, sourceForm, context, passThroughValues));
- }
-
- /**
- * Spec. 13.3.3
- * Examining the response markup and updating the DOM tree
- * @param {XmlHttpRequest} request - the ajax request
- * @param {XmlHttpRequest} context - the ajax context
- */
- myfaces._impl.xhrCore._Ajax.prototype._ajaxResponse = function(request, context) {
- myfaces._impl.xhrCore._AjaxRequestQueue.queue.m_request.m_response.processResponse(request, context);
- }
-
+/*
+ * Copyright 2009 Ganesh Jung
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ * Author: Ganesh Jung (latest modification by $Author: ganeshpuri $)
+ * Version: $Revision: 1.1 $ $Date: 2009/05/26 21:24:42 $
+ *
+ */
+
+_reserveMyfacesNamespaces();
+
+if (!myfaces._impl._util._LangUtils.exists(myfaces._impl.xhrCore, "_Ajax")) {
+
+
+ /**
+ * Constructor
+ */
+ myfaces._impl.xhrCore._Ajax = function() {}
+
+ /**
+ * Spec. 13.3.1
+ * Collect and encode input elements.
+ * Additinoaly the hidden element javax.faces.ViewState
+ * @param {String} FORM_ELEMENT - Client-Id of Form-Element
+ * @return {String} - Concatenated String of the encoded input elements
+ * and javax.faces.ViewState element
+ */
+ myfaces._impl.xhrCore._Ajax.prototype.getViewState = function(FORM_ELEMENT) {
+ return myfaces._impl.xhrCore._AjaxRequestQueue.queue.m_request.getViewState();
+ }
+
+
+ /**
+ * mapped options already have the exec and view properly in place
+ * myfaces specifics can be found under mappedOptions.myFaces
+ * @param ajaxContext the ajax context which also has to be pushed into the messages and into the response
+ **/
+
+ myfaces._impl.xhrCore._Ajax.prototype._ajaxRequest = function(source, sourceForm, context, passThroughValues ) {
+ myfaces._impl.xhrCore._AjaxRequestQueue.queue.queueRequest(
+ new myfaces._impl.xhrCore._AjaxRequest(source, sourceForm, context, passThroughValues));
+ }
+
+ /**
+ * Spec. 13.3.3
+ * Examining the response markup and updating the DOM tree
+ * @param {XmlHttpRequest} request - the ajax request
+ * @param {XmlHttpRequest} context - the ajax context
+ */
+ myfaces._impl.xhrCore._Ajax.prototype._ajaxResponse = function(request, context) {
+ myfaces._impl.xhrCore._AjaxRequestQueue.queue.m_request.m_response.processResponse(request, context);
+ }
+
}
\ No newline at end of file
Modified: myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/api/jsf.js
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/api/jsf.js?rev=780394&r1=780393&r2=780394&view=diff
==============================================================================
--- myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/api/jsf.js (original)
+++ myfaces/core/branches/2_0_0/api/src/main/javascript/META-INF/resources/myfaces/api/jsf.js Sun May 31 09:32:13 2009
@@ -33,21 +33,16 @@
jsf = new Object();
}
-/*
- *just to make sure no questions arise, I simply prefer here a weak
- *typeless comparison just in case some frameworks try to interfere
- *by overriding null or fiddeling around with undefined or typeof in some ways
- *it is safer in this case than the standard way of doing a strong comparison
+/**
+ * just to make sure no questions arise, I simply prefer here a weak
+ * typeless comparison just in case some frameworks try to interfere
+ * by overriding null or fiddeling around with undefined or typeof in some ways
+ * it is safer in this case than the standard way of doing a strong comparison
**/
if ('undefined' == typeof jsf.ajax || null == jsf.ajax) {
jsf.ajax = new Object();
- //todo make this overridable by a configuration option
- /*
- myfaces.
- */
-
- jsf.ajax._impl = new (myfaces._impl._util._Utils.getGlobalConfig("jsfAjaxImpl", myfaces._impl.core._jsfImpl))();
+ jsf.ajax._impl = myfaces._impl._util._Utils.getGlobalConfig("jsfAjaxImpl", myfaces.ajax);
/**
* collect and encode data for a given form element (must be of type form)
@@ -73,7 +68,7 @@
* </ul>
*
* @param {String|Node} element: any dom element no matter being it html or jsf, from which the event is emitted
- * @param {|EVENT|}Êevent: any javascript event supported by that object
+ * @param {|EVENT|} event: any javascript event supported by that object
* @param {Map||} options : map of options being pushed into the ajax cycle
*/
jsf.ajax.request = function( element, event, options) {