mirror of
https://github.com/EGroupware/egroupware.git
synced 2024-11-22 07:53:39 +01:00
Merge branch 'multitabs'
This commit is contained in:
commit
f88ae4f46a
@ -198,11 +198,16 @@ var AddressbookApp = /** @class */ (function (_super) {
|
||||
var extras = {
|
||||
index: index
|
||||
};
|
||||
var data = egw.dataGetUIDdata(_senders[0].id)['data'];
|
||||
// CRM list
|
||||
if (_action.id != 'view') {
|
||||
extras.crm_list = _action.id.replace('view-', '');
|
||||
}
|
||||
this.egw.open(id, 'addressbook', 'view', extras, '_self', 'addressbook');
|
||||
this.egw.openTab(id, 'addressbook', 'view', extras, {
|
||||
displayName: data.n_fn,
|
||||
icon: data.photo,
|
||||
id: id
|
||||
});
|
||||
};
|
||||
/**
|
||||
* Set link filter for the already open & rendered list
|
||||
|
@ -221,14 +221,18 @@ class AddressbookApp extends EgwApp
|
||||
var extras : any = {
|
||||
index: index
|
||||
};
|
||||
|
||||
var data = egw.dataGetUIDdata(_senders[0].id)['data'];
|
||||
// CRM list
|
||||
if(_action.id != 'view')
|
||||
{
|
||||
extras.crm_list = _action.id.replace('view-','');
|
||||
}
|
||||
|
||||
this.egw.open(id, 'addressbook', 'view', extras, '_self', 'addressbook');
|
||||
this.egw.openTab(id, 'addressbook', 'view', extras, {
|
||||
displayName: data.n_fn,
|
||||
icon: data.photo,
|
||||
id: id
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -345,8 +345,9 @@ var etemplate2 = /** @class */ (function () {
|
||||
* @param {function} _callback called after template is loaded
|
||||
* @param {object} _app local app object
|
||||
* @param {boolean} _no_et2_ready true: do not send et2_ready, used by et2_dialog to not overwrite app.js et2 object
|
||||
* @param {string} _open_target flag of string to distinguishe between tab target and normal app object
|
||||
*/
|
||||
etemplate2.prototype.load = function (_name, _url, _data, _callback, _app, _no_et2_ready) {
|
||||
etemplate2.prototype.load = function (_name, _url, _data, _callback, _app, _no_et2_ready, _open_target) {
|
||||
var app = _app || window.app;
|
||||
this.name = _name; // store top-level template name to have it available in widgets
|
||||
// store template base url, in case initial template is loaded via webdav, to use that for further loads too
|
||||
@ -364,7 +365,7 @@ var etemplate2 = /** @class */ (function () {
|
||||
var appname = _name.split('.')[0];
|
||||
// if no app object provided and template app is not currentapp (eg. infolog CRM view)
|
||||
// create private app object / closure with just classes / prototypes
|
||||
if (!_app && appname && appname != currentapp) {
|
||||
if (!_app && appname && appname != currentapp || _open_target == "_tab") {
|
||||
app = { classes: window.app.classes };
|
||||
}
|
||||
// remember used app object, to eg. use: onchange="widget.getInstanceMgr().app_object[app].callback()"
|
||||
@ -1019,7 +1020,7 @@ var etemplate2 = /** @class */ (function () {
|
||||
old.clear();
|
||||
}
|
||||
var et2 = new etemplate2(node, data.menuaction);
|
||||
et2.load(data.name, data.url, data.data);
|
||||
et2.load(data.name, data.url, data.data, null, null, null, data['open-target']);
|
||||
return true;
|
||||
}
|
||||
else {
|
||||
|
@ -438,8 +438,9 @@ export class etemplate2
|
||||
* @param {function} _callback called after template is loaded
|
||||
* @param {object} _app local app object
|
||||
* @param {boolean} _no_et2_ready true: do not send et2_ready, used by et2_dialog to not overwrite app.js et2 object
|
||||
* @param {string} _open_target flag of string to distinguishe between tab target and normal app object
|
||||
*/
|
||||
load(_name, _url, _data, _callback?, _app?, _no_et2_ready?)
|
||||
load(_name, _url, _data, _callback?, _app?, _no_et2_ready?, _open_target?)
|
||||
{
|
||||
let app = _app || window.app;
|
||||
this.name = _name; // store top-level template name to have it available in widgets
|
||||
@ -461,7 +462,7 @@ export class etemplate2
|
||||
const appname = _name.split('.')[0];
|
||||
// if no app object provided and template app is not currentapp (eg. infolog CRM view)
|
||||
// create private app object / closure with just classes / prototypes
|
||||
if (!_app && appname && appname != currentapp)
|
||||
if (!_app && appname && appname != currentapp || _open_target == "_tab")
|
||||
{
|
||||
app = {classes: window.app.classes};
|
||||
}
|
||||
@ -1309,7 +1310,7 @@ export class etemplate2
|
||||
if (old) old.clear();
|
||||
}
|
||||
const et2 = new etemplate2(node, data.menuaction);
|
||||
et2.load(data.name, data.url, data.data);
|
||||
et2.load(data.name, data.url, data.data, null, null, null, data['open-target']);
|
||||
return true;
|
||||
}
|
||||
else
|
||||
|
@ -153,7 +153,7 @@ var fw_base = (function(){ "use strict"; return Class.extend(
|
||||
*
|
||||
* @param {egw_fw_class_application} _app
|
||||
* @param {string} _url optional url, default index page of app
|
||||
* @param {bool} _hidden specifies, whether the application should be set active
|
||||
* @param {boolean} _hidden specifies, whether the application should be set active
|
||||
* after opening the tab
|
||||
* @param {int} _pos
|
||||
* @param {status} _status
|
||||
@ -671,6 +671,32 @@ var fw_base = (function(){ "use strict"; return Class.extend(
|
||||
}
|
||||
},
|
||||
|
||||
tabLinkHandler: function(_link, _extra)
|
||||
{
|
||||
var app = this.parseAppFromUrl(_link);
|
||||
if (app)
|
||||
{
|
||||
// add target flag
|
||||
_link += '&target=_tab';
|
||||
var appname = app.appName+":"+(_extra.id ? _extra.id : btoa(_link));
|
||||
// create an actual clone of existing app object
|
||||
this.applications[appname] = jQuery.extend(true, {}, app);
|
||||
// merge extra framework app data into the new one
|
||||
this.applications[appname] = jQuery.extend(true, this.applications[appname], _extra);
|
||||
this.applications[appname]['appName'] = appname; // better to control it here
|
||||
this.applications[appname]['indexUrl'] = _link;
|
||||
this.applications[appname]['tab'] = null; // must be rest to create a new tab
|
||||
this.applications[appname]['browser'] = null; // must be rest to create a new browser content
|
||||
|
||||
this.applicationTabNavigate(this.applications[appname], _link, false, -1, null);
|
||||
}
|
||||
else
|
||||
{
|
||||
egw_alertHandler("No appropriate target application has been found.",
|
||||
"Target link: " + _link);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
*
|
||||
* @param {type} _link
|
||||
@ -697,6 +723,19 @@ var fw_base = (function(){ "use strict"; return Class.extend(
|
||||
|
||||
if (app)
|
||||
{
|
||||
if (_app == '_tab')
|
||||
{
|
||||
// add target flag
|
||||
_link += '&target=_tab';
|
||||
var appname = app.appName+":"+btoa(_link);
|
||||
this.applications[appname] = jQuery.extend(true, {},app);
|
||||
this.applications[appname]['appName'] = appname;
|
||||
this.applications[appname]['indexUrl'] = _link;
|
||||
this.applications[appname]['tab'] = null;
|
||||
this.applications[appname]['browser'] = null;
|
||||
this.applications[appname]['title'] = 'view';
|
||||
app = this.getApplicationByName(appname);
|
||||
}
|
||||
this.applicationTabNavigate(app, _link);
|
||||
}
|
||||
else
|
||||
|
11
api/js/jsapi/egw_global.d.ts
vendored
11
api/js/jsapi/egw_global.d.ts
vendored
@ -993,6 +993,17 @@ declare interface IegwWndLocal extends IegwGlobal
|
||||
*/
|
||||
openPopup(_url : string, _width : number, _height : number|"availHeight", _windowName? : string, _app? : string|boolean,
|
||||
_returnID? : boolean, _status? : "yes"|"no", _skip_framework? : boolean) : Window|void;
|
||||
/**
|
||||
* View an EGroupware entry: opens a framework tab for the given app entry
|
||||
*
|
||||
* @param {string}|int|object _id either just the id or if app=="" "app:id" or object with all data
|
||||
* @param {string} _app app-name or empty (app is part of id)
|
||||
* @param {string} _type default "edit", possible "view", "view_list", "edit" (falls back to "view") and "add"
|
||||
* @param {object|string} _extra extra url parameters to append as object or string
|
||||
* @param {object} _framework_app framework app attributes e.g. title or displayName
|
||||
*/
|
||||
openTab(_id, _app, _type, _extra, _framework_app) : void;
|
||||
|
||||
/**
|
||||
* Get available height of screen
|
||||
*/
|
||||
|
@ -96,6 +96,8 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd)
|
||||
* @param {boolean} _check_popup_blocker TRUE check if browser pop-up blocker is on/off, FALSE no check
|
||||
* - This option only makes sense to be enabled when the open_link requested without user interaction
|
||||
* @memberOf egw
|
||||
*
|
||||
* @return {object|void} returns object for given specific target like '_tab'
|
||||
*/
|
||||
open: function(id_data, app, type, extra, target, target_app, _check_popup_blocker)
|
||||
{
|
||||
@ -221,9 +223,33 @@ egw.extend('open', egw.MODULE_WND_LOCAL, function(_egw, _wnd)
|
||||
{
|
||||
url = this.link(url, params);
|
||||
}
|
||||
if (target == '_tab') return {url: url};
|
||||
return this.open_link(url, target, popup, target_app, _check_popup_blocker);
|
||||
},
|
||||
|
||||
/**
|
||||
* View an EGroupware entry: opens a framework tab for the given app entry
|
||||
*
|
||||
* @param {string}|int|object _id either just the id or if app=="" "app:id" or object with all data
|
||||
* @param {string} _app app-name or empty (app is part of id)
|
||||
* @param {string} _type default "edit", possible "view", "view_list", "edit" (falls back to "view") and "add"
|
||||
* @param {object|string} _extra extra url parameters to append as object or string
|
||||
* @param {object} _framework_app framework app attributes e.g. title or displayName
|
||||
*/
|
||||
openTab: function(_id, _app, _type, _extra, _framework_app)
|
||||
{
|
||||
if (_wnd.framework && _wnd.framework.tabLinkHandler)
|
||||
{
|
||||
var data = this.open(_id, _app, _type, _extra, "_tab", false);
|
||||
// Use framework's link handler
|
||||
_wnd.framework.tabLinkHandler(data.url, _framework_app);
|
||||
}
|
||||
else
|
||||
{
|
||||
this.open(_id, _app, _type, _extra);
|
||||
}
|
||||
},
|
||||
|
||||
/**
|
||||
* Open a link, which can be either a menuaction, a EGroupware relative url or a full url
|
||||
*
|
||||
|
@ -1006,7 +1006,8 @@ abstract class Ajax extends Api\Framework
|
||||
// send Api\Preferences, so we dont need to request them in a second ajax request
|
||||
$GLOBALS['egw']->framework->response->call('egw.set_preferences',
|
||||
(array)$GLOBALS['egw_info']['user']['preferences'][$app], $app);
|
||||
|
||||
// flag to indicate target of output e.g. _tab
|
||||
if ($_GET['target']) $GLOBALS['egw']->framework->set_extra('open','target',$_GET['target']);
|
||||
// call application menuaction
|
||||
ob_start();
|
||||
$obj->$method();
|
||||
|
Loading…
Reference in New Issue
Block a user