+/*global Proxmox*/
Ext.define('PMG.ObjectGroup', {
extend: 'Ext.grid.GridPanel',
alias: 'widget.pmgObjectGroup',
ogdata: undefined,
+ emptyText: gettext('Please select an object.'),
+
setBaseUrl: function(baseurl) {
var me = this;
me.baseurl = baseurl;
- me.store.setProxy({
- type: 'proxmox',
- url: '/api2/json' + me.baseurl + '/objects'
- });
-
- me.store.load(function() {
- me.down('#addMenuButton').setDisabled(false);
- });
+ if (me.baseurl === undefined) {
+ me.store.proxy.setUrl(undefined);
+ me.store.setData([]);
+ me.setButtonState(me.store, [], false);
+ } else {
+ var url = '/api2/json' + me.baseurl + '/objects';
+ me.store.proxy.setUrl(url);
+ me.store.load();
+ }
},
setObjectInfo: function(ogdata) {
me.ogdata = ogdata;
- var html = '<b>' + Ext.String.htmlEncode(me.ogdata.name) + '</b>';
- html += "<br><br>";
- html += Ext.String.htmlEncode(Ext.String.trim(me.ogdata.info));
+ if (me.ogdata === undefined) {
+
+ me.down('#oginfo').update(me.emptyText);
- me.down('#oginfo').update(html);
- me.down('#ogdata').setHidden(false);
+ } else {
+
+ var html = '<b>' + Ext.String.htmlEncode(me.ogdata.name) + '</b>';
+ html += "<br><br>";
+ html += Ext.String.htmlEncode(Ext.String.trim(me.ogdata.info));
+
+ me.down('#oginfo').update(html);
+ me.down('#ogdata').setHidden(false);
+ }
+ },
+
+ setButtonState: function(store, records, success) {
+ var me = this;
+ if (!success || !me.baseurl) {
+ me.down('#addMenuButton').setDisabled(true);
+ return;
+ }
+ me.down('#addMenuButton').setDisabled(false);
},
initComponent : function() {
me.store = new Ext.data.Store({
model: 'pmg-object-list',
+ proxy: {
+ type: 'proxmox'
+ },
sorters: [
{
- property : 'receivertest',
+ property : 'receivertest'
},
{
property : 'otype',
dataIndex: 'descr',
renderer: Ext.String.htmlEncode,
flex: 1
- })
+ });
var reload = function() {
me.store.load();
me.selModel = Ext.create('Ext.selection.RowModel', {});
- var remove_btn = Ext.createWidget('proxmoxButton', {
- text: gettext('Remove'),
- disabled: true,
+ var remove_btn = Ext.createWidget('proxmoxStdRemoveButton', {
selModel: me.selModel,
- confirmMsg: function (rec) {
- return Ext.String.format(
- gettext('Are you sure you want to remove entry {0}'),
- "'" + PMG.Utils.format_otype(rec.data.otype) +
- ': ' + rec.data.descr + "'");
+ getUrl: function(rec) {
+ return me.baseurl + '/objects/' + rec.data.id;
},
- handler: function(btn, event, rec) {
- Proxmox.Utils.API2Request({
- url: me.baseurl + '/objects/'+ rec.data.id,
- method: 'DELETE',
- waitMsgTarget: me,
- callback: function() {
- reload();
- },
- failure: function (response, opts) {
- Ext.Msg.alert(gettext('Error'), response.htmlStatus);
- }
- });
- }
+ callback: reload,
+ getRecordName: function(rec) {
+ return PMG.Utils.format_otype(rec.data.otype) +
+ ': ' + rec.data.descr;
+ },
+ waitMsgTarget: me
});
var full_subject = function(subject, receivertest) {
}
var editor = PMG.Utils.object_editors[rec.data.otype];
- if (!editor) {
+ if (!editor || editor.uneditable) {
return;
}
config.subject = full_subject(editor.subject, rec.data.receivertest);
config.url = me.baseurl + '/' + editor.subdir + '/' + rec.data.id;
- var win = Ext.createWidget('proxmoxWindowEdit', config);
+ var win = Ext.createWidget(config);
win.load();
win.on('destroy', reload);
menu_items.push({
text: config.subject,
+ iconCls: config.iconCls || 'fa fa-question-circle',
handler: function() {
if (me.baseurl == undefined) {
return;
}
config.url = me.baseurl + '/' + editor.subdir;
- var win = Ext.createWidget('proxmoxWindowEdit', config);
+ var win = Ext.create(config);
win.on('destroy', reload);
win.show();
}
text: gettext('Add'),
disabled: true,
itemId: 'addMenuButton',
- menu: new Ext.menu.Menu({
+ menu: {
items: menu_items
- })
+ }
},
{
xtype: 'proxmoxButton',
text: gettext('Edit'),
disabled: true,
selModel: me.selModel,
+ enableFn: function(rec) {
+ var editor = PMG.Utils.object_editors[rec.data.otype];
+ return (editor && !editor.uneditable);
+ },
handler: run_editor
},
- remove_btn
+ remove_btn
]
});
itemId: 'oginfo',
style: { 'white-space': 'pre' },
padding: 10,
- html: gettext('Please select an object.'),
+ html: me.emptyText,
listeners: {
dblclick: {
fn: function(e, t) {
me.fireEvent('dblclickOGInfo', me, e, t, me.ogdata);
},
element: 'el',
- scope: this,
+ scope: this
}
}
}
]
});
+ Proxmox.Utils.monStoreErrors(me, me.store, true);
+
Ext.apply(me, {
listeners: {
itemdblclick: run_editor,
me.callParent();
+ me.mon(me.store, 'load', me.setButtonState, me);
+
if (me.baseurl) {
me.setBaseUrl(me.baseurl); // configure store, load()
}