c25e95aa77b7a5bf981e9ffd9cb599c3314f5781
[tine20] / tine20 / Timetracker / js / DurationSpinner.js
1 /**
2  * Tine 2.0
3  * 
4  * @package     Timetracker
5  * @license     http://www.gnu.org/licenses/agpl.html AGPL Version 3
6  * @author      Cornelius Weiss <c.weiss@metaways.de>
7  * @copyright   Copyright (c) 2007-2015 Metaways Infosystems GmbH (http://www.metaways.de)
8  *
9  */
10  
11 Ext.ns('Tine.Timetracker');
12
13 /**
14  * handles minutes to time conversions
15  * @class Tine.Timetracker.DurationSpinner
16  * @extends Ext.ux.form.Spinner
17  */
18 Tine.Timetracker.DurationSpinner = Ext.extend(Ext.ux.form.Spinner,  {
19     
20     /**
21      * Set to empty value if value equals 0
22      * @cfg emptyOnZero
23      */
24     emptyOnZero: null,
25     
26     initComponent: function() {
27         this.preventMark = false;
28         this.strategy = new Ext.ux.form.Spinner.TimeStrategy({
29             incrementValue : 15
30         });
31         this.format = this.strategy.format;
32     },
33
34     setValue: function(value) {
35         if(! value || value == '00:00') {
36             value = this.emptyOnZero ? '' : '00:00';
37         } else if(! value.toString().match(/:/)) {
38             var hours = Math.floor(value / 60),
39                 minutes = value - hours * 60;
40
41             if (hours < 10) {
42                hours = '0' + hours;
43             }
44
45             if (minutes < 10) {
46                 minutes = '0' + minutes;
47             }
48
49             if (minutes !== 0) {
50                 value = hours + ':' + minutes;
51             } else {
52                 value = hours + ':00';
53             }
54         }
55         
56         Tine.Timetracker.DurationSpinner.superclass.setValue.call(this, value);
57     },
58     
59     validateValue: function(value) {
60         if (value.search(/:/) != -1) {
61             var parts = value.split(':'),
62                 hours = parseInt(parts[0]),
63                 minutes = parseInt(parts[1]);
64
65             return 'NaN' != hours && 'NaN' != minutes;
66         }
67     },
68
69     getValue: function() {
70         var value = Tine.Timetracker.DurationSpinner.superclass.getValue.call(this);
71         value = value.replace(',', '.');
72
73         if(value && typeof value == 'string') {
74             if (value.search(/:/) != -1) {
75                 var parts = value.split(':'),
76                     hours = parseInt(parts[0]),
77                     minutes = parseInt(parts[1]);
78
79                 if (0 > hours) {
80                     hours = 0;
81                 }
82
83                 if (0 > minutes) {
84                     minutes = 0;
85                 }
86
87                 if (minutes > 0) {
88                     value = hours * 60 + minutes;
89                 } else {
90                     value = hours * 60;
91                 }
92             } else if (value > 0) {
93                     value = value * 60;
94             } else {
95                 this.markInvalid(i18n._('Not a valid time'));
96                 return;
97             }
98         }
99
100         this.setValue(value);
101         return value;
102     }
103 });
104
105 Ext.reg('tinedurationspinner', Tine.Timetracker.DurationSpinner);