Skip to content
This repository was archived by the owner on Mar 2, 2018. It is now read-only.

Commit 5389dfe

Browse files
committed
wip
1 parent e223ab4 commit 5389dfe

File tree

2 files changed

+42
-44
lines changed

2 files changed

+42
-44
lines changed

app/directive-test.component.ts

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,18 +11,6 @@ var templateStr = `
1111
<div id="my-div">
1212
<h1>Ng2 DateTime Picker Test</h1>
1313
14-
<fieldset id="test1"><legend><h2>Open from a button</h2></legend>
15-
<ng2-utils-1>
16-
<input [(ngModel)]="date1" />
17-
<i class="fa fa-calendar"
18-
ng2-datetime-picker
19-
[default-value]="date1DefaultValue"
20-
(valueChanged)="date1=$event"></i>
21-
</ng2-utils-1>
22-
date1: {{date1}}
23-
<pre>{{templateStr | htmlCode:'ng2-utils-1'}}</pre>
24-
</fieldset>
25-
2614
<fieldset id="test2"><legend><h2>min date, max date, disabled dates</h2></legend>
2715
<ng2-utils-2>
2816
<input

src/ng2-datetime-picker.directive.ts

Lines changed: 42 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,7 @@ Number.isNaN = Number.isNaN || function(value) {
2424
*/
2525
@Directive({
2626
selector : '[ng2-datetime-picker]',
27-
providers: [Ng2Datetime],
28-
host : {
29-
'(click)': 'showDatetimePicker()',
30-
'(focus)': 'showDatetimePicker()'
31-
}
27+
providers: [Ng2Datetime]
3228
})
3329
export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
3430
@Input('date-format') dateFormat: string;
@@ -56,6 +52,8 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
5652
private sub: any;
5753
private justShown: boolean;
5854

55+
inputEl: HTMLInputElement;
56+
5957
constructor (
6058
private resolver:ComponentFactoryResolver,
6159
private viewContainerRef:ViewContainerRef,
@@ -133,8 +131,8 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
133131
wrapper.appendChild(this.el);
134132

135133
// 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);
138136
if (this.ngModel && this.ngModel.getTime) { // if it is a Date object given, set dateValue and toString method
139137
this.ngModel.toString = () => Ng2Datetime.formatDate(this.ngModel, this.dateFormat, this.dateOnly);
140138
}
@@ -148,6 +146,21 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
148146
});
149147
}
150148

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+
151164
ngOnChanges(changes: SimpleChanges) {
152165
let date;
153166
if(changes && changes['ngModel']) {
@@ -183,7 +196,7 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
183196
if(this.sub) {
184197
this.sub.unsubscribe();
185198
}
186-
document.body.removeEventListener('click', this.hideDatetimePicker);
199+
// document.body.removeEventListener('click', this.hideDatetimePicker);
187200
}
188201

189202
/* input element string value is changed */
@@ -201,7 +214,7 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
201214
};
202215

203216
//show datetimePicker element below the current element
204-
showDatetimePicker(event?) {
217+
showDatetimePicker = (event?): void => {
205218
if (this.componentRef) { /* if already shown, do nothing */
206219
return;
207220
}
@@ -210,7 +223,11 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
210223

211224
this.componentRef = this.viewContainerRef.createComponent(factory);
212225
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+
// });
214231

215232
let component = this.componentRef.instance;
216233
component.defaultValue = <Date>this.defaultValue || <Date>this.el['dateValue'];
@@ -234,37 +251,30 @@ export class Ng2DatetimePickerDirective implements OnInit, OnChanges {
234251
//Hack not to fire tab keyup event
235252
this.justShown = true;
236253
setTimeout(() => this.justShown = false, 100);
237-
}
254+
};
238255

239256
dateSelected = (date) => {
240257
this.el.tagName === 'INPUT' && this.inputElValueChanged(date);
241258
this.valueChanged.emit(date);
242-
}
259+
};
243260

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;
259268
}
269+
event && event.stopPropagation();
260270
};
261271

262272
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+
// }
268278
};
269279

270280
private elementIn (el:Node, containerEl:Node):boolean {

0 commit comments

Comments
 (0)