Factor out all gridEditor code to a file of its own. ExtJS is sweet!
This commit is contained in:
parent
ba2dd0a704
commit
94e3555fbc
5 changed files with 158 additions and 422 deletions
|
@ -106,6 +106,7 @@ extjs_root(http_connection_t *hc, const char *remain, void *opaque)
|
|||
/**
|
||||
* Load all components
|
||||
*/
|
||||
extjs_load(hq, "static/app/tableeditor.js");
|
||||
extjs_load(hq, "static/app/cteditor.js");
|
||||
extjs_load(hq, "static/app/acleditor.js");
|
||||
extjs_load(hq, "static/app/cwceditor.js");
|
||||
|
|
|
@ -33,166 +33,40 @@ tvheadend.acleditor = function() {
|
|||
});
|
||||
|
||||
var cm = new Ext.grid.ColumnModel([
|
||||
enabledColumn,
|
||||
enabledColumn,
|
||||
{
|
||||
id:'username',
|
||||
header: "Username",
|
||||
dataIndex: 'username',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
id:'password',
|
||||
header: "Password",
|
||||
dataIndex: 'password',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
header: "Prefix",
|
||||
dataIndex: 'prefix',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false,
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},
|
||||
streamingColumn,
|
||||
pvrColumn,
|
||||
webuiColumn,
|
||||
adminColumn,
|
||||
|
||||
streamingColumn,
|
||||
pvrColumn,
|
||||
webuiColumn,
|
||||
adminColumn,
|
||||
{
|
||||
id:'comment',
|
||||
header: "Comment",
|
||||
dataIndex: 'comment',
|
||||
width: 400,
|
||||
editor: new fm.TextField({
|
||||
|
||||
})
|
||||
editor: new fm.TextField({})
|
||||
}
|
||||
]);
|
||||
|
||||
|
||||
cm.defaultSortable = true;
|
||||
]);
|
||||
|
||||
var UserRecord = Ext.data.Record.create([
|
||||
{name: 'enabled'},
|
||||
{name: 'streaming'},
|
||||
{name: 'pvr'},
|
||||
{name: 'admin'},
|
||||
{name: 'webui'},
|
||||
{name: 'username'},
|
||||
{name: 'prefix'},
|
||||
{name: 'password'},
|
||||
{name: 'comment'}]);
|
||||
|
||||
var store = new Ext.data.JsonStore({root: 'entries',
|
||||
fields: UserRecord,
|
||||
url: "tablemgr",
|
||||
autoLoad: true,
|
||||
id: 'id',
|
||||
storeid: 'id',
|
||||
baseParams: {table: "accesscontrol", op: "get"}
|
||||
});
|
||||
|
||||
'enabled','streaming','pvr','admin','webui','username',
|
||||
'prefix','password','comment'
|
||||
]);
|
||||
|
||||
function addRecord() {
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"create", table:"accesscontrol"},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error','Unable to generate new record');
|
||||
},
|
||||
success:function(response,options){
|
||||
var responseData = Ext.util.JSON.decode(response.responseText);
|
||||
|
||||
var p = new UserRecord(responseData, responseData.id);
|
||||
grid.stopEditing();
|
||||
store.insert(0, p);
|
||||
grid.startEditing(0, 0);
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
function delSelected() {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
if(selectedKeys.length > 0)
|
||||
{
|
||||
Ext.MessageBox.confirm('Message',
|
||||
'Do you really want to delete selection?',
|
||||
deleteRecord);
|
||||
} else {
|
||||
Ext.MessageBox.alert('Message',
|
||||
'Please select at least one item to delete');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function deleteRecord(btn) {
|
||||
if(btn=='yes') {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"delete", table:"accesscontrol",
|
||||
entries:Ext.encode(selectedKeys)},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error','Unable to delete');
|
||||
},
|
||||
success:function(response,options){
|
||||
store.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function saveChanges() {
|
||||
var mr = store.getModifiedRecords();
|
||||
var out = new Array();
|
||||
for (var x = 0; x < mr.length; x++) {
|
||||
v = mr[x].getChanges();
|
||||
out[x] = v;
|
||||
out[x].id = mr[x].id;
|
||||
}
|
||||
|
||||
Ext.Ajax.request({url: "tablemgr",
|
||||
params: {op:"update", table:"accesscontrol",
|
||||
entries:Ext.encode(out)},
|
||||
success:function(response,options){
|
||||
store.commitChanges();
|
||||
},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Message',response.statusText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
title: 'Access Configuration',
|
||||
plugins:[enabledColumn,streamingColumn,pvrColumn,adminColumn, webuiColumn],
|
||||
store: store,
|
||||
clicksToEdit: 2,
|
||||
viewConfig: {forceFit:true},
|
||||
cm: cm,
|
||||
selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
|
||||
tbar: [{
|
||||
tooltip: 'Create a new access list entry on the server. ' +
|
||||
'The new entry is initially disabled so it must be enabled before it start taking effect.',
|
||||
iconCls:'add',
|
||||
text: 'Add entry',
|
||||
handler: addRecord
|
||||
}, '-', {
|
||||
tooltip: 'Delete one or more selected rows',
|
||||
iconCls:'remove',
|
||||
text: 'Delete selected',
|
||||
handler: delSelected
|
||||
}, '-', {
|
||||
tooltip: 'Save any changes made (Changed cells have red borders).',
|
||||
iconCls:'save',
|
||||
text: "Save changes",
|
||||
handler: saveChanges
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
return grid;
|
||||
return new tvheadend.tableEditor('Access control', 'accesscontrol', cm,
|
||||
UserRecord,
|
||||
[enabledColumn, streamingColumn,
|
||||
pvrColumn, webuiColumn,
|
||||
adminColumn]);
|
||||
}
|
||||
|
|
|
@ -16,145 +16,26 @@ tvheadend.cteditor = function() {
|
|||
|
||||
|
||||
var cm = new Ext.grid.ColumnModel([
|
||||
enabledColumn,
|
||||
enabledColumn,
|
||||
{
|
||||
id:'name',
|
||||
header: "Name",
|
||||
dataIndex: 'name',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},
|
||||
internalColumn,
|
||||
internalColumn,
|
||||
{
|
||||
id:'comment',
|
||||
header: "Comment",
|
||||
dataIndex: 'comment',
|
||||
width: 400,
|
||||
editor: new fm.TextField({
|
||||
|
||||
})
|
||||
editor: new fm.TextField({})
|
||||
}
|
||||
]);
|
||||
|
||||
|
||||
cm.defaultSortable = true;
|
||||
|
||||
var ChannelTagRecord = Ext.data.Record.create([
|
||||
{name: 'enabled'},
|
||||
{name: 'name'},
|
||||
{name: 'internal'},
|
||||
{name: 'comment'}
|
||||
]);
|
||||
|
||||
var store = new Ext.data.JsonStore({
|
||||
root: 'entries',
|
||||
fields: ChannelTagRecord,
|
||||
url: "tablemgr",
|
||||
autoLoad: true,
|
||||
id: 'id',
|
||||
storeid: 'id',
|
||||
baseParams: {table: "channeltags", op: "get"}
|
||||
});
|
||||
var ChannelTagRecord = Ext.data.Record.create([
|
||||
'enabled','name','internal','comment'
|
||||
]);
|
||||
|
||||
|
||||
function addRecord() {
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"create", table:"channeltags"},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error','Unable to generate new record');
|
||||
},
|
||||
success:function(response,options){
|
||||
var responseData = Ext.util.JSON.decode(response.responseText);
|
||||
|
||||
var p = new ChannelTagRecord(responseData, responseData.id);
|
||||
grid.stopEditing();
|
||||
store.insert(0, p);
|
||||
grid.startEditing(0, 0);
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
function delSelected() {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
if(selectedKeys.length > 0)
|
||||
{
|
||||
Ext.MessageBox.confirm('Message',
|
||||
'Do you really want to delete selection?',
|
||||
deleteRecord);
|
||||
} else {
|
||||
Ext.MessageBox.alert('Message',
|
||||
'Please select at least one item to delete');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function deleteRecord(btn) {
|
||||
if(btn=='yes') {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"delete", table:"channeltags",
|
||||
entries:Ext.encode(selectedKeys)},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error','Unable to delete');
|
||||
},
|
||||
success:function(response,options){
|
||||
store.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function saveChanges() {
|
||||
var mr = store.getModifiedRecords();
|
||||
var out = new Array();
|
||||
for (var x = 0; x < mr.length; x++) {
|
||||
v = mr[x].getChanges();
|
||||
out[x] = v;
|
||||
out[x].id = mr[x].id;
|
||||
}
|
||||
|
||||
Ext.Ajax.request({url: "tablemgr",
|
||||
params: {op:"update", table:"channeltags",
|
||||
entries:Ext.encode(out)},
|
||||
success:function(response,options){
|
||||
store.commitChanges();
|
||||
},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Message',response.statusText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
title: 'Channel Tags',
|
||||
plugins:[enabledColumn,internalColumn],
|
||||
store: store,
|
||||
clicksToEdit: 2,
|
||||
cm: cm,
|
||||
selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
|
||||
tbar: [{
|
||||
tooltip: 'Create a new channel tag entry on the server. ' +
|
||||
'The new entry is initially disabled so it must be enabled before it start taking effect.',
|
||||
iconCls:'add',
|
||||
text: 'Add entry',
|
||||
handler: addRecord
|
||||
}, '-', {
|
||||
tooltip: 'Delete one or more selected rows',
|
||||
iconCls:'remove',
|
||||
text: 'Delete selected',
|
||||
handler: delSelected
|
||||
}, '-', {
|
||||
tooltip: 'Save any changes made (Changed cells have red borders).',
|
||||
iconCls:'save',
|
||||
text: "Save changes",
|
||||
handler: saveChanges
|
||||
}
|
||||
]
|
||||
});
|
||||
|
||||
return grid;
|
||||
return new tvheadend.tableEditor('Channel Tags', 'channeltags', cm,
|
||||
ChannelTagRecord,
|
||||
[enabledColumn, internalColumn]);
|
||||
}
|
||||
|
|
|
@ -9,176 +9,41 @@ tvheadend.cwceditor = function() {
|
|||
});
|
||||
|
||||
var cm = new Ext.grid.ColumnModel([
|
||||
enabledColumn,
|
||||
enabledColumn,
|
||||
{
|
||||
id:'hostname',
|
||||
header: "Hostname",
|
||||
dataIndex: 'hostname',
|
||||
width: 200,
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
id:'port',
|
||||
header: "Port",
|
||||
dataIndex: 'port',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
id:'username',
|
||||
header: "Username",
|
||||
dataIndex: 'username',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
id:'password',
|
||||
header: "Password",
|
||||
dataIndex: 'password',
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false
|
||||
})
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
header: "DES Key",
|
||||
dataIndex: 'deskey',
|
||||
width: 300,
|
||||
editor: new fm.TextField({
|
||||
allowBlank: false,
|
||||
})
|
||||
},
|
||||
{
|
||||
id:'comment',
|
||||
editor: new fm.TextField({allowBlank: false})
|
||||
},{
|
||||
header: "Comment",
|
||||
dataIndex: 'comment',
|
||||
width: 400,
|
||||
editor: new fm.TextField({
|
||||
|
||||
})
|
||||
editor: new fm.TextField()
|
||||
}
|
||||
]);
|
||||
|
||||
|
||||
cm.defaultSortable = true;
|
||||
|
||||
var UserRecord = Ext.data.Record.create([
|
||||
{name: 'enabled'},
|
||||
{name: 'hostname'},
|
||||
{name: 'port'},
|
||||
{name: 'username'},
|
||||
{name: 'password'},
|
||||
{name: 'deskey'},
|
||||
{name: 'comment'}]);
|
||||
|
||||
var store = new Ext.data.JsonStore({root: 'entries',
|
||||
fields: UserRecord,
|
||||
url: "tablemgr",
|
||||
autoLoad: true,
|
||||
id: 'id',
|
||||
storeid: 'id',
|
||||
baseParams: {table: "cwc", op: "get"}
|
||||
});
|
||||
|
||||
]);
|
||||
|
||||
function addRecord() {
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"create", table:"cwc"},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error','Unable to generate new record');
|
||||
},
|
||||
success:function(response,options){
|
||||
var responseData = Ext.util.JSON.decode(response.responseText);
|
||||
|
||||
var p = new UserRecord(responseData, responseData.id);
|
||||
grid.stopEditing();
|
||||
store.insert(0, p);
|
||||
grid.startEditing(0, 0);
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
|
||||
function delSelected() {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
if(selectedKeys.length > 0)
|
||||
{
|
||||
Ext.MessageBox.confirm('Message',
|
||||
'Do you really want to delete selection?',
|
||||
deleteRecord);
|
||||
} else {
|
||||
Ext.MessageBox.alert('Message',
|
||||
'Please select at least one item to delete');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function deleteRecord(btn) {
|
||||
if(btn=='yes') {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
var rec = Ext.data.Record.create([
|
||||
'enabled','hostname','port','username','password','deskey','comment'
|
||||
]);
|
||||
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"delete", table:"cwc",
|
||||
entries:Ext.encode(selectedKeys)},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error','Unable to delete');
|
||||
},
|
||||
success:function(response,options){
|
||||
store.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
function saveChanges() {
|
||||
var mr = store.getModifiedRecords();
|
||||
var out = new Array();
|
||||
for (var x = 0; x < mr.length; x++) {
|
||||
v = mr[x].getChanges();
|
||||
out[x] = v;
|
||||
out[x].id = mr[x].id;
|
||||
}
|
||||
|
||||
Ext.Ajax.request({url: "tablemgr",
|
||||
params: {op:"update", table:"cwc",
|
||||
entries:Ext.encode(out)},
|
||||
success:function(response,options){
|
||||
store.commitChanges();
|
||||
},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Message',response.statusText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
title: 'Code Word Client',
|
||||
plugins:[enabledColumn],
|
||||
store: store,
|
||||
clicksToEdit: 2,
|
||||
cm: cm,
|
||||
viewConfig: {forceFit:true},
|
||||
selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
|
||||
tbar: [{
|
||||
tooltip: 'Create a new code word connection entry on the server. ' +
|
||||
'The new entry is initially disabled so it must be enabled before it start taking effect.',
|
||||
iconCls:'add',
|
||||
text: 'Add entry',
|
||||
handler: addRecord
|
||||
}, '-', {
|
||||
tooltip: 'Delete one or more selected rows',
|
||||
iconCls:'remove',
|
||||
text: 'Delete selected',
|
||||
handler: delSelected
|
||||
}, '-', {
|
||||
tooltip: 'Save any changes made (Changed cells have red borders).',
|
||||
iconCls:'save',
|
||||
text: "Save changes",
|
||||
handler: saveChanges
|
||||
}
|
||||
]
|
||||
});
|
||||
return grid;
|
||||
return new tvheadend.tableEditor('Code Word Client', 'cwc', cm, rec,
|
||||
[enabledColumn]);
|
||||
}
|
||||
|
|
115
webui/static/app/tableeditor.js
Normal file
115
webui/static/app/tableeditor.js
Normal file
|
@ -0,0 +1,115 @@
|
|||
console.log("hejja");
|
||||
|
||||
tvheadend.tableEditor = function(title, dtable, cm, rec, plugins) {
|
||||
cm.defaultSortable = true;
|
||||
|
||||
var store = new Ext.data.JsonStore({
|
||||
root: 'entries',
|
||||
fields: rec,
|
||||
url: "tablemgr",
|
||||
autoLoad: true,
|
||||
baseParams: {table: dtable, op: "get"}
|
||||
});
|
||||
|
||||
|
||||
function addRecord() {
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"create", table:dtable},
|
||||
failure:function(response,options){
|
||||
Ext.MessageBox.alert('Server Error',
|
||||
'Unable to generate new record');
|
||||
},
|
||||
success:function(response,options){
|
||||
var responseData = Ext.util.JSON.decode(response.responseText);
|
||||
var p = new rec(responseData, responseData.id);
|
||||
grid.stopEditing();
|
||||
store.insert(0, p);
|
||||
grid.startEditing(0, 0);
|
||||
}
|
||||
})
|
||||
};
|
||||
|
||||
|
||||
|
||||
function delSelected() {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
if(selectedKeys.length > 0) {
|
||||
Ext.MessageBox.confirm('Message',
|
||||
'Do you really want to delete selection?',
|
||||
deleteRecord);
|
||||
} else {
|
||||
Ext.MessageBox.alert('Message',
|
||||
'Please select at least one item to delete');
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
function deleteRecord(btn) {
|
||||
if(btn=='yes') {
|
||||
var selectedKeys = grid.selModel.selections.keys;
|
||||
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr", params: {op:"delete", table:dtable,
|
||||
entries:Ext.encode(selectedKeys)},
|
||||
failure:function(response,options) {
|
||||
Ext.MessageBox.alert('Server Error','Unable to delete');
|
||||
},
|
||||
success:function(response,options) {
|
||||
store.reload();
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
function saveChanges() {
|
||||
var mr = store.getModifiedRecords();
|
||||
var out = new Array();
|
||||
for (var x = 0; x < mr.length; x++) {
|
||||
v = mr[x].getChanges();
|
||||
out[x] = v;
|
||||
out[x].id = mr[x].id;
|
||||
}
|
||||
|
||||
Ext.Ajax.request({
|
||||
url: "tablemgr",
|
||||
params: {op:"update", table:dtable, entries:Ext.encode(out)},
|
||||
success:function(response,options) {
|
||||
store.commitChanges();
|
||||
},
|
||||
failure:function(response,options) {
|
||||
Ext.MessageBox.alert('Message',response.statusText);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
var grid = new Ext.grid.EditorGridPanel({
|
||||
title: title,
|
||||
plugins: plugins,
|
||||
store: store,
|
||||
clicksToEdit: 2,
|
||||
cm: cm,
|
||||
viewConfig: {forceFit:true},
|
||||
selModel: new Ext.grid.RowSelectionModel({singleSelect:false}),
|
||||
tbar: [{
|
||||
tooltip: 'Create a new entry on the server. '+
|
||||
'The new entry is initially disabled so it must be enabled '+
|
||||
'before it start taking effect.',
|
||||
iconCls:'add',
|
||||
text: 'Add entry',
|
||||
handler: addRecord
|
||||
}, '-', {
|
||||
tooltip: 'Delete one or more selected rows',
|
||||
iconCls:'remove',
|
||||
text: 'Delete selected',
|
||||
handler: delSelected
|
||||
}, '-', {
|
||||
tooltip: 'Save any changes made (Changed cells have red borders).',
|
||||
iconCls:'save',
|
||||
text: "Save changes",
|
||||
handler: saveChanges
|
||||
}
|
||||
]
|
||||
});
|
||||
return grid;
|
||||
}
|
||||
|
Loading…
Add table
Reference in a new issue