Create new sidemenuEntry for tab target

This commit is contained in:
Hadi Nategh 2020-09-28 15:43:42 +02:00
parent 7fa1e7cd80
commit cdbc5e3a71
4 changed files with 28 additions and 4 deletions

View File

@ -365,7 +365,7 @@ var etemplate2 = /** @class */ (function () {
var appname = _name.split('.')[0]; var appname = _name.split('.')[0];
// if no app object provided and template app is not currentapp (eg. infolog CRM view) // if no app object provided and template app is not currentapp (eg. infolog CRM view)
// create private app object / closure with just classes / prototypes // create private app object / closure with just classes / prototypes
if (!_app && appname && appname != currentapp || _open_target == "_tab") { if (!_app && appname && appname != currentapp || _open_target) {
app = { classes: window.app.classes }; app = { classes: window.app.classes };
} }
// remember used app object, to eg. use: onchange="widget.getInstanceMgr().app_object[app].callback()" // remember used app object, to eg. use: onchange="widget.getInstanceMgr().app_object[app].callback()"
@ -995,6 +995,8 @@ var etemplate2 = /** @class */ (function () {
} }
// handle framework.setSidebox calls // handle framework.setSidebox calls
if (window.framework && jQuery.isArray(data.setSidebox)) { if (window.framework && jQuery.isArray(data.setSidebox)) {
if (data['open-target'])
data.setSidebox[0] = data['open-target'];
window.framework.setSidebox.apply(window.framework, data.setSidebox); window.framework.setSidebox.apply(window.framework, data.setSidebox);
} }
// regular et2 re-load // regular et2 re-load

View File

@ -462,7 +462,7 @@ export class etemplate2
const appname = _name.split('.')[0]; const appname = _name.split('.')[0];
// if no app object provided and template app is not currentapp (eg. infolog CRM view) // if no app object provided and template app is not currentapp (eg. infolog CRM view)
// create private app object / closure with just classes / prototypes // create private app object / closure with just classes / prototypes
if (!_app && appname && appname != currentapp || _open_target == "_tab") if (!_app && appname && appname != currentapp || _open_target)
{ {
app = {classes: window.app.classes}; app = {classes: window.app.classes};
} }
@ -1280,6 +1280,8 @@ export class etemplate2
// handle framework.setSidebox calls // handle framework.setSidebox calls
if (window.framework && jQuery.isArray(data.setSidebox)) if (window.framework && jQuery.isArray(data.setSidebox))
{ {
if (data['open-target']) data.setSidebox[0] = data['open-target'];
window.framework.setSidebox.apply(window.framework, data.setSidebox); window.framework.setSidebox.apply(window.framework, data.setSidebox);
} }

View File

@ -563,6 +563,10 @@ var fw_base = (function(){ "use strict"; return Class.extend(
//As a new tab might remove a row from the tab header, we have to resize all tab content browsers //As a new tab might remove a row from the tab header, we have to resize all tab content browsers
this.tag.parentFw.resizeHandler(); this.tag.parentFw.resizeHandler();
if (app.appName.match(/:/))
{
app.destroy();
}
}, },
/** /**
@ -676,9 +680,9 @@ var fw_base = (function(){ "use strict"; return Class.extend(
var app = this.parseAppFromUrl(_link); var app = this.parseAppFromUrl(_link);
if (app) if (app)
{ {
// add target flag
_link += '&target=_tab';
var appname = app.appName+":"+(_extra.id ? _extra.id : btoa(_link)); var appname = app.appName+":"+(_extra.id ? _extra.id : btoa(_link));
// add target flag
_link += '&target='+appname;
// create an actual clone of existing app object // create an actual clone of existing app object
this.applications[appname] = jQuery.extend(true, {}, app); this.applications[appname] = jQuery.extend(true, {}, app);
// merge extra framework app data into the new one // merge extra framework app data into the new one
@ -687,6 +691,10 @@ var fw_base = (function(){ "use strict"; return Class.extend(
this.applications[appname]['indexUrl'] = _link; this.applications[appname]['indexUrl'] = _link;
this.applications[appname]['tab'] = null; // must be rest to create a new tab 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.applications[appname]['browser'] = null; // must be rest to create a new browser content
this.applications[appname]['sidemenuEntry'] = this.sidemenuUi.addEntry(
this.applications[appname].displayName, this.applications[appname].icon,
this.applicationClickCallback, this.applications[appname], appname);
this.applicationTabNavigate(this.applications[appname], _link, false, -1, null); this.applicationTabNavigate(this.applications[appname], _link, false, -1, null);
} }

View File

@ -51,6 +51,18 @@ function egw_fw_class_application(_parentFw, _appName, _displayName, _icon,
this.browser = null; this.browser = null;
} }
/**
* destroy application object and its relative parts
*/
egw_fw_class_application.prototype.destroy = function()
{
delete this.tab;
if (this.sidemenuEntry) this.sidemenuEntry.remove();
delete this.sidemenuEntry;
delete this.browser;
delete (framework.applications[this.appName]);
};
/** /**
* Returns an menuaction inside the jdots_framework for this application. * Returns an menuaction inside the jdots_framework for this application.
* without a "this" context (by directly calling egw_fw_class_application.prototype.getAjaxUrl) * without a "this" context (by directly calling egw_fw_class_application.prototype.getAjaxUrl)