]> git.ipfire.org Git - thirdparty/tvheadend.git/commitdiff
Factor out all gridEditor code to a file of its own. ExtJS is sweet!
authorAndreas Öman <andreas@lonelycoder.com>
Tue, 23 Sep 2008 19:30:54 +0000 (19:30 +0000)
committerAndreas Öman <andreas@lonelycoder.com>
Tue, 23 Sep 2008 19:30:54 +0000 (19:30 +0000)
webui/extjs.c
webui/static/app/acleditor.js
webui/static/app/cteditor.js
webui/static/app/cwceditor.js
webui/static/app/tableeditor.js [new file with mode: 0644]

index 59dd864a490481b24a752ff9fa3df7229711bd0f..3dc24d60ef2c32f731f9ef6fdb1648ff9ab5f145 100644 (file)
@@ -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");
index 3918ece04c0772a017c2e3551b26453dd4fc5231..6b563742f478aa5ccfe0a9a892b63b2c9bda1ff1 100644 (file)
@@ -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"}
-       });
-    
-
-    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();
-                   }
-               })
-               }
-    }
-
+       'enabled','streaming','pvr','admin','webui','username',
+       'prefix','password','comment'
+    ]);
 
-    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]);
 }
index f89f14b5c3e68ca73efa7e9d88f8f537698f985a..1ff1908b491aa40b64c41eb64dc03705bd6400ff 100644 (file)
@@ -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'}
+       'enabled','name','internal','comment'
     ]);
     
-    var store = new Ext.data.JsonStore({
-       root: 'entries',
-       fields: ChannelTagRecord,
-       url: "tablemgr",
-       autoLoad: true,
-       id: 'id',
-       storeid: 'id',
-       baseParams: {table: "channeltags", op: "get"}
-    });
-    
-
-    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]);
 }
index a9ec6d291a20880c3430be0a55100565cef95ed8..9b99536dc5f5d7c913e53895d8ff0edf754491aa 100644 (file)
@@ -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;
-
-           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();
-                   }
-               })
-               }
-    }
+    ]);
 
+    var rec = Ext.data.Record.create([
+       'enabled','hostname','port','username','password','deskey','comment'
+    ]);
 
-    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 (file)
index 0000000..bcfa061
--- /dev/null
@@ -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;
+}
+