moving egw_preferences (handler to call preferenes, acl or categories) from jsapi.js to egw_preferences.js show_preferences() method

This commit is contained in:
Ralf Becker 2014-02-07 14:04:12 +00:00
parent 899c04abb5
commit ca334ad13b
5 changed files with 93 additions and 92 deletions

View File

@ -1363,7 +1363,7 @@ abstract class egw_framework
'id' => $type,
'name' => 'preferences',
'title' => lang($types[$type]['title']),
'url' => "javascript:egw_preferences('$type',".json_encode($apps).')',
'url' => "javascript:egw.show_preferences(\"$type\",".json_encode($apps).')',
));
}

View File

@ -133,7 +133,7 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) {
{
// Log for debugging purposes - special log tag 'navigation' always
// goes in user log, if user log is enabled
egw.debug("navigation",
egw.debug("navigation",
"egw.open(id_data=%o, app=%s, type=%s, extra=%o, target=%s, target_app=%s)",
id_data,app,type,extra,target,target_app
);
@ -247,7 +247,7 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) {
"egw.open_link(_link=%s, _target=%s, _popup=%s, _target_app=%s)",
_link,_target,_popup,_target_app
);
var url = _link;
if (url.indexOf('javascript:') == 0)
{
@ -280,7 +280,7 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) {
return popup_window;
}
else if (typeof _wnd.egw_link_handler == 'function' && (typeof _target == 'undefined' || _target =='_self' || typeof this.link_app_list()[_target] != "undefined"))
else if ((typeof _target == 'undefined' || _target == '_self' || typeof this.link_app_list()[_target] != "undefined"))
{
if(_target == '_self')
{
@ -288,16 +288,30 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd) {
_target = undefined;
}
// Use framework's link handler, if present
return _wnd.egw_link_handler(url,_target);
}
else if (_target == '_self')
{
_wnd.location.href = url;
return this.link_handler(url,_target);
}
else
{
return _wnd.open(url, _target);
}
},
/**
* Use frameworks (framed template) link handler to open a url
*
* @param {string} _url
* @param {string} _target
*/
link_handler: function(_url, _target)
{
if (_wnd.framework)
{
_wnd.framework.linkHandler(_url, _target);
}
else
{
_wnd.location.href = _url;
}
}
};
});

View File

@ -31,8 +31,8 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function() {
/**
* Setting prefs for an app or 'common'
*
* @param object _data object with name: value pairs to set
* @param string _app application name, 'common' or undefined to prefes of all apps at once
* @param {object} _data object with name: value pairs to set
* @param {string} _app application name, 'common' or undefined to prefes of all apps at once
*/
set_preferences: function(_data, _app)
{
@ -51,8 +51,8 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function() {
*
* If a prefernce is not already loaded (only done for "common" by default), it is synchroniosly queryed from the server!
*
* @param string _name name of the preference, eg. 'dateformat', or '*' to get all the application's preferences
* @param string _app='common'
* @param {string} _name name of the preference, eg. 'dateformat', or '*' to get all the application's preferences
* @param {string} _app default 'common'
* @return string preference value
* @todo add a callback to query it asynchron
*/
@ -76,9 +76,9 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function() {
*
* Server will silently ignore setting preferences, if user has no right to do so!
*
* @param string _app application name or "common"
* @param string _name name of the pref
* @param string _val value of the pref
* @param {string} _app application name or "common"
* @param {string} _name name of the pref
* @param {string} _val value of the pref
*/
set_preference: function(_app, _name, _val)
{
@ -86,8 +86,60 @@ egw.extend('preferences', egw.MODULE_GLOBAL, function() {
// update own preference cache, if _app prefs are loaded (dont update otherwise, as it would block loading of other _app prefs!)
if (typeof prefs[_app] != 'undefined') prefs[_app][_name] = _val;
},
/**
* Call context / open app specific preferences function
*
* @param {string} name type 'acl', 'prefs', or 'cats'
* @param {(array|object)} apps array with apps allowing to call that type, or object/hash with app and boolean or hash with url-params
*/
show_preferences: function (name, apps)
{
var current_app = this.app_name();
var query = {};
// give warning, if app does not support given type, but all apps link to common prefs, if they dont support prefs themselfs
if ($j.isArray(apps) && $j.inArray(current_app, apps) == -1 && name != 'prefs' ||
!$j.isArray(apps) && (typeof apps[current_app] == 'undefined' || !apps[current_app]))
{
egw_message(egw.lang('Not supported by current application!'), 'warning');
}
else
{
var url = '/index.php';
switch(name)
{
case 'prefs':
query.menuaction ='preferences.preferences_settings.index';
if ($j.inArray(current_app, apps) != -1) query.appname=current_app;
break;
case 'acl':
query.menuaction='preferences.preferences_acl.index';
query.acl_app=current_app;
query.ajax=true;
break;
case 'cats':
if (typeof apps[current_app] == 'object')
{
for(var key in apps[current_app])
{
query[key] = encodeURIComponent(apps[current_app][key]);
}
}
else
{
query.menuaction='preferences.preferences_categories_ui.index';
query.cats_app=current_app;
query.ajax=true;
}
break;
}
query.current_app = current_app;
egw.link_handler(egw.link(url, query), current_app);
}
}
};
});

View File

@ -193,6 +193,8 @@ function egw_getApp(_name)
/**
* Returns the name of the currently active application
*
* @deprecated use egw(window).app_name()
*/
function egw_getAppName()
{
@ -779,74 +781,15 @@ function dropdown_menu_hack(el)
}
/**
* Dummy link handler, which can be overwritten by templates
* Use frameworks (framed template) link handler to open a url
*
* @param _link
* @param _app
* @deprecated use egw(window).link_handler(_link, _app) instead
*/
function egw_link_handler(_link, _app)
{
if (window.framework)
{
window.framework.linkHandler(_link, _app);
}
else
{
window.location.href = _link;
}
}
/**
* Call context / open app specific preferences function
*
* @param string name type 'acl', 'prefs', or 'cats'
* @param array|object apps array with apps allowing to call that type, or object/hash with app and boolean or hash with url-params
*/
function egw_preferences(name, apps)
{
var current_app = egw_getAppName();
var query = {};
// give warning, if app does not support given type, but all apps link to common prefs, if they dont support prefs themselfs
if ($j.isArray(apps) && $j.inArray(current_app, apps) == -1 && name != 'prefs' ||
!$j.isArray(apps) && (typeof apps[current_app] == 'undefined' || !apps[current_app]))
{
egw_message(egw.lang('Not supported by current application!'), 'warning');
}
else
{
var url = '/index.php';
switch(name)
{
case 'prefs':
query.menuaction ='preferences.preferences_settings.index';
if ($j.inArray(current_app, apps) != -1) query.appname=current_app;
break;
case 'acl':
query.menuaction='preferences.preferences_acl.index';
query.acl_app=current_app;
query.ajax=true;
break;
case 'cats':
if (typeof apps[current_app] == 'object')
{
for(var key in apps[current_app])
{
query[key] = encodeURIComponent(apps[current_app][key]);
}
}
else
{
query.menuaction='preferences.preferences_categories_ui.index';
query.cats_app=current_app;
query.ajax=true;
}
break;
}
query.current_app = current_app;
egw_link_handler(egw.link(url, query), current_app);
}
egw(window).link_handler(_link, _app);
}
/**

View File

@ -65,21 +65,13 @@ egw_LAB.wait(function() {
var href_regexp = /^javascript:([^\(]+)\((.*)?\);?$/;
jQuery('#topmenu_items,#thesideboxcolumn').on('click','a[href^="javascript:"]',function(){
var matches = this.href.match(href_regexp);
if (matches && typeof window[matches[1]] == 'function') {
var args = [];
if (matches.length > 1 && matches[2] !== undefined) args = JSON.parse('['+matches[2].replace(/'/g,'"')+']');
window[matches[1]].apply(window.framework, args);
}
else if (matches && matches[1].indexOf('app.') == 0)
var args = [];
if (matches.length > 1 && matches[2] !== undefined)
{
return et2_call(matches[1],matches[2]);
args = JSON.parse('['+matches[2].replace(/'/g,'"')+']');
}
else
{
alert('Do NOT know how to execute '+this.href);
}
// return false to not execute link itself, which would violate CSP
return false;
args.unshift(matches[1]);
return et2_call.apply(this, args);
});
// make sidebox resizable with jQueryUI resizable