forked from extern/egroupware
implementation of old server etemplate::js_pseudo_funcs() on client as et2_js_pseudo_funcs, thought we need to pass the namespace to et2_checkType!!!
This commit is contained in:
parent
d2adcf972d
commit
2aff9d170b
@ -103,12 +103,92 @@ function et2_evalBool(_val)
|
||||
return _val ? true : false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Concat et2 name together, eg. et2_concat("namespace","test[something]") == "namespace[test][something]"
|
||||
* @param variable number of arguments to contact
|
||||
* @returns string
|
||||
*/
|
||||
function et2_form_name(_cname,_name)
|
||||
{
|
||||
var parts = [];
|
||||
for(var i=0; i < arguments.length; ++i)
|
||||
{
|
||||
var name = arguments[i];
|
||||
if (typeof name == 'string' && name.length > 0) // et2_namespace("","test") === "test" === et2_namespace(null,"test")
|
||||
{
|
||||
parts = parts.concat(name.replace(/]/g,'').split('['));
|
||||
}
|
||||
}
|
||||
var name = parts.shift();
|
||||
return parts.length ? name + '['+parts.join('][')+']' : name;
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve javascript pseudo functions in onclick or onchange:
|
||||
* - egw::link('$l','$p') calls egw.link($l,$p)
|
||||
* - form::name('name') returns expanded name/id taking into account the name at that point of the template hierarchy
|
||||
* - egw::lang('Message ...') translate the message, calls egw.lang()
|
||||
* - confirm('message') translates 'message' and adds a '?' if not present
|
||||
* - window.open() replaces it with egw_openWindowCentered2()
|
||||
* - xajax_doXMLHTTP('etemplate. replace ajax calls in widgets with special handler not requiring etemplate run rights
|
||||
*
|
||||
* @param string _val onclick, onchange, ... action
|
||||
* @param string _cname name-prefix / name-space
|
||||
* @return string
|
||||
*/
|
||||
function et2_js_pseudo_funcs(_val, _cname)
|
||||
{
|
||||
if (_val.indexOf('egw::link(') != -1)
|
||||
{
|
||||
_val = _val.replace(/egw::link\(/g,'egw.link(');
|
||||
}
|
||||
|
||||
if (_val.indexOf('form::name(') != -1)
|
||||
{
|
||||
_val = _val.replace(/form::name\(/g,_cname ? "et2_form_name('"+_cname+"'," : '(');
|
||||
}
|
||||
|
||||
if (_val.indexOf('egw::lang(') != -1)
|
||||
{
|
||||
_val = _val.replace('/egw::lang\(/g','egw.lang(');
|
||||
}
|
||||
|
||||
// ToDo: inserts the styles of a named template
|
||||
/*if (preg_match('/template::styles\(["\']{1}(.*)["\']{1}\)/U',$on,$matches))
|
||||
{
|
||||
$tpl = $matches[1] == $this->name ? $this : new etemplate($matches[1]);
|
||||
$on = str_replace($matches[0],"'<style>".str_replace(array("\n","\r"),'',$tpl->style)."</style>'",$on);
|
||||
}*/
|
||||
|
||||
// translate messages in confirm()
|
||||
if (_val.indexOf('confirm(') != -1)
|
||||
{
|
||||
_val = _val.replace(/confirm\((['"])(.*?)(\?)?['"]\)/,"confirm(egw.lang($1$2$1)+'$3')"); // add ? if not there, saves extra phrase
|
||||
}
|
||||
|
||||
// replace window.open() with EGw's egw_openWindowCentered2()
|
||||
if (_val.indexOf('window.open(') != -1)
|
||||
{
|
||||
_val = _val.replace(/window.open\('(.*)','(.*)','dependent=yes,width=([^,]*),height=([^,]*),scrollbars=yes,status=(.*)'\)/,
|
||||
"egw_openWindowCentered2('$1', '$2', $3, $4, '$5')");
|
||||
}
|
||||
|
||||
// replace xajax calls to code in widgets, with the "etemplate" handler,
|
||||
// this allows to call widgets with the current app, otherwise everyone would need etemplate run rights
|
||||
if (_val.indexOf("xajax_doXMLHTTP('etemplate.") != -1)
|
||||
{
|
||||
_val = _val.replace(/^xajax_doXMLHTTP\('etemplate\.([a-z]+_widget\.[a-zA-Z0-9_]+)\'/,
|
||||
"xajax_doXMLHTTP('"+egw.getAppName()+".$1.etemplate'");
|
||||
}
|
||||
return _val;
|
||||
}
|
||||
|
||||
/**
|
||||
* 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.
|
||||
*/
|
||||
function et2_checkType(_val, _type, _attr)
|
||||
function et2_checkType(_val, _type, _attr, _cname)
|
||||
{
|
||||
if (typeof _attr == "undefined")
|
||||
{
|
||||
@ -170,10 +250,11 @@ function et2_checkType(_val, _type, _attr)
|
||||
{
|
||||
if (_val !== "")
|
||||
{
|
||||
// TODO: Parse JS code properly
|
||||
_val = _val.replace(/egw::link\(/g,'egw.link(');
|
||||
try
|
||||
{
|
||||
// Parse JS code properly
|
||||
_val = et2_js_pseudo_funcs(_val, _cname);
|
||||
|
||||
return new Function(_val);
|
||||
}
|
||||
catch(e)
|
||||
|
@ -1,5 +1,9 @@
|
||||
var basic_data = {
|
||||
content: {
|
||||
"progress": "50%",
|
||||
"namespace": {
|
||||
"test": "namespace[test]"
|
||||
},
|
||||
"test": "test"
|
||||
}
|
||||
}
|
||||
|
@ -34,5 +34,8 @@
|
||||
<progress id="progress" href="http://www.egroupware.org/" extra_link_target="_blank" />
|
||||
<image label="Image" src="/egroupware/phpgwapi/templates/default/images/logo.png" href="http://www.egroupware.org/" extra_link_target="_blank" />
|
||||
<description value="www.egroupware.org" href="http://www.egroupware.org/" extra_link_target="_blank" />
|
||||
<box id="namespace">
|
||||
<textbox label="namespace[test]" id="test" onchange="alert(form::name('test')+'='+this.value)"/>
|
||||
</box>
|
||||
</vbox>
|
||||
</overlay>
|
||||
|
Loading…
Reference in New Issue
Block a user