Author: alexsmirnov
Date: 2008-02-05 13:04:57 -0500 (Tue, 05 Feb 2008)
New Revision: 5837
Removed:
trunk/framework/impl/src/test/resources/bindedtest.skin.properties
Modified:
trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/nekko/NekkoParser.java
trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js
trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa.js
trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa_ieemu_xpath.js
trunk/samples/seamPortletEar/ear/pom.xml
trunk/samples/tomahawkCompability/pom.xml
trunk/samples/tomahawkCompability/src/main/webapp/WEB-INF/faces-config.xml
Log:
Update Sarissa library to version 0.9.9
Modified: trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/nekko/NekkoParser.java
===================================================================
---
trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/nekko/NekkoParser.java 2008-02-05
17:57:49 UTC (rev 5836)
+++
trunk/framework/impl/src/main/java/org/ajax4jsf/webapp/nekko/NekkoParser.java 2008-02-05
18:04:57 UTC (rev 5837)
@@ -425,6 +425,9 @@
return;
}
}
+ if (!headParsed && "head".equalsIgnoreCase(element.rawname)) {
+ insertResources();
+ }
super.endElement(element, augs);
}
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js 2008-02-05 17:57:49 UTC
(rev 5836)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/JSFAJAX.js 2008-02-05 18:04:57 UTC
(rev 5837)
@@ -904,7 +904,7 @@
return;
}
LOG.debug("replace all page content with response");
- var isIE = _SARISSA_IS_IE;
+ var isIE = Sarissa._SARISSA_IS_IE;
// maksimkaszynski
//Prevent "Permission denied in IE7"
//Reset calling principal
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa.js 2008-02-05 17:57:49 UTC
(rev 5836)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa.js 2008-02-05 18:04:57 UTC
(rev 5837)
@@ -1,12 +1,11 @@
/**
* ====================================================================
- * About
+ * About Sarissa:
http://dev.abiss.gr/sarissa
* ====================================================================
* Sarissa is an ECMAScript library acting as a cross-browser wrapper for native XML
APIs.
* The library supports Gecko based browsers like Mozilla and Firefox,
- * Internet Explorer (5.5+ with MSXML3.0+), Konqueror, Safari and a little of Opera
- * @version ${project.version}
- * @author: Manos Batsis, mailto: mbatsis at users full stop sourceforge full stop net
+ * Internet Explorer (5.5+ with MSXML3.0+), Konqueror, Safari and Opera
+ * @author: @author: Copyright 2004-2007 Emmanouil Batsis, mailto: mbatsis at users full
stop sourceforge full stop net
* ====================================================================
* Licence
* ====================================================================
@@ -17,6 +16,7 @@
* In case your copy of Sarissa does not include the license texts, you may find
* them online in various formats at <a
href="http://www.gnu.org">http://www.gnu.org</a> and
* <a href="http://www.apache.org">http://www.apache.org</a>.
+ *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY
* KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
* WARRANTIES OF MERCHANTABILITY,FITNESS FOR A PARTICULAR PURPOSE
@@ -30,45 +30,72 @@
* <p>Sarissa is a utility class. Provides "static" methods for
DOMDocument,
* DOM Node serialization to XML strings and other utility goodies.</p>
* @constructor
+ * @static
*/
-function Sarissa(){};
-Sarissa.VERSION = "${project.version}";
+function Sarissa(){}
+Sarissa.VERSION = "0.9.9";
Sarissa.PARSED_OK = "Document contains no parsing errors";
Sarissa.PARSED_EMPTY = "Document is empty";
Sarissa.PARSED_UNKNOWN_ERROR = "Not well-formed or other error";
Sarissa.IS_ENABLED_TRANSFORM_NODE = false;
-var _sarissa_iNsCounter = 0;
-var _SARISSA_IEPREFIX4XSLPARAM = "";
-var _SARISSA_HAS_DOM_IMPLEMENTATION = document.implementation && true;
-var _SARISSA_HAS_DOM_CREATE_DOCUMENT = _SARISSA_HAS_DOM_IMPLEMENTATION &&
document.implementation.createDocument;
-var _SARISSA_HAS_DOM_FEATURE = _SARISSA_HAS_DOM_IMPLEMENTATION &&
document.implementation.hasFeature;
-var _SARISSA_IS_MOZ = _SARISSA_HAS_DOM_CREATE_DOCUMENT &&
_SARISSA_HAS_DOM_FEATURE;
-var _SARISSA_IS_SAFARI = (navigator.userAgent && navigator.vendor &&
(navigator.userAgent.toLowerCase().indexOf("applewebkit") != -1 ||
navigator.vendor.indexOf("Apple") != -1));
-var _SARISSA_IS_IE = document.all && window.ActiveXObject &&
navigator.userAgent.toLowerCase().indexOf("msie") > -1 &&
navigator.userAgent.toLowerCase().indexOf("opera") == -1;
+Sarissa.REMOTE_CALL_FLAG = "gr.abiss.sarissa.REMOTE_CALL_FLAG";
+/** @private */
+Sarissa._sarissa_iNsCounter = 0;
+/** @private */
+Sarissa._SARISSA_IEPREFIX4XSLPARAM = "";
+/** @private */
+Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION = document.implementation && true;
+/** @private */
+Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT = Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION
&& document.implementation.createDocument;
+/** @private */
+Sarissa._SARISSA_HAS_DOM_FEATURE = Sarissa._SARISSA_HAS_DOM_IMPLEMENTATION &&
document.implementation.hasFeature;
+/** @private */
+Sarissa._SARISSA_IS_MOZ = Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT &&
Sarissa._SARISSA_HAS_DOM_FEATURE;
+/** @private */
+Sarissa._SARISSA_IS_SAFARI =
navigator.userAgent.toLowerCase().indexOf("safari") != -1 ||
navigator.userAgent.toLowerCase().indexOf("konqueror") != -1;
+/** @private */
+Sarissa._SARISSA_IS_SAFARI_OLD = Sarissa._SARISSA_IS_SAFARI &&
(parseInt((navigator.userAgent.match(/AppleWebKit\/(\d+)/)||{})[1], 10) < 420);
+/** @private */
+Sarissa._SARISSA_IS_IE = document.all && window.ActiveXObject &&
navigator.userAgent.toLowerCase().indexOf("msie") > -1 &&
navigator.userAgent.toLowerCase().indexOf("opera") == -1;
+/** @private */
+Sarissa._SARISSA_IS_OPERA = navigator.userAgent.toLowerCase().indexOf("opera")
!= -1;
if(!window.Node || !Node.ELEMENT_NODE){
Node = {ELEMENT_NODE: 1, ATTRIBUTE_NODE: 2, TEXT_NODE: 3, CDATA_SECTION_NODE: 4,
ENTITY_REFERENCE_NODE: 5, ENTITY_NODE: 6, PROCESSING_INSTRUCTION_NODE: 7, COMMENT_NODE:
8, DOCUMENT_NODE: 9, DOCUMENT_TYPE_NODE: 10, DOCUMENT_FRAGMENT_NODE: 11, NOTATION_NODE:
12};
-};
+}
+//This breaks for(x in o) loops in the old Safari
+if(Sarissa._SARISSA_IS_SAFARI_OLD){
+ HTMLHtmlElement = document.createElement("html").constructor;
+ Node = HTMLElement = {};
+ HTMLElement.prototype = HTMLHtmlElement.__proto__.__proto__;
+ HTMLDocument = Document = document.constructor;
+ var x = new DOMParser();
+ XMLDocument = x.constructor;
+ Element = x.parseFromString("<Single />",
"text/xml").documentElement.constructor;
+ x = null;
+}
if(typeof XMLDocument == "undefined" && typeof Document
!="undefined"){ XMLDocument = Document; }
// IE initialization
-if(_SARISSA_IS_IE){
+if(Sarissa._SARISSA_IS_IE){
// for XSLT parameter names, prefix needed by IE
- _SARISSA_IEPREFIX4XSLPARAM = "xsl:";
+ Sarissa._SARISSA_IEPREFIX4XSLPARAM = "xsl:";
// used to store the most recent ProgID available out of the above
var _SARISSA_DOM_PROGID = "";
var _SARISSA_XMLHTTP_PROGID = "";
var _SARISSA_DOM_XMLWRITER = "";
/**
- * Called when the Sarissa_xx.js file is parsed, to pick most recent
+ * Called when the sarissa.js file is parsed, to pick most recent
* ProgIDs for IE, then gets destroyed.
+ * @memberOf Sarissa
* @private
* @param idList an array of MSXML PROGIDs from which the most recent will be picked
for a given object
* @param enabledList an array of arrays where each array has two items; the index of
the PROGID for which a certain feature is enabled
*/
Sarissa.pickRecentProgID = function (idList){
// found progID flag
- var bFound = false;
+ var bFound = false, e;
+ var o2Store;
for(var i=0; i < idList.length && !bFound; i++){
try{
var oDoc = new ActiveXObject(idList[i]);
@@ -76,11 +103,12 @@
bFound = true;
}catch (objException){
// trap; try next progID
- };
- };
+ e = objException;
+ }
+ }
if (!bFound) {
- throw "Could not retreive a valid progID of Class: " +
idList[idList.length-1]+". (original exception: "+e+")";
- };
+ throw "Could not retrieve a valid progID of Class: " +
idList[idList.length-1]+". (original exception: "+e+")";
+ }
idList = null;
return o2Store;
};
@@ -97,10 +125,10 @@
XMLHttpRequest = function() {
if(!_SARISSA_XMLHTTP_PROGID){
_SARISSA_XMLHTTP_PROGID =
Sarissa.pickRecentProgID(["Msxml2.XMLHTTP.6.0", "MSXML2.XMLHTTP.3.0",
"MSXML2.XMLHTTP", "Microsoft.XMLHTTP"]);
- };
+ }
return new ActiveXObject(_SARISSA_XMLHTTP_PROGID);
};
- };
+ }
// we dont need this anymore
//============================================
// Factory methods (IE)
@@ -109,7 +137,7 @@
Sarissa.getDomDocument = function(sUri, sName){
if(!_SARISSA_DOM_PROGID){
_SARISSA_DOM_PROGID =
Sarissa.pickRecentProgID(["Msxml2.DOMDocument.6.0",
"Msxml2.DOMDocument.3.0", "MSXML2.DOMDocument",
"MSXML.DOMDocument", "Microsoft.XMLDOM"]);
- };
+ }
var oDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
// if a root tag name was provided, we need to load it in the DOM object
if (sName){
@@ -121,22 +149,22 @@
prefix = sName.substring(0, sName.indexOf(":"));
sName = sName.substring(sName.indexOf(":")+1);
}else{
- prefix = "a" + (_sarissa_iNsCounter++);
- };
- };
+ prefix = "a" + (Sarissa._sarissa_iNsCounter++);
+ }
+ }
// use namespaces if a namespace URI exists
if(sUri){
oDoc.loadXML('<' + prefix+':'+sName + "
xmlns:" + prefix + "=\"" + sUri + "\"" + "
/>");
} else {
oDoc.loadXML('<' + sName + " />");
- };
- };
+ }
+ }
return oDoc;
};
// see non-IE version
Sarissa.getParseErrorText = function (oDoc) {
var parseErrorText = Sarissa.PARSED_OK;
- if(oDoc && oDoc.parseError && oDoc.parseError.errorCode
&& oDoc.parseError.errorCode != 0){
+ if(oDoc && oDoc.parseError && oDoc.parseError.errorCode
&& oDoc.parseError.errorCode !== 0){
parseErrorText = "XML Parsing Error: " + oDoc.parseError.reason +
"\nLocation: " + oDoc.parseError.url +
"\nLine Number " + oDoc.parseError.line + ", Column "
+
@@ -145,28 +173,28 @@
"\n";
for(var i = 0; i < oDoc.parseError.linepos;i++){
parseErrorText += "-";
- };
+ }
parseErrorText += "^\n";
}
- else if(oDoc.documentElement == null){
+ else if(oDoc.documentElement === null){
parseErrorText = Sarissa.PARSED_EMPTY;
- };
+ }
return parseErrorText;
};
// see non-IE version
Sarissa.setXpathNamespaces = function(oDoc, sNsSet) {
oDoc.setProperty("SelectionLanguage", "XPath");
oDoc.setProperty("SelectionNamespaces", sNsSet);
- };
+ };
/**
- * Basic implementation of Mozilla's XSLTProcessor for IE.
+ * An implementation of Mozilla's XSLTProcessor for IE.
* Reuses the same XSLT stylesheet for multiple transforms
* @constructor
*/
XSLTProcessor = function(){
if(!_SARISSA_XSLTEMPLATE_PROGID){
_SARISSA_XSLTEMPLATE_PROGID =
Sarissa.pickRecentProgID(["Msxml2.XSLTemplate.6.0",
"MSXML2.XSLTemplate.3.0"]);
- };
+ }
this.template = new ActiveXObject(_SARISSA_XSLTEMPLATE_PROGID);
this.processor = null;
};
@@ -178,29 +206,39 @@
XSLTProcessor.prototype.importStylesheet = function(xslDoc){
if(!_SARISSA_THREADEDDOM_PROGID){
_SARISSA_THREADEDDOM_PROGID =
Sarissa.pickRecentProgID(["MSXML2.FreeThreadedDOMDocument.6.0",
"MSXML2.FreeThreadedDOMDocument.3.0"]);
- };
+ }
xslDoc.setProperty("SelectionLanguage", "XPath");
xslDoc.setProperty("SelectionNamespaces",
"xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
// convert stylesheet to free threaded
var converted = new ActiveXObject(_SARISSA_THREADEDDOM_PROGID);
// make included/imported stylesheets work if exist and xsl was originally loaded
from url
- if(xslDoc.url && xslDoc.selectSingleNode("//xsl:*[local-name() =
'import' or local-name() = 'include']") != null){
+ try{
+ converted.resolveExternals = true;
+ converted.setProperty("AllowDocumentFunction", true);
+ }
+ catch(e){
+ // Ignore. "AllowDocumentFunction" is only supported in MSXML 3.0
SP4 and later.
+ }
+ if(xslDoc.url && xslDoc.selectSingleNode("//xsl:*[local-name() =
'import' or local-name() = 'include']") !== null){
converted.async = false;
- if (_SARISSA_THREADEDDOM_PROGID ==
"MSXML2.FreeThreadedDOMDocument.6.0") {
- converted.setProperty("AllowDocumentFunction", true);
- converted.resolveExternals = true;
- }
converted.load(xslDoc.url);
- } else {
+ }
+ else {
converted.loadXML(xslDoc.xml);
- };
+ }
converted.setProperty("SelectionNamespaces",
"xmlns:xsl='http://www.w3.org/1999/XSL/Transform'");
var output = converted.selectSingleNode("//xsl:output");
- this.outputMethod = output ? output.getAttribute("method") :
"html";
+ //this.outputMethod = output ? output.getAttribute("method") :
"html";
+ if(output) {
+ this.outputMethod = output.getAttribute("method");
+ }
+ else {
+ delete this.outputMethod;
+ }
this.template.stylesheet = converted;
this.processor = this.template.createProcessor();
// for getParameter and clearParameters
- this.paramsSet = new Array();
+ this.paramsSet = [];
};
/**
@@ -210,9 +248,10 @@
*/
XSLTProcessor.prototype.transformToDocument = function(sourceDoc){
// fix for bug 1549749
+ var outDoc;
if(_SARISSA_THREADEDDOM_PROGID){
this.processor.input=sourceDoc;
- var outDoc=new ActiveXObject(_SARISSA_DOM_PROGID);
+ outDoc=new ActiveXObject(_SARISSA_DOM_PROGID);
this.processor.output=outDoc;
this.processor.transform();
return outDoc;
@@ -220,15 +259,15 @@
else{
if(!_SARISSA_DOM_XMLWRITER){
_SARISSA_DOM_XMLWRITER =
Sarissa.pickRecentProgID(["Msxml2.MXXMLWriter.6.0",
"Msxml2.MXXMLWriter.3.0", "MSXML2.MXXMLWriter",
"MSXML.MXXMLWriter", "Microsoft.XMLDOM"]);
- };
+ }
this.processor.input = sourceDoc;
- var outDoc = new ActiveXObject(_SARISSA_DOM_XMLWRITER);
+ outDoc = new ActiveXObject(_SARISSA_DOM_XMLWRITER);
this.processor.output = outDoc;
this.processor.transform();
var oDoc = new ActiveXObject(_SARISSA_DOM_PROGID);
oDoc.loadXML(outDoc.output+"");
return oDoc;
- };
+ }
};
/**
@@ -243,10 +282,11 @@
this.processor.transform();
var s = this.processor.output;
var f = ownerDoc.createDocumentFragment();
+ var container;
if (this.outputMethod == 'text') {
f.appendChild(ownerDoc.createTextNode(s));
} else if (ownerDoc.body && ownerDoc.body.innerHTML) {
- var container = ownerDoc.createElement('div');
+ container = ownerDoc.createElement('div');
container.innerHTML = s;
while (container.hasChildNodes()) {
f.appendChild(container.firstChild);
@@ -259,7 +299,7 @@
}
var xml = ''.concat('<my>', s, '</my>');
oDoc.loadXML(xml);
- var container = oDoc.documentElement;
+ container = oDoc.documentElement;
while (container.hasChildNodes()) {
f.appendChild(container.firstChild);
}
@@ -273,21 +313,22 @@
* @argument name The parameter base name
* @argument value The new parameter value
*/
- XSLTProcessor.prototype.setParameter = function(nsURI, name, value){
- // make value a zero length string if null to allow clearing
- value = value ? value : "";
- // nsURI is optional but cannot be null
- if(nsURI){
- this.processor.addParameter(name, value, nsURI);
- }else{
- this.processor.addParameter(name, value);
- };
- // update updated params for getParameter
- if(!this.paramsSet[""+nsURI]){
- this.paramsSet[""+nsURI] = new Array();
- };
- this.paramsSet[""+nsURI][name] = value;
- };
+ XSLTProcessor.prototype.setParameter = function(nsURI, name, value){
+ // make value a zero length string if null to allow clearing
+ value = value ? value : "";
+ // nsURI is optional but cannot be null
+ if(nsURI){
+ this.processor.addParameter(name, value, nsURI);
+ }else{
+ this.processor.addParameter(name, value);
+ }
+ // update updated params for getParameter
+ nsURI = "" + (nsURI || "");
+ if(!this.paramsSet[nsURI]){
+ this.paramsSet[nsURI] = [];
+ }
+ this.paramsSet[nsURI][name] = value;
+ };
/**
* Gets a parameter if previously set by setParameter. Returns null
* otherwise
@@ -296,30 +337,31 @@
* @return The parameter value if reviously set by setParameter, null otherwise
*/
XSLTProcessor.prototype.getParameter = function(nsURI, name){
- nsURI = "" + nsURI;
+ nsURI = "" + (nsURI || "");
if(this.paramsSet[nsURI] && this.paramsSet[nsURI][name]){
return this.paramsSet[nsURI][name];
}else{
return null;
- };
+ }
};
+
/**
* Clear parameters (set them to default values as defined in the stylesheet itself)
*/
XSLTProcessor.prototype.clearParameters = function(){
for(var nsURI in this.paramsSet){
for(var name in this.paramsSet[nsURI]){
- if(nsURI){
+ if(nsURI!==""){
this.processor.addParameter(name, "", nsURI);
}else{
this.processor.addParameter(name, "");
- };
- };
- };
- this.paramsSet = new Array();
+ }
+ }
+ }
+ this.paramsSet = [];
};
}else{ /* end IE initialization, try to deal with real browsers now ;-) */
- if(_SARISSA_HAS_DOM_CREATE_DOCUMENT){
+ if(Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT){
/**
* <p>Ensures the document was loaded correctly, otherwise sets the
* parseError to -1 to indicate something went wrong. Internal use</p>
@@ -338,6 +380,7 @@
/**
* <p>Sets the readyState property of the given DOM Document object.
* Internal use.</p>
+ * @memberOf Sarissa
* @private
* @argument oDoc the DOM Document object to fire the
* readystatechange event
@@ -346,9 +389,11 @@
Sarissa.__setReadyState__ = function(oDoc, iReadyState){
oDoc.readyState = iReadyState;
oDoc.readystate = iReadyState;
- if (oDoc.onreadystatechange != null && typeof oDoc.onreadystatechange
== "function")
+ if (oDoc.onreadystatechange !== null && typeof
oDoc.onreadystatechange == "function") {
oDoc.onreadystatechange();
+ }
};
+
Sarissa.getDomDocument = function(sUri, sName){
var oDoc = document.implementation.createDocument(sUri?sUri:null,
sName?sName:null, null);
if(!oDoc.onreadystatechange){
@@ -357,7 +402,7 @@
* <p>Emulate IE's onreadystatechange attribute</p>
*/
oDoc.onreadystatechange = null;
- };
+ }
if(!oDoc.readyState){
/**
* <p>Emulates IE's readyState property, which always gives an
integer from 0 to 4:</p>
@@ -367,17 +412,18 @@
* <li>4 == COMPLETED</li></ul>
*/
oDoc.readyState = 0;
- };
+ }
oDoc.addEventListener("load", _sarissa_XMLDocument_onload, false);
return oDoc;
};
if(window.XMLDocument){
// do nothing
}// TODO: check if the new document has content before trying to copynodes, check
for error handling in DOM 3 LS
- else if(_SARISSA_HAS_DOM_FEATURE && window.Document &&
!Document.prototype.load && document.implementation.hasFeature('LS',
'3.0')){
- //Opera 9 may get the XPath branch which gives creates XMLDocument, therefore
it doesn't reach here which is good
+ else if(Sarissa._SARISSA_HAS_DOM_FEATURE && window.Document &&
!Document.prototype.load && document.implementation.hasFeature('LS',
'3.0')){
+ //Opera 9 may get the XPath branch which gives creates XMLDocument, therefore it
doesn't reach here which is good
/**
* <p>Factory method to obtain a new DOM Document object</p>
+ * @memberOf Sarissa
* @argument sUri the namespace of the root node (if any)
* @argument sUri the local name of the root node (if any)
* @returns a new DOM Document
@@ -393,17 +439,17 @@
// looks like safari does not create the root element for some unknown
reason
if(oDoc && (sUri || sName) && !oDoc.documentElement){
oDoc.appendChild(oDoc.createElementNS(sUri, sName));
- };
+ }
return oDoc;
};
- };
- };//if(_SARISSA_HAS_DOM_CREATE_DOCUMENT)
-};
+ }
+ }//if(Sarissa._SARISSA_HAS_DOM_CREATE_DOCUMENT)
+}
//==========================================
// Common stuff
//==========================================
if(!window.DOMParser){
- if(_SARISSA_IS_SAFARI){
+ if(Sarissa._SARISSA_IS_SAFARI){
/*
* DOMParser is a utility class, used to construct DOMDocuments from XML strings
* @constructor
@@ -428,10 +474,10 @@
doc.loadXML(sXml);
return doc;
};
- };
-};
+ }
+}
-if((typeof(document.importNode) == "undefined") && _SARISSA_IS_IE){
+if((typeof(document.importNode) == "undefined") &&
Sarissa._SARISSA_IS_IE){
try{
/**
* Implementation of importNode for the context window document in IE.
@@ -443,7 +489,7 @@
document.importNode = function(oNode, bChildren){
var tmp;
if (oNode.nodeName=='#text') {
- return document.createTextElement(oNode.data);
+ return document.createTextNode(oNode.data);
}
else {
if(oNode.nodeName == "tbody" || oNode.nodeName ==
"tr"){
@@ -457,24 +503,24 @@
}
else{
tmp = document.createElement("div");
- };
+ }
if(bChildren){
tmp.innerHTML = oNode.xml ? oNode.xml : oNode.outerHTML;
}else{
tmp.innerHTML = oNode.xml ? oNode.cloneNode(false).xml :
oNode.cloneNode(false).outerHTML;
- };
+ }
return tmp.getElementsByTagName("*")[0];
- };
-
+ }
};
- }catch(e){ };
-};
+ }catch(e){ }
+}
if(!Sarissa.getParseErrorText){
/**
* <p>Returns a human readable description of the parsing error. Usefull
* for debugging. Tip: append the returned error string in a <pre>
* element if you want to render it.</p>
* <p>Many thanks to Christian Stocker for the initial patch.</p>
+ * @memberOf Sarissa
* @argument oDoc The target DOM document
* @returns The parsing error description of the target Document in
* human readable form (preformated text)
@@ -489,12 +535,18 @@
} else if(oDoc.getElementsByTagName("parsererror").length > 0){
var parsererror = oDoc.getElementsByTagName("parsererror")[0];
parseErrorText = Sarissa.getText(parsererror, true)+"\n";
- } else if(oDoc.parseError && oDoc.parseError.errorCode != 0){
+ } else if(oDoc.parseError && oDoc.parseError.errorCode !== 0){
parseErrorText = Sarissa.PARSED_UNKNOWN_ERROR;
- };
+ }
return parseErrorText;
};
-};
+}
+/**
+ * Get a string with the concatenated values of all string nodes under the given node
+ * @memberOf Sarissa
+ * @argument oNode the given DOM node
+ * @argument deep whether to recursively scan the children nodes of the given node for
text as well. Default is <code>false</code>
+ */
Sarissa.getText = function(oNode, deep){
var s = "";
var nodes = oNode.childNodes;
@@ -503,18 +555,13 @@
var nodeType = node.nodeType;
if(nodeType == Node.TEXT_NODE || nodeType == Node.CDATA_SECTION_NODE){
s += node.data;
- } else if(deep == true
- && (nodeType == Node.ELEMENT_NODE
- || nodeType == Node.DOCUMENT_NODE
- || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){
+ } else if(deep === true && (nodeType == Node.ELEMENT_NODE || nodeType ==
Node.DOCUMENT_NODE || nodeType == Node.DOCUMENT_FRAGMENT_NODE)){
s += Sarissa.getText(node, true);
- };
- };
+ }
+ }
return s;
};
-if(!window.XMLSerializer
- && Sarissa.getDomDocument
- && Sarissa.getDomDocument("","foo", null).xml){
+if(!window.XMLSerializer && Sarissa.getDomDocument &&
Sarissa.getDomDocument("","foo", null).xml){
/**
* Utility class to serialize DOM Node objects to XML strings
* @constructor
@@ -527,56 +574,65 @@
XMLSerializer.prototype.serializeToString = function(oNode) {
return oNode.xml;
};
-};
+}
/**
- * strips tags from a markup string
+ * Strips tags from the given markup string
+ * @memberOf Sarissa
*/
Sarissa.stripTags = function (s) {
return s.replace(/<[^>]+>/g,"");
};
/**
* <p>Deletes all child nodes of the given node</p>
+ * @memberOf Sarissa
* @argument oNode the Node to empty
*/
Sarissa.clearChildNodes = function(oNode) {
// need to check for firstChild due to opera 8 bug with hasChildNodes
while(oNode.firstChild) {
oNode.removeChild(oNode.firstChild);
- };
+ }
};
/**
* <p> Copies the childNodes of nodeFrom to nodeTo</p>
* <p> <b>Note:</b> The second object's original content is deleted
before
* the copy operation, unless you supply a true third parameter</p>
+ * @memberOf Sarissa
* @argument nodeFrom the Node to copy the childNodes from
* @argument nodeTo the Node to copy the childNodes to
* @argument bPreserveExisting whether to preserve the original content of nodeTo,
default is false
*/
Sarissa.copyChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {
+ if(Sarissa._SARISSA_IS_SAFARI && nodeTo.nodeType == Node.DOCUMENT_NODE){ //
SAFARI_OLD ??
+ nodeTo = nodeTo.documentElement; //Appearantly there's a bug in safari where you
can't appendChild to a document node
+ }
+
if((!nodeFrom) || (!nodeTo)){
throw "Both source and destination nodes must be provided";
- };
+ }
if(!bPreserveExisting){
Sarissa.clearChildNodes(nodeTo);
- };
+ }
var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo :
nodeTo.ownerDocument;
var nodes = nodeFrom.childNodes;
+ var i;
if(typeof(ownerDoc.importNode) != "undefined") {
- for(var i=0;i < nodes.length;i++) {
+ for(i=0;i < nodes.length;i++) {
nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
- };
+ }
} else {
- for(var i=0;i < nodes.length;i++) {
+ for(i=0;i < nodes.length;i++) {
nodeTo.appendChild(nodes[i].cloneNode(true));
- };
- };
+ }
+ }
};
/**
* <p> Moves the childNodes of nodeFrom to nodeTo</p>
* <p> <b>Note:</b> The second object's original content is deleted
before
* the move operation, unless you supply a true third parameter</p>
+ * @memberOf Sarissa
* @argument nodeFrom the Node to copy the childNodes from
* @argument nodeTo the Node to copy the childNodes to
* @argument bPreserveExisting whether to preserve the original content of nodeTo,
default is
@@ -584,81 +640,271 @@
Sarissa.moveChildNodes = function(nodeFrom, nodeTo, bPreserveExisting) {
if((!nodeFrom) || (!nodeTo)){
throw "Both source and destination nodes must be provided";
- };
+ }
if(!bPreserveExisting){
Sarissa.clearChildNodes(nodeTo);
- };
+ }
var nodes = nodeFrom.childNodes;
// if within the same doc, just move, else copy and delete
if(nodeFrom.ownerDocument == nodeTo.ownerDocument){
while(nodeFrom.firstChild){
nodeTo.appendChild(nodeFrom.firstChild);
- };
+ }
} else {
var ownerDoc = nodeTo.nodeType == Node.DOCUMENT_NODE ? nodeTo :
nodeTo.ownerDocument;
+ var i;
if(typeof(ownerDoc.importNode) != "undefined") {
- for(var i=0;i < nodes.length;i++) {
+ for(i=0;i < nodes.length;i++) {
nodeTo.appendChild(ownerDoc.importNode(nodes[i], true));
- };
+ }
}else{
- for(var i=0;i < nodes.length;i++) {
+ for(i=0;i < nodes.length;i++) {
nodeTo.appendChild(nodes[i].cloneNode(true));
- };
- };
+ }
+ }
Sarissa.clearChildNodes(nodeFrom);
- };
+ }
};
/**
- * <p>Serialize any object to an XML string. All properties are serialized using
the property name
+ * <p>Serialize any <strong>non</strong> DOM object to an XML string.
All properties are serialized using the property name
* as the XML element name. Array elements are rendered as
<code>array-item</code> elements,
* using their index/key as the value of the <code>key</code>
attribute.</p>
+ * @memberOf Sarissa
* @argument anyObject the object to serialize
* @argument objectName a name for that object
- * @return the XML serializationj of the given object as a string
+ * @return the XML serialization of the given object as a string
*/
Sarissa.xmlize = function(anyObject, objectName, indentSpace){
indentSpace = indentSpace?indentSpace:'';
var s = indentSpace + '<' + objectName + '>';
var isLeaf = false;
- if(!(anyObject instanceof Object) || anyObject instanceof Number || anyObject
instanceof String
- || anyObject instanceof Boolean || anyObject instanceof Date){
+ if(!(anyObject instanceof Object) || anyObject instanceof Number || anyObject
instanceof String || anyObject instanceof Boolean || anyObject instanceof Date){
s += Sarissa.escape(""+anyObject);
isLeaf = true;
}else{
s += "\n";
- var itemKey = '';
var isArrayItem = anyObject instanceof Array;
for(var name in anyObject){
s += Sarissa.xmlize(anyObject[name], (isArrayItem?"array-item
key=\""+name+"\"":name), indentSpace + " ");
- };
+ }
s += indentSpace;
- };
- return s += (objectName.indexOf('
')!=-1?"</array-item>\n":"</" + objectName +
">\n");
+ }
+ return (s += (objectName.indexOf('
')!=-1?"</array-item>\n":"</" + objectName +
">\n"));
};
/**
* Escape the given string chacters that correspond to the five predefined XML entities
+ * @memberOf Sarissa
* @param sXml the string to escape
*/
Sarissa.escape = function(sXml){
- return sXml.replace(/&/g, "&")
- .replace(/</g, "<")
- .replace(/>/g, ">")
- .replace(/"/g, """)
- .replace(/'/g, "'");
+ return sXml.replace(/&/g, "&").replace(/</g,
"<").replace(/>/g, ">").replace(/"/g,
""").replace(/'/g, "'");
};
/**
* Unescape the given string. This turns the occurences of the predefined XML
* entities to become the characters they represent correspond to the five predefined XML
entities
+ * @memberOf Sarissa
* @param sXml the string to unescape
*/
Sarissa.unescape = function(sXml){
- return sXml.replace(/'/g,"'")
- .replace(/"/g,"\"")
- .replace(/>/g,">")
- .replace(/</g,"<")
- .replace(/&/g,"&");
+ return
sXml.replace(/'/g,"'").replace(/"/g,"\"").replace(/>/g,">").replace(/</g,"<").replace(/&/g,"&");
};
+
+/** @private */
+Sarissa.updateCursor = function(oTargetElement, sValue) {
+ if(oTargetElement && oTargetElement.style &&
oTargetElement.style.cursor !== undefined ){
+ oTargetElement.style.cursor = sValue;
+ }
+};
+
+/**
+ * Asynchronously update an element with response of a GET request on the given URL.
Passing a configured XSLT
+ * processor will result in transforming and updating oNode before using it to update
oTargetElement.
+ * You can also pass a callback function to be executed when the update is finished. The
function will be called as
+ * <code>functionName(oNode, oTargetElement);</code>
+ * @memberOf Sarissa
+ * @param sFromUrl the URL to make the request to
+ * @param oTargetElement the element to update
+ * @param xsltproc (optional) the transformer to use on the returned
+ * content before updating the target element with it
+ * @param callback (optional) a Function object to execute once the update is finished
successfuly, called as <code>callback(oNode, oTargetElement)</code>
+ * @param skipCache (optional) whether to skip any cache
+ */
+Sarissa.updateContentFromURI = function(sFromUrl, oTargetElement, xsltproc, callback,
skipCache) {
+ try{
+ Sarissa.updateCursor(oTargetElement, "wait");
+ var xmlhttp = new XMLHttpRequest();
+ xmlhttp.open("GET", sFromUrl, true);
+ sarissa_dhtml_loadHandler = function() {
+ if (xmlhttp.readyState == 4) {
+ Sarissa.updateContentFromNode(xmlhttp.responseXML, oTargetElement,
xsltproc, callback);
+ }
+ };
+ xmlhttp.onreadystatechange = sarissa_dhtml_loadHandler;
+ if (skipCache) {
+ var oldage = "Sat, 1 Jan 2000 00:00:00 GMT";
+ xmlhttp.setRequestHeader("If-Modified-Since", oldage);
+ }
+ xmlhttp.send("");
+ }
+ catch(e){
+ Sarissa.updateCursor(oTargetElement, "auto");
+ throw e;
+ }
+};
+
+/**
+ * Update an element's content with the given DOM node. Passing a configured XSLT
+ * processor will result in transforming and updating oNode before using it to update
oTargetElement.
+ * You can also pass a callback function to be executed when the update is finished. The
function will be called as
+ * <code>functionName(oNode, oTargetElement);</code>
+ * @memberOf Sarissa
+ * @param oNode the URL to make the request to
+ * @param oTargetElement the element to update
+ * @param xsltproc (optional) the transformer to use on the given
+ * DOM node before updating the target element with it
+ * @param callback (optional) a Function object to execute once the update is finished
successfuly, called as <code>callback(oNode, oTargetElement)</code>
+ */
+Sarissa.updateContentFromNode = function(oNode, oTargetElement, xsltproc, callback) {
+ try {
+ Sarissa.updateCursor(oTargetElement, "wait");
+ Sarissa.clearChildNodes(oTargetElement);
+ // check for parsing errors
+ var ownerDoc = oNode.nodeType == Node.DOCUMENT_NODE?oNode:oNode.ownerDocument;
+ if(ownerDoc.parseError && ownerDoc.parseError !== 0) {
+ var pre = document.createElement("pre");
+
pre.appendChild(document.createTextNode(Sarissa.getParseErrorText(ownerDoc)));
+ oTargetElement.appendChild(pre);
+ }
+ else {
+ // transform if appropriate
+ if(xsltproc) {
+ oNode = xsltproc.transformToDocument(oNode);
+ }
+ // be smart, maybe the user wants to display the source instead
+ if(oTargetElement.tagName.toLowerCase() == "textarea" ||
oTargetElement.tagName.toLowerCase() == "input") {
+ oTargetElement.value = new XMLSerializer().serializeToString(oNode);
+ }
+ else {
+ // ok that was not smart; it was paranoid. Keep up the good work by
trying to use DOM instead of innerHTML
+ if(oNode.nodeType == Node.DOCUMENT_NODE ||
oNode.ownerDocument.documentElement == oNode) {
+ oTargetElement.innerHTML = new
XMLSerializer().serializeToString(oNode);
+ }
+ else{
+
oTargetElement.appendChild(oTargetElement.ownerDocument.importNode(oNode, true));
+ }
+ }
+ }
+ if (callback) {
+ callback(oNode, oTargetElement);
+ }
+ }
+ catch(e) {
+ throw e;
+ }
+ finally{
+ Sarissa.updateCursor(oTargetElement, "auto");
+ }
+};
+
+
+/**
+ * Creates an HTTP URL query string from the given HTML form data
+ * @memberOf Sarissa
+ */
+Sarissa.formToQueryString = function(oForm){
+ var qs = "";
+ for(var i = 0;i < oForm.elements.length;i++) {
+ var oField = oForm.elements[i];
+ var sFieldName = oField.getAttribute("name") ?
oField.getAttribute("name") : oField.getAttribute("id");
+ // ensure we got a proper name/id and that the field is not disabled
+ if(sFieldName &&
+ ((!oField.disabled) || oField.type == "hidden")) {
+ switch(oField.type) {
+ case "hidden":
+ case "text":
+ case "textarea":
+ case "password":
+ qs += sFieldName + "=" + encodeURIComponent(oField.value) +
"&";
+ break;
+ case "select-one":
+ qs += sFieldName + "=" +
encodeURIComponent(oField.options[oField.selectedIndex].value) + "&";
+ break;
+ case "select-multiple":
+ for (var j = 0; j < oField.length; j++) {
+ var optElem = oField.options[j];
+ if (optElem.selected === true) {
+ qs += sFieldName + "[]" + "=" +
encodeURIComponent(optElem.value) + "&";
+ }
+ }
+ break;
+ case "checkbox":
+ case "radio":
+ if(oField.checked) {
+ qs += sFieldName + "=" +
encodeURIComponent(oField.value) + "&";
+ }
+ break;
+ }
+ }
+ }
+ // return after removing last '&'
+ return qs.substr(0, qs.length - 1);
+};
+
+
+/**
+ * Asynchronously update an element with response of an XMLHttpRequest-based emulation of
a form submission. <p>The form <code>action</code> and
+ * <code>method</code> attributess will be followed. Passing a configured
XSLT processor will result in
+ * transforming and updating the server response before using it to update the target
element.
+ * You can also pass a callback function to be executed when the update is finished. The
function will be called as
+ * <code>functionName(oNode, oTargetElement);</code></p>
+ * <p>Here is an example of using this in a form element:</p>
+ * <pre name="code" class="xml"><form
action="/my/form/handler" method="post"
+ * onbeforesubmit="return Sarissa.updateContentFromForm(this,
document.getElementById('targetId'));"><pre>
+ * <p>If JavaScript is supported, the form will not be submitted. Instead, Sarissa
will
+ * scan the form and make an appropriate AJAX request, also adding a parameter
+ * to signal to the server that this is an AJAX call. The parameter is
+ * constructed as <code>Sarissa.REMOTE_CALL_FLAG = "=true"</code>
so you can change the name in your webpage
+ * simply by assigning another value to Sarissa.REMOTE_CALL_FLAG. If JavaScript is not
supported
+ * the form will be submitted normally.
+ * @memberOf Sarissa
+ * @param oForm the form submition to emulate
+ * @param oTargetElement the element to update
+ * @param xsltproc (optional) the transformer to use on the returned
+ * content before updating the target element with it
+ * @param callback (optional) a Function object to execute once the update is finished
successfuly, called as <code>callback(oNode, oTargetElement)</code>
+ * @param skipCache (optional) whether to skip any cache
+ */
+Sarissa.updateContentFromForm = function(oForm, oTargetElement, xsltproc, callback) {
+ try{
+ Sarissa.updateCursor(oTargetElement, "wait");
+ // build parameters from form fields
+ var params = Sarissa.formToQueryString(oForm) + "&" +
Sarissa.REMOTE_CALL_FLAG + "=true";
+ var xmlhttp = new XMLHttpRequest();
+ if(oForm.getAttribute("method") &&
oForm.getAttribute("method").toLowerCase() == "get") {
+ xmlhttp.open("GET",
oForm.getAttribute("action")+"?"+params, true);
+ }
+ else{
+ xmlhttp.open('POST', oForm.getAttribute("action"), true);
+ xmlhttp.setRequestHeader("Content-type",
"application/x-www-form-urlencoded");
+ xmlhttp.setRequestHeader("Content-length", params.length);
+ xmlhttp.setRequestHeader("Connection", "close");
+ }
+ sarissa_dhtml_loadHandler = function() {
+ if (xmlhttp.readyState == 4) {
+ Sarissa.updateContentFromNode(xmlhttp.responseXML, oTargetElement,
xsltproc, callback);
+ }
+ };
+ xmlhttp.onreadystatechange = sarissa_dhtml_loadHandler;
+ xmlhttp.send("");
+ }
+ catch(e){
+ Sarissa.updateCursor(oTargetElement, "auto");
+ throw e;
+ }
+ return false;
+};
+
// EOF
Modified: trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa_ieemu_xpath.js
===================================================================
--- trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa_ieemu_xpath.js 2008-02-05
17:57:49 UTC (rev 5836)
+++ trunk/framework/impl/src/main/javascript/ajaxjsf/sarissa_ieemu_xpath.js 2008-02-05
18:04:57 UTC (rev 5837)
@@ -3,8 +3,8 @@
* About
* ====================================================================
* Sarissa cross browser XML library - IE XPath Emulation
- * @version ${project.version}
- * @author: Manos Batsis, mailto: mbatsis at users full stop sourceforge full stop net
+ * @version 0.9.9
+ * @author: Copyright 2004-2007 Emmanouil Batsis, mailto: mbatsis at users full stop
sourceforge full stop net
*
* This script emulates Internet Explorer's selectNodes and selectSingleNode
* for Mozilla. Associating namespace prefixes with URIs for your XPath queries
@@ -12,7 +12,6 @@
* USers may also map a namespace prefix to a default (unprefixed) namespace in the
* source document with Sarissa.setXpathNamespaces
*
- *
* ====================================================================
* Licence
* ====================================================================
@@ -33,7 +32,7 @@
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*/
-if(_SARISSA_HAS_DOM_FEATURE &&
document.implementation.hasFeature("XPath", "3.0")){
+if(Sarissa._SARISSA_HAS_DOM_FEATURE &&
document.implementation.hasFeature("XPath", "3.0")){
/**
* <p>SarissaNodeList behaves as a NodeList but is only used as a result to
<code>selectNodes</code>,
* so it also has some properties IEs proprietery object features.</p>
@@ -41,7 +40,7 @@
* @constructor
* @argument i the (initial) list size
*/
- function SarissaNodeList(i){
+ SarissaNodeList = function (i){
this.length = i;
};
/** <p>Set an Array as the prototype object</p> */
@@ -197,4 +196,4 @@
throw "Method selectNodes is only supported by XML Elements";
};
Sarissa.IS_ENABLED_SELECT_NODES = true;
-};
+};
\ No newline at end of file
Deleted: trunk/framework/impl/src/test/resources/bindedtest.skin.properties
===================================================================
--- trunk/framework/impl/src/test/resources/bindedtest.skin.properties 2008-02-05 17:57:49
UTC (rev 5836)
+++ trunk/framework/impl/src/test/resources/bindedtest.skin.properties 2008-02-05 18:04:57
UTC (rev 5837)
@@ -1,4 +0,0 @@
-render.kit=TEST
-string.property=bindedstring
-int.property=10
-bind.property=\#{test.bean}
Modified: trunk/samples/seamPortletEar/ear/pom.xml
===================================================================
--- trunk/samples/seamPortletEar/ear/pom.xml 2008-02-05 17:57:49 UTC (rev 5836)
+++ trunk/samples/seamPortletEar/ear/pom.xml 2008-02-05 18:04:57 UTC (rev 5837)
@@ -60,6 +60,13 @@
</includeInApplicationXml>
<bundleDir>/</bundleDir>
</jarModule>
+ <webModule>
+ <groupId>org.richfaces.samples.seamPortletEar</groupId>
+ <artifactId>seamBookingPortlet</artifactId>
+ <contextRoot>
+ /portalBookingDemo
+ </contextRoot>
+ </webModule>
</modules>
<artifactTypeMappings>
<artifactTypeMapping type="jar" mapping="ejb" />
Modified: trunk/samples/tomahawkCompability/pom.xml
===================================================================
--- trunk/samples/tomahawkCompability/pom.xml 2008-02-05 17:57:49 UTC (rev 5836)
+++ trunk/samples/tomahawkCompability/pom.xml 2008-02-05 18:04:57 UTC (rev 5837)
@@ -3,7 +3,7 @@
<parent>
<artifactId>samples</artifactId>
<groupId>org.richfaces</groupId>
- <version>1.1.1-SNAPSHOT</version>
+ <version>3.2.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<groupId>org.richfaces.samples</groupId>
Modified: trunk/samples/tomahawkCompability/src/main/webapp/WEB-INF/faces-config.xml
===================================================================
--- trunk/samples/tomahawkCompability/src/main/webapp/WEB-INF/faces-config.xml 2008-02-05
17:57:49 UTC (rev 5836)
+++ trunk/samples/tomahawkCompability/src/main/webapp/WEB-INF/faces-config.xml 2008-02-05
18:04:57 UTC (rev 5837)
@@ -1,6 +1,9 @@
-<?xml version="1.0"?>
-<!DOCTYPE faces-config PUBLIC "-//Sun Microsystems, Inc.//DTD JavaServer Faces
Config 1.1//EN"
-
"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
+<?xml version="1.0"?>
+
+<!DOCTYPE faces-config PUBLIC
+ "-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.0//EN"
+ "http://java.sun.com/dtd/web-facesconfig_1_1.dtd" >
+
<faces-config>
<managed-bean>
<managed-bean-name>bean</managed-bean-name>