IE fixes for xforms ui.

- IE doesn't support hasAttribute - made a wrapper

- IE doesn't allow setting arbitrary properties on node objects.  needed to change the prototype implicitly linked list into a stack.  ends up the code is actually a bit clearer.

git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@4826 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Ariel Backenroth
2007-01-14 22:14:43 +00:00
parent a82a06da02
commit 74cda67a27

View File

@@ -1553,7 +1553,9 @@ dojo.declare("alfresco.xforms.XFormsEvent",
{ {
var targetDomNode = document.getElementById(this.targetId + "-content"); var targetDomNode = document.getElementById(this.targetId + "-content");
if (!targetDomNode) if (!targetDomNode)
{
throw new Error("unable to find node " + this.targetId + "-content"); throw new Error("unable to find node " + this.targetId + "-content");
}
return targetDomNode.widget; return targetDomNode.widget;
} }
}); });
@@ -1567,10 +1569,10 @@ dojo.declare("alfresco.xforms.Binding",
this.readonly = this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":readonly"); this.readonly = this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":readonly");
this.required = this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":required"); this.required = this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":required");
this.nodeset = this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":nodeset"); this.nodeset = this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":nodeset");
this._type = (this.xformsNode.hasAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":type") this._type = (_hasAttribute(this.xformsNode, alfresco_xforms_constants.XFORMS_PREFIX + ":type")
? this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":type") ? this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":type")
: null); : null);
this.constraint = (this.xformsNode.hasAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":constraint") this.constraint = (_hasAttribute(this.xformsNode, alfresco_xforms_constants.XFORMS_PREFIX + ":constraint")
? this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":constraint") ? this.xformsNode.getAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":constraint")
: null); : null);
this.maximum = parseInt(this.xformsNode.getAttribute(alfresco_xforms_constants.ALFRESCO_PREFIX + ":maximum")); this.maximum = parseInt(this.xformsNode.getAttribute(alfresco_xforms_constants.ALFRESCO_PREFIX + ":maximum"));
@@ -1586,9 +1588,11 @@ dojo.declare("alfresco.xforms.Binding",
}, },
toString: function() toString: function()
{ {
return ("{id:" + this.id + return ("{id: " + this.id +
",type:" + this.getType() + ",type: " + this.getType() +
",nodeset:" + this.nodeset + "}"); ",required: " + this.required +
",readonly: " + this.readonly +
",nodeset: " + this.nodeset + "}");
} }
}); });
@@ -1806,7 +1810,7 @@ dojo.declare("alfresco.xforms.XForm",
}, },
_handleEventLog: function(events) _handleEventLog: function(events)
{ {
var prototypeClone = null; var prototypeClones = [];
for (var i = 0; i < events.childNodes.length; i++) for (var i = 0; i < events.childNodes.length; i++)
{ {
if (events.childNodes[i].nodeType != dojo.dom.ELEMENT_NODE) if (events.childNodes[i].nodeType != dojo.dom.ELEMENT_NODE)
@@ -1864,8 +1868,8 @@ dojo.declare("alfresco.xforms.XForm",
{ {
dojo.debug("cloning prototype " + originalId); dojo.debug("cloning prototype " + originalId);
var prototypeNode = _findElementById(this.xformsNode, originalId); var prototypeNode = _findElementById(this.xformsNode, originalId);
clone = prototypeNode.cloneNode(true); //clone = prototypeNode.cloneNode(true);
var clone = prototypeNode.ownerDocument.createElement(alfresco_xforms_constants.XFORMS_PREFIX + ":group"); clone = prototypeNode.ownerDocument.createElement(alfresco_xforms_constants.XFORMS_PREFIX + ":group");
clone.setAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":appearance", "repeated"); clone.setAttribute(alfresco_xforms_constants.XFORMS_PREFIX + ":appearance", "repeated");
for (var j = 0; j < prototypeNode.childNodes.length; j++) for (var j = 0; j < prototypeNode.childNodes.length; j++)
{ {
@@ -1873,8 +1877,18 @@ dojo.declare("alfresco.xforms.XForm",
} }
clone.setAttribute("id", prototypeId); clone.setAttribute("id", prototypeId);
} }
clone.parentClone = prototypeClone;
prototypeClone = clone; if (clone == null)
{
throw new Error("unable to clone prototype " + prototypeId);
}
dojo.debug("created clone " + clone.getAttribute("id") +
" nodeName " + clone.nodeName +
" parentClone " + (prototypeClones.length != 0
? prototypeClones.peek().getAttribute("id")
: null));
prototypeClones.push(clone);
break; break;
} }
case "chiba-id-generated": case "chiba-id-generated":
@@ -1882,16 +1896,16 @@ dojo.declare("alfresco.xforms.XForm",
var originalId = xfe.properties["originalId"]; var originalId = xfe.properties["originalId"];
dojo.debug("handleIdGenerated(" + xfe.targetId + ", " + originalId + ")"); dojo.debug("handleIdGenerated(" + xfe.targetId + ", " + originalId + ")");
var node = _findElementById(prototypeClone, originalId); var node = _findElementById(prototypeClones.peek(), originalId);
if (!node) if (!node)
throw new Error("unable to find " + originalId + throw new Error("unable to find " + originalId +
" in clone " + dojo.dom.innerXML(clone)); " in clone " + dojo.dom.innerXML(clone));
dojo.debug("applying id " + xfe.targetId + dojo.debug("applying id " + xfe.targetId +
" to " + node.nodeName + "(" + originalId + ")"); " to " + node.nodeName + "(" + originalId + ")");
node.setAttribute("id", xfe.targetId); node.setAttribute("id", xfe.targetId);
if (prototypeClone.parentClone) if (prototypeClones.length != 1)
{ {
var e = _findElementById(prototypeClone.parentClone, originalId); var e = _findElementById(prototypeClones[prototypeClones.length - 2], originalId);
if (e) if (e)
{ {
e.setAttribute(alfresco_xforms_constants.ALFRESCO_PREFIX + ":prototype", "true"); e.setAttribute(alfresco_xforms_constants.ALFRESCO_PREFIX + ":prototype", "true");
@@ -1903,15 +1917,18 @@ dojo.declare("alfresco.xforms.XForm",
{ {
var position = Number(xfe.properties["position"]) - 1; var position = Number(xfe.properties["position"]) - 1;
var originalId = xfe.properties["originalId"]; var originalId = xfe.properties["originalId"];
var clone = prototypeClone; var clone = prototypeClones.pop();
prototypeClone = clone.parentClone; if (prototypeClones.length != 0)
if (prototypeClone)
{ {
var parentRepeat = _findElementById(prototypeClone, xfe.targetId); dojo.debug("using parentClone " + prototypeClones.peek().getAttribute("id") +
" of " + clone.getAttribute("id"));
var parentRepeat = _findElementById(prototypeClones.peek(), xfe.targetId);
parentRepeat.appendChild(clone); parentRepeat.appendChild(clone);
} }
else else
{ {
dojo.debug("no parentClone found, directly insert " + clone.getAttribute("id") +
" on " + xfe.targetId);
xfe.getTarget().handleItemInserted(clone, position); xfe.getTarget().handleItemInserted(clone, position);
} }
break; break;
@@ -2001,6 +2018,15 @@ function _findElementById(node, id)
return null; return null;
} }
function _hasAttribute(node, name)
{
return (node == null
? false
: (node.hasAttribute
? node.hasAttribute(name)
: node.getAttribute(name) != null));
}
function create_ajax_request(target, serverMethod, methodArgs, load, error) function create_ajax_request(target, serverMethod, methodArgs, load, error)
{ {
var result = new dojo.io.Request(alfresco_xforms_constants.WEBAPP_CONTEXT + var result = new dojo.io.Request(alfresco_xforms_constants.WEBAPP_CONTEXT +
@@ -2127,6 +2153,8 @@ function _getElementsByTagNameNS(parentNode, ns, nsPrefix, tagName)
: parentNode.getElementsByTagName(nsPrefix + ":" + tagName)); : parentNode.getElementsByTagName(nsPrefix + ":" + tagName));
} }
// xpath wrapper
function _evaluateXPath(xpath, contextNode, result_type) function _evaluateXPath(xpath, contextNode, result_type)
{ {
var xmlDocument = contextNode.ownerDocument; var xmlDocument = contextNode.ownerDocument;
@@ -2204,6 +2232,14 @@ if (!Array.prototype.indexOf)
} }
} }
if (!Array.prototype.peek)
{
Array.prototype.peek = function(o)
{
return this[this.length - 1];
}
}
function FilePickerWidget(uploadId, node, value, readonly, change_callback, resize_callback) function FilePickerWidget(uploadId, node, value, readonly, change_callback, resize_callback)
{ {
this.uploadId = uploadId; this.uploadId = uploadId;