fixed not expanded onchange attribute, if widget type need to be expanded too, eg. log-viewer in CalDAV or eSync preferences

This commit is contained in:
Ralf Becker 2014-01-27 21:59:29 +00:00
parent d6b7350e5b
commit ace95f26b0
2 changed files with 22 additions and 21 deletions

View File

@ -84,7 +84,7 @@ function et2_form_name(_cname,_name)
* Checks whether the given value is of the given type. Strings are converted
* into the corresponding type. The (converted) value is returned. All supported
* types are listed in the et2_validTypes array.
*
*
* @param mixed _val value
* @param string _type a valid type eg. "string" or "js"
* @param string _attr attribute name
@ -102,7 +102,7 @@ function et2_checkType(_val, _type, _attr, _widget)
if(typeof _val != "undefined" && _val)
{
egw.debug("warn", "Widget %o: '" + _val + "' was not of specified _type '" +
egw.debug("warn", "Widget %o: '" + _val + "' was not of specified _type '" +
_type + (_attr != null ? "' for attribute '" + _attr + "' " : "") +
"and is now '" + res + "'",_widget);
}
@ -115,6 +115,13 @@ function et2_checkType(_val, _type, _attr, _widget)
return _val;
}
// we dont check default-value any further, that also fixes type="js" does NOT accept null,
// which happens on expanded values
if (_val === et2_typeDefaults[_type])
{
return _val;
}
// If the type is boolean, check whether the given value is exactly true or
// false. Otherwise check whether the value is the string "true" or "false".
if (_type == "boolean")
@ -204,7 +211,7 @@ function et2_checkType(_val, _type, _attr, _widget)
}
// Case 3: The value is already a valid css pixel value or a percentage
if (typeof _val == "string" &&
if (typeof _val == "string" &&
((_val.indexOf("px") == _val.length - 2 && !isNaN(_val.split("px")[0])) ||
(_val.indexOf("%") == _val.length - 1 && !isNaN(_val.split("%")[0]))))
{
@ -246,7 +253,7 @@ function et2_checkType(_val, _type, _attr, _widget)
}
}
}
if (typeof _val == "string")
{
return _val; // get compiled later in widgets own initAttributes, as widget is not yet initialised
@ -306,7 +313,7 @@ function et2_validateAttrib(_id, _attrib)
{
if (et2_validTypes.indexOf(_attrib["type"]) < 0)
{
egw.debug("error", "Invalid type '" + _attrib["type"] + "' for attribute '" + _id +
egw.debug("error", "Invalid type '" + _attrib["type"] + "' for attribute '" + _id +
"' supplied. Valid types are ", et2_validTypes);
}
}
@ -426,7 +433,7 @@ function et2_csvSplit(_str, _num, _delimiter, _enclosure)
// Split the string at the delimiter and join it again, when a enclosure is
// found at the beginning/end of a part
var parts = _str.split(_delimiter);
var parts = _str.split(_delimiter);
for (var n = 0; typeof parts[n] != "undefined"; n++)
{
var part = parts[n];
@ -559,7 +566,7 @@ function et2_activateLinks(_content)
*/
function et2_insertLinkText(_text, _node, _target)
{
if(!_node)
if(!_node)
{
egw.debug("warn", "et2_insertLinkText called without node", _text, _node, _target);
return;
@ -745,7 +752,7 @@ function et2_rangeSubstract(_ar1, _ar2)
/**
* Call a function specified by it's name (possibly dot separated, eg. "app.myapp.myfunc")
*
*
* @param string func dot-separated function name
* @param arguments variable number of arguments
* @returns {Boolean}

View File

@ -660,6 +660,13 @@ var et2_widget = Class.extend(
entry = null;
}
// if _nodeName / type-attribute contains something to expand (eg. type="@${row}[type]"),
// we need to expand it now as it defines the constructor and by that attributes parsed via parseXMLAttrs!
if (_nodeName.charAt(0) == '@' || _nodeName.indexOf('$') >= 0)
{
_nodeName = attributes["type"] = this.getArrayMgr('content').expandName(_nodeName);
}
// Get the constructor - if the widget is readonly, use the special "_ro"
// constructor if it is available
var constructor = typeof et2_registry[_nodeName] == "undefined" ?
@ -672,19 +679,6 @@ var et2_widget = Class.extend(
// Parse the attributes from the given XML attributes object
this.parseXMLAttrs(_node.attributes, attributes, constructor.prototype);
// check if parseXMLAttrs gives a different type attribute eg. type="@${row}[type]"
if (attributes.type && attributes.type != _nodeName)
{
// set _nodeName and constructor accordingly
_nodeName = attributes.type;
constructor = typeof et2_registry[_nodeName] == "undefined" ?
et2_placeholder : et2_registry[_nodeName];
if (readonly && typeof et2_registry[_nodeName + "_ro"] != "undefined")
{
constructor = et2_registry[_nodeName + "_ro"];
}
}
// Do an sanity check for the attributes
constructor.prototype.generateAttributeSet(attributes);