diff --git a/webui/extjs.c b/webui/extjs.c index 59dd864a..3dc24d60 100644 --- a/webui/extjs.c +++ b/webui/extjs.c @@ -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"); diff --git a/webui/static/app/acleditor.js b/webui/static/app/acleditor.js index 3918ece0..6b563742 100644 --- a/webui/static/app/acleditor.js +++ b/webui/static/app/acleditor.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]); } diff --git a/webui/static/app/cteditor.js b/webui/static/app/cteditor.js index f89f14b5..1ff1908b 100644 --- a/webui/static/app/cteditor.js +++ b/webui/static/app/cteditor.js @@ -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]); } diff --git a/webui/static/app/cwceditor.js b/webui/static/app/cwceditor.js index a9ec6d29..9b99536d 100644 --- a/webui/static/app/cwceditor.js +++ b/webui/static/app/cwceditor.js @@ -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]); } diff --git a/webui/static/app/tableeditor.js b/webui/static/app/tableeditor.js new file mode 100644 index 00000000..bcfa061c --- /dev/null +++ b/webui/static/app/tableeditor.js @@ -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; +} +