mirror of
https://github.com/Alfresco/alfresco-community-repo.git
synced 2025-08-07 17:49:17 +00:00
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:
@@ -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;
|
||||||
|
Reference in New Issue
Block a user