move et2_call method to egw.js to have it always available at window scope (it is NOT et2 specific), maybe we find a better/nicer place for it

This commit is contained in:
Ralf Becker 2014-06-23 08:10:40 +00:00
parent 0ab34ccfe5
commit d4bb8a00a9
2 changed files with 41 additions and 41 deletions

View File

@ -768,47 +768,6 @@ function et2_rangeSubstract(_ar1, _ar2)
return res;
}
/**
* Call a function specified by it's name (possibly dot separated, eg. "app.myapp.myfunc")
*
* @param {string} _func dot-separated function name
* variable number of arguments
* @returns {Boolean}
*/
function et2_call(_func)
{
var args = [].slice.call(arguments); // convert arguments to array
var func = args.shift();
var parent = window;
if (typeof _func == 'string')
{
var parts = _func.split('.');
func = parts.pop();
for(var i=0; i < parts.length; ++i)
{
if (typeof parent[parts[i]] != 'undefined')
{
parent = parent[parts[i]];
}
// check if we need a not yet instanciated app.js object --> instanciate it now
else if (i == 1 && parts[0] == 'app' && typeof window.app.classes[parts[1]] == 'function')
{
parent = parent[parts[1]] = new window.app.classes[parts[1]]();
}
}
if (typeof parent[func] == 'function')
{
func = parent[func];
}
}
if (typeof func != 'function')
{
throw _func+" is not a function!";
}
return func.apply(parent, args);
}
/**
* Decode html entities so they can be added via .text(_str), eg. html_entity_decode('&amp;') === '&'
*

View File

@ -260,3 +260,44 @@
}
};
})();
/**
* Call a function specified by it's name (possibly dot separated, eg. "app.myapp.myfunc")
*
* @param {string} _func dot-separated function name
* variable number of arguments
* @returns {Boolean}
*/
function et2_call(_func)
{
var args = [].slice.call(arguments); // convert arguments to array
var func = args.shift();
var parent = window;
if (typeof _func == 'string')
{
var parts = _func.split('.');
func = parts.pop();
for(var i=0; i < parts.length; ++i)
{
if (typeof parent[parts[i]] != 'undefined')
{
parent = parent[parts[i]];
}
// check if we need a not yet instanciated app.js object --> instanciate it now
else if (i == 1 && parts[0] == 'app' && typeof window.app.classes[parts[1]] == 'function')
{
parent = parent[parts[1]] = new window.app.classes[parts[1]]();
}
}
if (typeof parent[func] == 'function')
{
func = parent[func];
}
}
if (typeof func != 'function')
{
throw _func+" is not a function!";
}
return func.apply(parent, args);
}