Merge pull request #1311 from ONLYOFFICE/feature/alt-key

Feature/alt key
This commit is contained in:
Julia Radzhabova 2021-11-12 16:52:34 +03:00 committed by GitHub
commit a931219c8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
11 changed files with 106 additions and 63 deletions

View file

@ -182,6 +182,7 @@ define([
},
onInputKeyUp: function(e) {
if (!this._isKeyDown) return;
if (e.keyCode != Common.UI.Keys.RETURN && e.keyCode !== Common.UI.Keys.SHIFT &&
e.keyCode !== Common.UI.Keys.CTRL && e.keyCode !== Common.UI.Keys.ALT &&
e.keyCode !== Common.UI.Keys.LEFT && e.keyCode !== Common.UI.Keys.RIGHT &&
@ -213,9 +214,11 @@ define([
}, 10);
}
}
this._isKeyDown = false;
},
onInputKeyDown: function(e) {
this._isKeyDown = true;
this._inInputKeyDown = (new Date());
var me = this;

View file

@ -100,7 +100,7 @@ define([
'<li class="ribtab' +
'<% if (items[i].haspanel===false) print(" x-lone") %>' +
'<% if (items[i].extcls) print(\' \' + items[i].extcls) %>">' +
'<a data-tab="<%= items[i].action %>" data-title="<%= items[i].caption %>" data-hint="0" data-hint-direction="bottom" data-hint-offset="small"><%= items[i].caption %></a>' +
'<a data-tab="<%= items[i].action %>" data-title="<%= items[i].caption %>" data-hint="0" data-hint-direction="bottom" data-hint-offset="small" <% if (typeof items[i].dataHintTitle !== "undefined") { %> data-hint-title="<%= items[i].dataHintTitle %>" <% } %>><%= items[i].caption %></a>' +
'</li>' +
'<% } %>' +
'<% } %>' +
@ -316,7 +316,7 @@ define([
return config.tabs[index].action;
}
var _tabTemplate = _.template('<li class="ribtab" style="display: none;"><a data-tab="<%= action %>" data-title="<%= caption %>" data-hint="0" data-hint-direction="bottom" data-hint-offset="small"><%= caption %></a></li>');
var _tabTemplate = _.template('<li class="ribtab" style="display: none;"><a data-tab="<%= action %>" data-title="<%= caption %>" data-hint="0" data-hint-direction="bottom" data-hint-offset="small" <% if (typeof dataHintTitle !== "undefined") { %> data-hint-title="<%= dataHintTitle %>" <% } %> ><%= caption %></a></li>');
config.tabs[after + 1] = tab;
var _after_action = _get_tab_action(after);

View file

@ -63,7 +63,7 @@ define([
var appOptions = me.getApplication().getController('Main').appOptions;
if ( !appOptions.isEditMailMerge && !appOptions.isEditDiagram ) {
var tab = {action: 'plugins', caption: me.panelPlugins.groupCaption};
var tab = {action: 'plugins', caption: me.panelPlugins.groupCaption, dataHintTitle: 'E'};
me.$toolbarPanelPlugins = me.panelPlugins.getPanel();
toolbar.addTab(tab, me.$toolbarPanelPlugins, 10); // TODO: clear plugins list in left panel

View file

@ -470,14 +470,15 @@ define([
getPanel: function (role, config) {
var me = this;
function createTitleButton(iconid, slot, disabled, hintDirection, hintOffset) {
function createTitleButton(iconid, slot, disabled, hintDirection, hintOffset, hintTitle) {
return (new Common.UI.Button({
cls: 'btn-header',
iconCls: iconid,
disabled: disabled === true,
dataHint:'0',
dataHintDirection: hintDirection ? hintDirection : 'left',
dataHintOffset: hintOffset ? hintOffset : '10, 10'
dataHintOffset: hintOffset ? hintOffset : '10, 10',
dataHintTitle: hintTitle
})).render(slot);
}
@ -532,7 +533,7 @@ define([
this.btnDownload = createTitleButton('toolbar__icon icon--inverse btn-download', $html.findById('#slot-hbtn-download'), undefined, 'bottom', 'big');
if ( config.canPrint )
this.btnPrint = createTitleButton('toolbar__icon icon--inverse btn-print', $html.findById('#slot-hbtn-print'), undefined, 'bottom', 'big');
this.btnPrint = createTitleButton('toolbar__icon icon--inverse btn-print', $html.findById('#slot-hbtn-print'), undefined, 'bottom', 'big', 'P');
if ( config.canEdit && config.canRequestEditRights )
this.btnEdit = createTitleButton('toolbar__icon icon--inverse btn-edit', $html.findById('#slot-hbtn-edit'), undefined, 'bottom', 'big');
@ -541,7 +542,7 @@ define([
if (!config.isEdit || config.customization && !!config.customization.compactHeader) {
if (config.user.guest && config.canRenameAnonymous)
me.btnUserName = createTitleButton('toolbar__icon icon--inverse btn-user', $html.findById('#slot-btn-user-name'), undefined, 'bottom', 'big');
me.btnUserName = createTitleButton('toolbar__icon icon--inverse btn-user', $html.findById('#slot-btn-user-name'), undefined, 'bottom', 'big' );
else {
me.elUserName = $html.find('.btn-current-user');
me.elUserName.removeClass('hidden');
@ -567,12 +568,12 @@ define([
me.setUserName(me.options.userName);
if ( config.canPrint && config.isEdit ) {
me.btnPrint = createTitleButton('toolbar__icon icon--inverse btn-print', $html.findById('#slot-btn-dt-print'), true);
me.btnPrint = createTitleButton('toolbar__icon icon--inverse btn-print', $html.findById('#slot-btn-dt-print'), true, undefined, undefined, 'P');
}
me.btnSave = createTitleButton('toolbar__icon icon--inverse btn-save', $html.findById('#slot-btn-dt-save'), true);
me.btnUndo = createTitleButton('toolbar__icon icon--inverse btn-undo', $html.findById('#slot-btn-dt-undo'), true);
me.btnRedo = createTitleButton('toolbar__icon icon--inverse btn-redo', $html.findById('#slot-btn-dt-redo'), true);
me.btnSave = createTitleButton('toolbar__icon icon--inverse btn-save', $html.findById('#slot-btn-dt-save'), true, undefined, undefined, 'S');
me.btnUndo = createTitleButton('toolbar__icon icon--inverse btn-undo', $html.findById('#slot-btn-dt-undo'), true, undefined, undefined, 'Z');
me.btnRedo = createTitleButton('toolbar__icon icon--inverse btn-redo', $html.findById('#slot-btn-dt-redo'), true, undefined, undefined, 'Y');
if ( me.btnSave.$icon.is('svg') ) {
me.btnSave.$icon.addClass('icon-save btn-save');

View file

@ -3178,7 +3178,7 @@ define([
me.toolbar.render(_.extend({isCompactView: compactview}, config));
var tab = {action: 'review', caption: me.toolbar.textTabCollaboration};
var tab = {action: 'review', caption: me.toolbar.textTabCollaboration, dataHintTitle: 'U'};
var $panel = me.application.getController('Common.Controllers.ReviewChanges').createToolbarPanel();
if ( $panel ) {
me.toolbar.addTab(tab, $panel, 5);
@ -3199,12 +3199,13 @@ define([
// move 'paste' button to the container instead of 'undo' and 'redo'
me.toolbar.btnPaste.$el.detach().appendTo($box);
me.toolbar.btnPaste.$el.find('button').attr('data-hint-direction', 'bottom');
me.toolbar.btnCopy.$el.removeClass('split');
}
if ( config.isDesktopApp ) {
if ( config.canProtect ) {
tab = {action: 'protect', caption: me.toolbar.textTabProtect};
tab = {action: 'protect', caption: me.toolbar.textTabProtect, dataHintTitle: 'T'};
$panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel();
if ($panel) me.toolbar.addTab(tab, $panel, 6);
@ -3217,7 +3218,7 @@ define([
}
if ( config.isEdit && config.canFeatureContentControl || config.isRestrictedEdit && config.canFillForms ) {
if (config.canFeatureForms) {
tab = {caption: me.textTabForms, action: 'forms'};
tab = {caption: me.textTabForms, action: 'forms', dataHintTitle: 'M'};
var forms = me.getApplication().getController('FormsTab');
forms.setApi(me.api).setConfig({toolbar: me, config: config});
$panel = forms.createToolbarPanel();

View file

@ -109,11 +109,11 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template),
tabs: [
{caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false},
{caption: me.textTabHome, action: 'home', extcls: 'canedit'},
{caption: me.textTabInsert, action: 'ins', extcls: 'canedit'},
{caption: me.textTabLayout, action: 'layout', extcls: 'canedit'},
{caption: me.textTabLinks, action: 'links', extcls: 'canedit'}
{caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false, dataHintTitle: 'F'},
{caption: me.textTabHome, action: 'home', extcls: 'canedit', dataHintTitle: 'H'},
{caption: me.textTabInsert, action: 'ins', extcls: 'canedit', dataHintTitle: 'I'},
{caption: me.textTabLayout, action: 'layout', extcls: 'canedit', dataHintTitle: 'L'},
{caption: me.textTabLinks, action: 'links', extcls: 'canedit', dataHintTitle: 'R'}
]
}
);
@ -125,7 +125,10 @@ define([
id: 'id-toolbar-btn-print',
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-print no-mask',
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'top',
dataHintTitle: 'P'
});
this.toolbarControls.push(this.btnPrint);
@ -133,7 +136,10 @@ define([
id: 'id-toolbar-btn-save',
cls: 'btn-toolbar',
iconCls: 'toolbar__icon no-mask ' + this.btnSaveCls,
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'S'
});
this.toolbarControls.push(this.btnSave);
this.btnCollabChanges = this.btnSave;
@ -142,7 +148,10 @@ define([
id: 'id-toolbar-btn-undo',
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-undo',
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'Z'
});
this.toolbarControls.push(this.btnUndo);
@ -150,7 +159,10 @@ define([
id: 'id-toolbar-btn-redo',
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-redo',
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'Y'
});
this.toolbarControls.push(this.btnRedo);
@ -169,8 +181,8 @@ define([
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-paste',
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'P'
dataHintDirection: 'top',
dataHintTitle: 'V'
});
this.paragraphControls.push(this.btnPaste);
@ -1398,7 +1410,7 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template_view),
tabs: [
{caption: me.textTabFile, action: 'file', haspanel: false}
{caption: me.textTabFile, action: 'file', haspanel: false, dataHintTitle: 'F'}
]
}
);

View file

@ -2418,7 +2418,7 @@ define([
}
me.toolbar.render(_.extend({compactview: compactview}, config));
var tab = {action: 'review', caption: me.toolbar.textTabCollaboration};
var tab = {action: 'review', caption: me.toolbar.textTabCollaboration, dataHintTitle: 'U'};
var $panel = me.getApplication().getController('Common.Controllers.ReviewChanges').createToolbarPanel();
if ( $panel ) {
me.toolbar.addTab(tab, $panel, 4);
@ -2444,12 +2444,13 @@ define([
// move 'paste' button to the container instead of 'undo' and 'redo'
me.toolbar.btnPaste.$el.detach().appendTo($box);
me.toolbar.btnPaste.$el.find('button').attr('data-hint-direction', 'bottom');
me.toolbar.btnCopy.$el.removeClass('split');
}
if ( config.isDesktopApp ) {
if ( config.canProtect ) { // don't add protect panel to toolbar
tab = {action: 'protect', caption: me.toolbar.textTabProtect};
tab = {action: 'protect', caption: me.toolbar.textTabProtect, dataHintTitle: 'T'};
$panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel();
if ($panel)
me.toolbar.addTab(tab, $panel, 4);

View file

@ -128,10 +128,10 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template),
tabs: [
{caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false},
{caption: me.textTabHome, action: 'home', extcls: 'canedit'},
{caption: me.textTabInsert, action: 'ins', extcls: 'canedit'},
{caption: me.textTabTransitions, action: 'transit', extcls: 'canedit'}
{caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false, dataHintTitle: 'F'},
{caption: me.textTabHome, action: 'home', extcls: 'canedit', dataHintTitle: 'H'},
{caption: me.textTabInsert, action: 'ins', extcls: 'canedit', dataHintTitle: 'I'},
{caption: me.textTabTransitions, action: 'transit', extcls: 'canedit', dataHintTitle: 'N'}
]
}
);
@ -186,7 +186,10 @@ define([
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-print no-mask',
lock: [_set.slideDeleted, _set.noSlides, _set.cantPrint, _set.disableOnStart],
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'top',
dataHintTitle: 'P'
});
me.slideOnlyControls.push(me.btnPrint);
@ -195,7 +198,10 @@ define([
cls: 'btn-toolbar',
iconCls: 'toolbar__icon no-mask ' + me.btnSaveCls,
lock: [_set.lostConnect],
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'S'
});
me.btnCollabChanges = me.btnSave;
@ -204,7 +210,10 @@ define([
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-undo',
lock: [_set.undoLock, _set.slideDeleted, _set.lostConnect, _set.disableOnStart],
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'Z'
});
me.slideOnlyControls.push(me.btnUndo);
@ -213,7 +222,10 @@ define([
cls: 'btn-toolbar',
iconCls: 'toolbar__icon btn-redo',
lock: [_set.redoLock, _set.slideDeleted, _set.lostConnect, _set.disableOnStart],
signals: ['disabled']
signals: ['disabled'],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'Y'
});
me.slideOnlyControls.push(me.btnRedo);
@ -234,8 +246,8 @@ define([
iconCls: 'toolbar__icon btn-paste',
lock: [_set.slideDeleted, _set.paragraphLock, _set.lostConnect, _set.noSlides],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'P'
dataHintDirection: 'top',
dataHintTitle: 'V'
});
me.paragraphControls.push(me.btnPaste);
@ -1073,7 +1085,7 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template_view),
tabs: [
{caption: me.textTabFile, action: 'file', haspanel:false}
{caption: me.textTabFile, action: 'file', haspanel:false, dataHintTitle: 'F'}
]
}
);

View file

@ -3715,7 +3715,7 @@ define([
me.toolbar.render(_.extend({isCompactView: compactview}, config));
if ( !config.isEditDiagram && !config.isEditMailMerge ) {
var tab = {action: 'review', caption: me.toolbar.textTabCollaboration};
var tab = {action: 'review', caption: me.toolbar.textTabCollaboration, dataHintTitle: 'U'};
var $panel = me.getApplication().getController('Common.Controllers.ReviewChanges').createToolbarPanel();
if ($panel) {
me.toolbar.addTab(tab, $panel, 6);
@ -3755,7 +3755,7 @@ define([
Array.prototype.push.apply(me.toolbar.lockControls, formulatab.getButtons());
if ( config.canFeaturePivot ) {
tab = {action: 'pivot', caption: me.textPivot};
tab = {action: 'pivot', caption: me.textPivot, dataHintTitle: 'B'};
var pivottab = me.getApplication().getController('PivotTable');
pivottab.setApi(me.api).setConfig({toolbar: me});
$panel = pivottab.createToolbarPanel();
@ -3775,10 +3775,11 @@ define([
// move 'paste' button to the container instead of 'undo' and 'redo'
me.toolbar.btnPaste.$el.detach().appendTo($box);
me.toolbar.btnPaste.$el.find('button').attr('data-hint-direction', 'bottom');
me.toolbar.btnCopy.$el.removeClass('split');
}
var tab = {action: 'protect', caption: me.toolbar.textTabProtect};
var tab = {action: 'protect', caption: me.toolbar.textTabProtect, dataHintTitle: 'T'};
var $panel = me.getApplication().getController('Common.Controllers.Protection').createToolbarPanel();
if ($panel) {
config.canProtect && $panel.append($('<div class="separator long"></div>'));

View file

@ -1,15 +1,15 @@
<div class="statusbar">
<div id="status-tabs-scroll" class="status-group">
<button id="status-btn-tabfirst" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="F"><i class="icon toolbar__icon btn-firstitem">&nbsp;</i></button>
<button id="status-btn-tabback" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="B"><i class="icon toolbar__icon btn-previtem">&nbsp;</i></button>
<button id="status-btn-tabnext" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="N"><i class="icon toolbar__icon btn-nextitem">&nbsp;</i></button>
<button id="status-btn-tablast" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="L"><i class="icon toolbar__icon btn-lastitem">&nbsp;</i></button>
<button id="status-btn-tabfirst" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="Q"><i class="icon toolbar__icon btn-firstitem">&nbsp;</i></button>
<button id="status-btn-tabback" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="G"><i class="icon toolbar__icon btn-previtem">&nbsp;</i></button>
<button id="status-btn-tabnext" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="J"><i class="icon toolbar__icon btn-nextitem">&nbsp;</i></button>
<button id="status-btn-tablast" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="K"><i class="icon toolbar__icon btn-lastitem">&nbsp;</i></button>
</div>
<div id="status-addtabs-box" class="status-group">
<button id="status-btn-addtab" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="P"><i class="icon toolbar__icon btn-zoomup">&nbsp;</i></button>
<button id="status-btn-addtab" type="button" class="btn small btn-toolbar" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="X"><i class="icon toolbar__icon btn-zoomup">&nbsp;</i></button>
<div class="cnt-tabslist">
<button id="status-btn-tabslist" type="button" class="btn small btn-toolbar dropdown-toggle" data-toggle="dropdown" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="S"><i class="icon toolbar__icon btn-sheet-list">&nbsp;</i></button>
<button id="status-btn-tabslist" type="button" class="btn small btn-toolbar dropdown-toggle" data-toggle="dropdown" data-hint="0" data-hint-direction="top" data-hint-offset="small" data-hint-title="V"><i class="icon toolbar__icon btn-sheet-list">&nbsp;</i></button>
</div>
</div>
<div id="status-zoom-box" class="status-group">

View file

@ -196,9 +196,9 @@ define([
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-paste',
lock : [/*_set.editCell,*/ _set.coAuth, _set.lostConnect],
dataHint: '1',
dataHintDirection: 'bottom',
dataHintTitle: 'P'
dataHint : '1',
dataHintDirection: 'top',
dataHintTitle: 'V'
});
me.btnUndo = new Common.UI.Button({
@ -207,7 +207,10 @@ define([
iconCls : 'toolbar__icon btn-undo',
disabled : true,
lock : [_set.lostConnect],
signals : ['disabled']
signals : ['disabled'],
dataHint : '1',
dataHintDirection: 'bottom',
dataHintTitle: 'Z'
});
me.btnRedo = new Common.UI.Button({
@ -216,7 +219,10 @@ define([
iconCls : 'toolbar__icon btn-redo',
disabled : true,
lock : [_set.lostConnect],
signals : ['disabled']
signals : ['disabled'],
dataHint : '1',
dataHintDirection: 'bottom',
dataHintTitle: 'Y'
});
if ( config.isEditDiagram ) {
@ -352,14 +358,14 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template),
tabs: [
{ caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false},
{ caption: me.textTabHome, action: 'home', extcls: 'canedit'},
{ caption: me.textTabInsert, action: 'ins', extcls: 'canedit'},
{caption: me.textTabLayout, action: 'layout', extcls: 'canedit'},
{caption: me.textTabFormula, action: 'formula', extcls: 'canedit'},
{caption: me.textTabData, action: 'data', extcls: 'canedit'},
{ caption: me.textTabFile, action: 'file', extcls: 'canedit', haspanel:false, dataHintTitle: 'F'},
{ caption: me.textTabHome, action: 'home', extcls: 'canedit', dataHintTitle: 'H'},
{ caption: me.textTabInsert, action: 'ins', extcls: 'canedit', dataHintTitle: 'I'},
{caption: me.textTabLayout, action: 'layout', extcls: 'canedit', dataHintTitle: 'L'},
{caption: me.textTabFormula, action: 'formula', extcls: 'canedit', dataHintTitle: 'O'},
{caption: me.textTabData, action: 'data', extcls: 'canedit', dataHintTitle: 'D'},
undefined, undefined, undefined,
{caption: me.textTabView, action: 'view', extcls: 'canedit'}
{caption: me.textTabView, action: 'view', extcls: 'canedit', dataHintTitle: 'W'}
]}
);
@ -407,7 +413,10 @@ define([
cls : 'btn-toolbar',
iconCls : 'toolbar__icon btn-print no-mask',
lock : [_set.editCell, _set.cantPrint, _set.disableOnStart],
signals: ['disabled']
signals: ['disabled'],
dataHint : '1',
dataHintDirection: 'top',
dataHintTitle: 'P'
});
me.btnSave = new Common.UI.Button({
@ -415,7 +424,10 @@ define([
cls : 'btn-toolbar',
iconCls : 'toolbar__icon no-mask ' + me.btnSaveCls,
lock : [_set.lostConnect],
signals : ['disabled']
signals : ['disabled'],
dataHint : '1',
dataHintDirection: 'bottom',
dataHintTitle: 'S'
});
me.btnCollabChanges = me.btnSave;
@ -1615,7 +1627,7 @@ define([
Common.UI.Mixtbar.prototype.initialize.call(this, {
template: _.template(template_view),
tabs: [
{caption: me.textTabFile, action: 'file', haspanel:false}
{caption: me.textTabFile, action: 'file', haspanel:false, dataHintTitle: 'F'}
]
}
);