]> git.proxmox.com Git - pmg-gui.git/blobdiff - js/StatTimeSelector.js
quarantine: refactor spamquarantine controller
[pmg-gui.git] / js / StatTimeSelector.js
index f62b8e7d75db7a1b7cb9a1d8730e8cc4f4143183..81958ebf9e4da7b66f20e09c030e8223e5cb065e 100644 (file)
@@ -7,13 +7,22 @@ Ext.define('PMG.StatTimeSelector', {
        selected_month: undefined,
        selected_day: undefined,
 
+       initSelected: function() {
+           let today = new Date();
+           this.selected_year = today.getFullYear();
+           this.selected_month = today.getMonth() + 1;
+           this.selected_day = today.getDate();
+       },
+
        getTimeSpan: function() {
-           var year = this.selected_year;
-           var month = this.selected_month;
-           var day = this.selected_day;
+           if (this.selected_year === undefined) {
+               this.initSelected();
+           }
+           const year = this.selected_year;
+           const month = this.selected_month;
+           const day = this.selected_day;
 
-           var starttime, endtime, span;
-       
+           let starttime, endtime;
            if (!month) {
                starttime = new Date(year, 0);
                endtime = new Date(year + 1, 0);
@@ -25,132 +34,135 @@ Ext.define('PMG.StatTimeSelector', {
                endtime = new Date(year, month - 1, day + 1);
            }
 
-           var data = {};
-
-           data.starttime = (starttime.getTime() / 1000).toFixed(0);
-           data.endtime = (endtime.getTime() / 1000).toFixed(0);
-       
-           return data;
-       }
+           return {
+               starttime: (starttime.getTime() / 1000).toFixed(0),
+               endtime: (endtime.getTime() / 1000).toFixed(0),
+           };
+       },
     },
-    
+
     layout: {
-       type: 'hbox'
+       type: 'hbox',
     },
-    
+
     controller: {
        xclass: 'Ext.app.ViewController',
 
        updateVisibility: function() {
-           var view = this.getView();
-           
-           var yearsel = this.lookupReference('yearsel');
-           var monthsel = this.lookupReference('monthsel');
-           var daysel = this.lookupReference('daysel');
-
-           var year = yearsel.getValue();
-           var month = monthsel.getValue();
+           let view = this.getView();
+
+           let yearsel = this.lookupReference('yearsel');
+           let monthsel = this.lookupReference('monthsel');
+           let daysel = this.lookupReference('daysel');
+
+           let year = yearsel.getValue();
+           let month = monthsel.getValue();
            daysel.setVisible(month !== 0);
            if (!month) {
                daysel.setValue(0);
            }
-           var day = daysel.getValue();
+           let day = daysel.getValue();
 
-           var statics = Ext.getClass(view);
+           let statics = Ext.getClass(view);
 
            statics.selected_year = year;
            statics.selected_month = month;
            statics.selected_day = day;
 
-           var data = statics.getTimeSpan();
+           let data = statics.getTimeSpan();
            Ext.GlobalEvents.fireEvent('pmgStatTimeSelectorUpdate', data);
        },
-       
+
+       updateMaxDays: function() {
+           let year = this.lookup('yearsel').getValue();
+           let month = this.lookup('monthsel').getValue();
+           // get last day of current month by wrapping back day 0 from next (zero indexed) month
+           let maxDays = new Date(year, month, 0).getDate();
+           this.lookup('daysel').getStore().setFilters([{
+               property: 'day',
+               operator: '<=',
+               value: maxDays,
+           }]);
+       },
+
        onSelect: function() {
+           this.updateMaxDays();
            this.updateVisibility();
        },
-       
+
        init: function(view) {
-           var statics = Ext.getClass(view);
-           
-           var yearsel = this.lookupReference('yearsel');
-           var monthsel = this.lookupReference('monthsel');
-           var daysel = this.lookupReference('daysel');
-           
+           let statics = Ext.getClass(view);
+
+           let yearsel = this.lookupReference('yearsel');
+           let monthsel = this.lookupReference('monthsel');
+           let daysel = this.lookupReference('daysel');
+
            yearsel.setValue(statics.selected_year);
            monthsel.setValue(statics.selected_month);
-           daysel.setValue(statics.selected_month ? statics.selected_day : 0);
+           daysel.setValue(statics.selected_month ? statics.selected_day : 0);
 
            this.updateVisibility();
-       }
+       },
     },
-    
+
     items: [
        {
            xtype: 'combobox',
            reference: 'yearsel',
            store: {
-               fields: [ 'year' ],
+               fields: ['year'],
                data: (function() {
-                   var today = new Date();
-                   var year = today.getFullYear();
-                   return [{ year: year }, { year: year -1 },{ year: year -2 }];
-               }())
+                   let today = new Date();
+                   let year = today.getFullYear();
+                   return [{ year: year }, { year: year -1 }, { year: year -2 }];
+               }()),
            },
            listeners: { select: 'onSelect' },
-           value: (new Date()).getFullYear(),
+           value: new Date().getFullYear(),
            queryMode: 'local',
            displayField: 'year',
            editable: false,
-           valueField: 'year'
+           valueField: 'year',
        },
        {
            xtype: 'combobox',
            reference: 'monthsel',
            store: {
-               fields: [ 'month', 'name' ],
+               fields: ['month', 'name'],
                data: (function() {
-                   var i;
-                   var data = [{ month: 0, name: gettext('Whole year') }];
+                   let i;
+                   let data = [{ month: 0, name: gettext('Whole year') }];
                    for (i = 1; i <= 12; i++) {
-                       data.push({ month: i, name: Ext.Date.monthNames[i-1]});
+                       data.push({ month: i, name: Ext.Date.monthNames[i-1] });
                    }
                    return data;
-               }())
+               }()),
            },
            listeners: { select: 'onSelect' },
            queryMode: 'local',
            displayField: 'name',
            editable: false,
-           valueField: 'month'
+           valueField: 'month',
        },
        {
            xtype: 'combobox',
            reference: 'daysel',
            store: {
-               fields: [ 'day', 'name' ],
+               fields: ['day', 'name'],
                data: (function() {
-                   var i;
-                   var data = [{ day: 0, name: gettext('Whole month') }];
+                   let i;
+                   let data = [{ day: 0, name: gettext('Whole month') }];
                    for (i = 1; i <= 31; i++) {
-                       data.push({ day: i, name: i});
+                       data.push({ day: i, name: i });
                    }
                    return data;
-               }())
+               }()),
            },
            listeners: { select: 'onSelect' },
            queryMode: 'local',
            displayField: 'name',
            editable: false,
-           valueField: 'day'
-       }
-    ]
-}, function() {
-
-    var today = new Date();
-           
-    this.selected_year = today.getFullYear();
-    this.selected_month = today.getMonth() + 1;
-    this.selected_day = today.getDate();
-
+           valueField: 'day',
+       },
+    ],
 });