@@ -24,11 +24,7 @@ Number.isNaN = Number.isNaN || function(value) {
24
24
*/
25
25
@Directive ( {
26
26
selector : '[ng2-datetime-picker]' ,
27
- providers : [ Ng2Datetime ] ,
28
- host : {
29
- '(click)' : 'showDatetimePicker()' ,
30
- '(focus)' : 'showDatetimePicker()'
31
- }
27
+ providers : [ Ng2Datetime ]
32
28
} )
33
29
export class Ng2DatetimePickerDirective implements OnInit , OnChanges {
34
30
@Input ( 'date-format' ) dateFormat : string ;
@@ -56,6 +52,8 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
56
52
private sub : any ;
57
53
private justShown : boolean ;
58
54
55
+ inputEl : HTMLInputElement ;
56
+
59
57
constructor (
60
58
private resolver :ComponentFactoryResolver ,
61
59
private viewContainerRef :ViewContainerRef ,
@@ -133,8 +131,8 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
133
131
wrapper . appendChild ( this . el ) ;
134
132
135
133
// add a click listener to document, so that it can hide when others clicked
136
- document . body . addEventListener ( 'click' , this . hideDatetimePicker ) ;
137
- this . el . addEventListener ( 'keyup' , this . keyEventListener ) ;
134
+ // document.body.addEventListener('click', this.hideDatetimePicker);
135
+ // this.el.addEventListener('keyup', this.keyEventListener);
138
136
if ( this . ngModel && this . ngModel . getTime ) { // if it is a Date object given, set dateValue and toString method
139
137
this . ngModel . toString = ( ) => Ng2Datetime . formatDate ( this . ngModel , this . dateFormat , this . dateOnly ) ;
140
138
}
@@ -148,6 +146,21 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
148
146
} ) ;
149
147
}
150
148
149
+ ngAfterViewInit ( ) {
150
+ // if this element is not an input tag, move dropdown after input tag
151
+ // so that it displays correctly
152
+ this . inputEl = this . el . tagName === "INPUT" ?
153
+ < HTMLInputElement > this . el : < HTMLInputElement > this . el . querySelector ( "input" ) ;
154
+
155
+ if ( this . inputEl ) {
156
+ this . inputEl . addEventListener ( 'focus' , this . showDatetimePicker ) ;
157
+ this . inputEl . addEventListener ( 'blur' , this . hideDatetimePicker ) ;
158
+ // this.inputEl.addEventListener('keydown', this.keydownEventHandler);
159
+ // this.inputEl.addEventListener('input', this.inputEventHandler);
160
+ }
161
+ }
162
+
163
+
151
164
ngOnChanges ( changes : SimpleChanges ) {
152
165
let date ;
153
166
if ( changes && changes [ 'ngModel' ] ) {
@@ -183,7 +196,7 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
183
196
if ( this . sub ) {
184
197
this . sub . unsubscribe ( ) ;
185
198
}
186
- document . body . removeEventListener ( 'click' , this . hideDatetimePicker ) ;
199
+ // document.body.removeEventListener('click', this.hideDatetimePicker);
187
200
}
188
201
189
202
/* input element string value is changed */
@@ -201,7 +214,7 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
201
214
} ;
202
215
203
216
//show datetimePicker element below the current element
204
- showDatetimePicker ( event ?) {
217
+ showDatetimePicker = ( event ?) : void => {
205
218
if ( this . componentRef ) { /* if already shown, do nothing */
206
219
return ;
207
220
}
@@ -210,7 +223,11 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
210
223
211
224
this . componentRef = this . viewContainerRef . createComponent ( factory ) ;
212
225
this . ng2DatetimePickerEl = this . componentRef . location . nativeElement ;
213
- this . ng2DatetimePickerEl . addEventListener ( 'keyup' , this . keyEventListener ) ;
226
+ // this.ng2DatetimePickerEl.addEventListener('keyup', this.keyEventListener);
227
+ // this.ng2DatetimePickerEl.addEventListener('click', function(event) {
228
+ // console.log('click.................');
229
+ // event.stopPropagation();
230
+ // });
214
231
215
232
let component = this . componentRef . instance ;
216
233
component . defaultValue = < Date > this . defaultValue || < Date > this . el [ 'dateValue' ] ;
@@ -234,37 +251,30 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
234
251
//Hack not to fire tab keyup event
235
252
this . justShown = true ;
236
253
setTimeout ( ( ) => this . justShown = false , 100 ) ;
237
- }
254
+ } ;
238
255
239
256
dateSelected = ( date ) => {
240
257
this . el . tagName === 'INPUT' && this . inputElValueChanged ( date ) ;
241
258
this . valueChanged . emit ( date ) ;
242
- }
259
+ } ;
243
260
244
- hideDatetimePicker = ( event ?) :void => {
245
- if ( this . componentRef ) {
246
- if ( /* invoked by clicking on somewhere in document */
247
- event &&
248
- event . type === 'click' &&
249
- event . target !== this . el &&
250
- ! this . elementIn ( event . target , this . ng2DatetimePickerEl )
251
- ) {
252
- this . componentRef . destroy ( ) ;
253
- this . componentRef = undefined ;
254
- } else if ( ! event ) { /* invoked by function call */
255
- this . componentRef . destroy ( ) ;
256
- this . componentRef = undefined ;
257
- }
258
- event && event . stopPropagation ( ) ;
261
+ hideDatetimePicker = ( event ?) : any => {
262
+ console . log ( ' hide XXXXXXXXXXXXXXXXXXXXXXXXXXX' , event , this . elementIn ( event . target , this . ng2DatetimePickerEl ) )
263
+ if ( event && this . elementIn ( event . target , this . ng2DatetimePickerEl ) ) {
264
+ return false ;
265
+ } else { /* invoked by function call */
266
+ this . componentRef . destroy ( ) ;
267
+ this . componentRef = undefined ;
259
268
}
269
+ event && event . stopPropagation ( ) ;
260
270
} ;
261
271
262
272
private keyEventListener = ( e :KeyboardEvent ) :void => {
263
- if ( e . keyCode === 27 || e . keyCode === 9 || e . keyCode === 13 ) { //ESC, TAB, ENTER keys
264
- if ( ! this . justShown ) {
265
- this . hideDatetimePicker ( ) ;
266
- }
267
- }
273
+ // if (e.keyCode === 27 || e.keyCode === 9 || e.keyCode === 13) { //ESC, TAB, ENTER keys
274
+ // if (!this.justShown) {
275
+ // this.hideDatetimePicker();
276
+ // }
277
+ // }
268
278
} ;
269
279
270
280
private elementIn ( el :Node , containerEl :Node ) :boolean {
0 commit comments