proxmox-widget-toolkit/panel/InputPanel.js
Dominik Csapak 33a4fc355c add advanced options to the input panel
with this, you can now put items in the
advancedColumn1/2/B and show/hide it with
setAdvancedVisible

Signed-off-by: Dominik Csapak <d.csapak@proxmox.com>
2018-04-06 10:05:33 +02:00

240 lines
4.7 KiB
JavaScript

Ext.define('Proxmox.panel.InputPanel', {
extend: 'Ext.panel.Panel',
alias: ['widget.inputpanel'],
listeners: {
activate: function() {
// notify owning container that it should display a help button
if (this.onlineHelp) {
Ext.GlobalEvents.fireEvent('proxmoxShowHelp', this.onlineHelp);
}
},
deactivate: function() {
if (this.onlineHelp) {
Ext.GlobalEvents.fireEvent('proxmoxHideHelp', this.onlineHelp);
}
}
},
border: false,
// override this with an URL to a relevant chapter of the pve manual
// setting this will display a help button in our parent panel
onlineHelp: undefined,
// will be set if the inputpanel has advanced items
hasAdvanced: false,
// if the panel has advanced items,
// this will determine if they are shown by default
showAdvanced: false,
// overwrite this to modify submit data
onGetValues: function(values) {
return values;
},
getValues: function(dirtyOnly) {
var me = this;
if (Ext.isFunction(me.onGetValues)) {
dirtyOnly = false;
}
var values = {};
Ext.Array.each(me.query('[isFormField]'), function(field) {
if (!dirtyOnly || field.isDirty()) {
Proxmox.Utils.assemble_field_data(values, field.getSubmitData());
}
});
return me.onGetValues(values);
},
setAdvancedVisible: function(visible) {
var me = this;
var advItems = me.getComponent('advancedContainer');
if (advItems) {
advItems.setVisible(visible);
}
},
setValues: function(values) {
var me = this;
var form = me.up('form');
Ext.iterate(values, function(fieldId, val) {
var field = me.query('[isFormField][name=' + fieldId + ']')[0];
if (field) {
field.setValue(val);
if (form.trackResetOnLoad) {
field.resetOriginalValue();
}
}
});
},
initComponent: function() {
var me = this;
var items;
if (me.items) {
me.columns = 1;
items = [
{
columnWidth: 1,
layout: 'anchor',
items: me.items
}
];
me.items = undefined;
} else if (me.column4) {
me.columns = 4;
items = [
{
columnWidth: 0.25,
padding: '0 10 0 0',
layout: 'anchor',
items: me.column1
},
{
columnWidth: 0.25,
padding: '0 10 0 0',
layout: 'anchor',
items: me.column2
},
{
columnWidth: 0.25,
padding: '0 10 0 0',
layout: 'anchor',
items: me.column3
},
{
columnWidth: 0.25,
padding: '0 0 0 10',
layout: 'anchor',
items: me.column4
}
];
if (me.columnB) {
items.push({
columnWidth: 1,
padding: '10 0 0 0',
layout: 'anchor',
items: me.columnB
});
}
} else if (me.column1) {
me.columns = 2;
items = [
{
columnWidth: 0.5,
padding: '0 10 0 0',
layout: 'anchor',
items: me.column1
},
{
columnWidth: 0.5,
padding: '0 0 0 10',
layout: 'anchor',
items: me.column2 || [] // allow empty column
}
];
if (me.columnB) {
items.push({
columnWidth: 1,
padding: '10 0 0 0',
layout: 'anchor',
items: me.columnB
});
}
} else {
throw "unsupported config";
}
var advItems;
if (me.advancedItems) {
advItems = [
{
columnWidth: 1,
layout: 'anchor',
items: me.advancedItems
}
];
me.advancedItems = undefined;
} else if (me.advancedColumn1) {
advItems = [
{
columnWidth: 0.5,
padding: '0 10 0 0',
layout: 'anchor',
items: me.advancedColumn1
},
{
columnWidth: 0.5,
padding: '0 0 0 10',
layout: 'anchor',
items: me.advancedColumn2 || [] // allow empty column
}
];
me.advancedColumn1 = undefined;
me.advancedColumn2 = undefined;
if (me.advancedColumnB) {
advItems.push({
columnWidth: 1,
padding: '10 0 0 0',
layout: 'anchor',
items: me.advancedColumnB
});
me.advancedColumnB = undefined;
}
}
if (advItems) {
me.hasAdvanced = true;
advItems.unshift({
columnWidth: 1,
xtype: 'box',
hidden: false,
border: true,
autoEl: {
tag: 'hr'
}
});
items.push({
columnWidth: 1,
xtype: 'container',
itemId: 'advancedContainer',
hidden: !me.showAdvanced,
layout: 'column',
defaults: {
border: false
},
items: advItems
});
}
if (me.useFieldContainer) {
Ext.apply(me, {
layout: 'fit',
items: Ext.apply(me.useFieldContainer, {
layout: 'column',
defaultType: 'container',
items: items
})
});
} else {
Ext.apply(me, {
layout: 'column',
defaultType: 'container',
items: items
});
}
me.callParent();
}
});