@@ -10,6 +10,8 @@ export var DateTimePickerPanel = class {
10
10
this . TIME_PICKER_HEIGHT = "22em" ;
11
11
this . DATE_PICKER_WIDTH = "24em" ;
12
12
this . DATE_PICKER_HEIGHT = "27em" ;
13
+ this . DATETIME_PICKER_WIDTH = "40em" ;
14
+ this . DATETIME_PICKER_HEIGHT = "27em" ;
13
15
}
14
16
15
17
get dateTimePopupFrame ( ) {
@@ -23,17 +25,14 @@ export var DateTimePickerPanel = class {
23
25
}
24
26
25
27
openPicker ( type , rect , detail ) {
26
- if ( type == "datetime-local" ) {
27
- type = "date" ;
28
- }
29
- this . type = type ;
30
28
this . pickerState = { } ;
31
29
// TODO: Resize picker according to content zoom level
32
30
this . element . style . fontSize = "10px" ;
31
+ this . type = type ;
32
+ this . detail = detail ;
33
+ this . dateTimePopupFrame . addEventListener ( "load" , this , true ) ;
33
34
switch ( type ) {
34
35
case "time" : {
35
- this . detail = detail ;
36
- this . dateTimePopupFrame . addEventListener ( "load" , this , true ) ;
37
36
this . dateTimePopupFrame . setAttribute (
38
37
"src" ,
39
38
"chrome://global/content/timepicker.xhtml"
@@ -43,8 +42,6 @@ export var DateTimePickerPanel = class {
43
42
break ;
44
43
}
45
44
case "date" : {
46
- this . detail = detail ;
47
- this . dateTimePopupFrame . addEventListener ( "load" , this , true ) ;
48
45
this . dateTimePopupFrame . setAttribute (
49
46
"src" ,
50
47
"chrome://global/content/datepicker.xhtml"
@@ -53,6 +50,15 @@ export var DateTimePickerPanel = class {
53
50
this . dateTimePopupFrame . style . height = this . DATE_PICKER_HEIGHT ;
54
51
break ;
55
52
}
53
+ case "datetime-local" : {
54
+ this . dateTimePopupFrame . setAttribute (
55
+ "src" ,
56
+ "chrome://global/content/datetimepicker.xhtml"
57
+ ) ;
58
+ this . dateTimePopupFrame . style . width = this . DATETIME_PICKER_WIDTH ;
59
+ this . dateTimePopupFrame . style . height = this . DATETIME_PICKER_HEIGHT ;
60
+ break ;
61
+ }
56
62
}
57
63
this . element . openPopupAtScreenRect (
58
64
"after_start" ,
@@ -81,28 +87,13 @@ export var DateTimePickerPanel = class {
81
87
}
82
88
83
89
setPopupValue ( data ) {
84
- switch ( this . type ) {
85
- case "time" : {
86
- this . postMessageToPicker ( {
87
- name : "PickerSetValue" ,
88
- detail : data . value ,
89
- } ) ;
90
- break ;
91
- }
92
- case "date" : {
93
- const { year, month, day } = data . value ;
94
- this . postMessageToPicker ( {
95
- name : "PickerSetValue" ,
96
- detail : {
97
- year,
98
- // Month value from input box starts from 1 instead of 0
99
- month : month == undefined ? undefined : month - 1 ,
100
- day,
101
- } ,
102
- } ) ;
103
- break ;
104
- }
105
- }
90
+ const detail = data . value ;
91
+ // Month value from input box starts from 1 instead of 0
92
+ detail . month = detail . month == undefined ? undefined : detail . month - 1 ;
93
+ this . postMessageToPicker ( {
94
+ name : "PickerSetValue" ,
95
+ detail,
96
+ } ) ;
106
97
}
107
98
108
99
initPicker ( detail ) {
@@ -121,125 +112,120 @@ export var DateTimePickerPanel = class {
121
112
122
113
const dir = Services . locale . isAppLocaleRTL ? "rtl" : "ltr" ;
123
114
124
- switch ( this . type ) {
125
- case "time" : {
126
- const { hour, minute } = detail . value ;
127
- const format = detail . format || "12" ;
128
-
129
- this . postMessageToPicker ( {
130
- name : "PickerInit" ,
131
- detail : {
132
- hour,
133
- minute,
134
- format,
135
- locale,
136
- min : detail . min ,
137
- max : detail . max ,
138
- step : detail . step ,
139
- } ,
140
- } ) ;
141
- break ;
142
- }
143
- case "date" : {
144
- const { year, month, day } = detail . value ;
145
- const { firstDayOfWeek, weekends } = this . getCalendarInfo ( locale ) ;
115
+ const { year, month, day, hour, minute } = detail . value ;
116
+ const flattenDetail = {
117
+ year,
118
+ // Month value from input box starts from 1 instead of 0
119
+ month : month == undefined ? undefined : month - 1 ,
120
+ day,
121
+ hour,
122
+ minute,
123
+ locale,
124
+ dir,
125
+ format : detail . format || "12" ,
126
+ min : detail . min ,
127
+ max : detail . max ,
128
+ step : detail . step ,
129
+ stepBase : detail . stepBase ,
130
+ } ;
146
131
147
- const monthDisplayNames = new Services . intl . DisplayNames ( locale , {
148
- type : "month" ,
149
- style : "short" ,
150
- calendar : "gregory" ,
151
- } ) ;
152
- const monthStrings = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ] . map (
153
- month => monthDisplayNames . of ( month )
154
- ) ;
132
+ if ( this . type !== "time" ) {
133
+ const { firstDayOfWeek, weekends } = this . getCalendarInfo ( locale ) ;
155
134
156
- const weekdayDisplayNames = new Services . intl . DisplayNames ( locale , {
157
- type : "weekday" ,
158
- style : "abbreviated" ,
159
- calendar : "gregory" ,
160
- } ) ;
161
- const weekdayStrings = [
162
- // Weekdays starting Sunday (7) to Saturday (6).
163
- 7 , 1 , 2 , 3 , 4 , 5 , 6 ,
164
- ] . map ( weekday => weekdayDisplayNames . of ( weekday ) ) ;
135
+ const monthDisplayNames = new Services . intl . DisplayNames ( locale , {
136
+ type : "month" ,
137
+ style : "short" ,
138
+ calendar : "gregory" ,
139
+ } ) ;
140
+ const monthStrings = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 ] . map (
141
+ monthNumber => monthDisplayNames . of ( monthNumber )
142
+ ) ;
165
143
166
- this . postMessageToPicker ( {
167
- name : "PickerInit" ,
168
- detail : {
169
- year,
170
- // Month value from input box starts from 1 instead of 0
171
- month : month == undefined ? undefined : month - 1 ,
172
- day,
173
- firstDayOfWeek,
174
- weekends,
175
- monthStrings,
176
- weekdayStrings,
177
- locale,
178
- dir,
179
- min : detail . min ,
180
- max : detail . max ,
181
- step : detail . step ,
182
- stepBase : detail . stepBase ,
183
- } ,
184
- } ) ;
185
- break ;
186
- }
144
+ const weekdayDisplayNames = new Services . intl . DisplayNames ( locale , {
145
+ type : "weekday" ,
146
+ style : "abbreviated" ,
147
+ calendar : "gregory" ,
148
+ } ) ;
149
+ const weekdayStrings = [
150
+ // Weekdays starting Sunday (7) to Saturday (6).
151
+ 7 , 1 , 2 , 3 , 4 , 5 , 6 ,
152
+ ] . map ( weekday => weekdayDisplayNames . of ( weekday ) ) ;
153
+ Object . assign ( flattenDetail , {
154
+ firstDayOfWeek,
155
+ weekends,
156
+ monthStrings,
157
+ weekdayStrings,
158
+ } ) ;
187
159
}
160
+ this . postMessageToPicker ( {
161
+ name : "PickerInit" ,
162
+ detail : flattenDetail ,
163
+ } ) ;
188
164
}
189
165
190
166
/**
191
167
* @param {Boolean } passAllValues: Pass spinner values regardless if they've been set/changed or not
192
168
*/
193
169
setInputBoxValue ( passAllValues ) {
194
- switch ( this . type ) {
195
- case "time" : {
196
- const { hour , minute , isHourSet , isMinuteSet , isDayPeriodSet } =
197
- this . pickerState ;
198
- const isAnyValueSet = isHourSet || isMinuteSet || isDayPeriodSet ;
199
- if ( passAllValues && isAnyValueSet ) {
200
- this . sendPickerValueChanged ( { hour , minute } ) ;
201
- } else {
202
- this . sendPickerValueChanged ( {
203
- hour : isHourSet || isDayPeriodSet ? hour : undefined ,
204
- minute : isMinuteSet ? minute : undefined ,
205
- } ) ;
206
- }
207
- break ;
208
- }
209
- case "date" : {
210
- this . sendPickerValueChanged ( this . pickerState ) ;
211
- break ;
170
+ const value = {
171
+ year : this . pickerState . year ,
172
+ month : this . pickerState . month ,
173
+ day : this . pickerState . day ,
174
+ hour : this . pickerState . hour ,
175
+ minute : this . pickerState . minute ,
176
+ } ;
177
+ if ( this . type !== "date" ) {
178
+ const isNoValueSet =
179
+ this . pickerState . isHourSet ||
180
+ this . pickerState . isMinuteSet ||
181
+ this . pickerState . isDayPeriodSet ;
182
+ if ( ! passAllValues || isNoValueSet ) {
183
+ value . hour =
184
+ this . pickerState . isHourSet || this . pickerState . isDayPeriodSet
185
+ ? value . hour
186
+ : undefined ;
187
+ value . minute = this . pickerState . isMinuteSet ? value . minute : undefined ;
212
188
}
213
189
}
190
+ this . sendPickerValueChanged ( value ) ;
214
191
}
215
192
216
193
sendPickerValueChanged ( value ) {
194
+ let detail = { } ;
217
195
switch ( this . type ) {
218
196
case "time" : {
219
- this . element . dispatchEvent (
220
- new CustomEvent ( "DateTimePickerValueChanged" , {
221
- detail : {
222
- hour : value . hour ,
223
- minute : value . minute ,
224
- } ,
225
- } )
226
- ) ;
197
+ detail = {
198
+ hour : value . hour ,
199
+ minute : value . minute ,
200
+ } ;
227
201
break ;
228
202
}
229
203
case "date" : {
230
- this . element . dispatchEvent (
231
- new CustomEvent ( "DateTimePickerValueChanged" , {
232
- detail : {
233
- year : value . year ,
234
- // Month value from input box starts from 1 instead of 0
235
- month : value . month == undefined ? undefined : value . month + 1 ,
236
- day : value . day ,
237
- } ,
238
- } )
239
- ) ;
204
+ detail = {
205
+ year : value . year ,
206
+ // Month value from input box starts from 1 instead of 0
207
+ month : value . month == undefined ? undefined : value . month + 1 ,
208
+ day : value . day ,
209
+ } ;
210
+ break ;
211
+ }
212
+ case "datetime-local" : {
213
+ detail = {
214
+ year : value . year ,
215
+ // Month value from input box starts from 1 instead of 0
216
+ month : value . month == undefined ? undefined : value . month + 1 ,
217
+ day : value . day ,
218
+ hour : value . hour ,
219
+ minute : value . minute ,
220
+ } ;
240
221
break ;
241
222
}
242
223
}
224
+ this . element . dispatchEvent (
225
+ new CustomEvent ( "DateTimePickerValueChanged" , {
226
+ detail,
227
+ } )
228
+ ) ;
243
229
}
244
230
245
231
getCalendarInfo ( locale ) {
0 commit comments