-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.js
118 lines (101 loc) · 4.22 KB
/
main.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
define([
"./calendar/calendar"
], function(Calendar) {
return Elf.createClass({
constructor : function () {
var now = new Date();
this.min = new Date(now.getFullYear() + 0, now.getMonth(), now.getDate());
this.max = new Date(now.getFullYear() + 1, now.getMonth(), now.getDate());
this.prev = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 2);
this.next = new Date(now.getFullYear(), now.getMonth(), now.getDate() + 8);
this.value = new Date(now.getFullYear(), now.getMonth(), 1);
this.phase = true;
this.milli = 1000 * 60 * 60 * 24;
this.tPrev = this.prev;
this.tNext = this.next;
},
render : function () {
// JSX
// <Calendar min={this.min}
// max={this.max}
// prev={this.prev}
// next={this.next}
// onSlidePrev={this.onSlidePrev.bind(this)}
// onSlideNext={this.onSlideNext.bind(this)}
// onItemClick={this.onItemClick.bind(this)}
// onItemEnter={this.onItemEnter.bind(this)}
// onItemLeave={this.onItemLeave.bind(this)} />
// Template
// <calendar min="{{min}}"
// max="{{max}}"
// prev="{{prev}}"
// next="{{next}}"
// onslideprev="onSlidePrev($event)"
// onslidenext="onSlideNext($event)"
// onitemclick="onItemClick($event)"
// onitementer="onItemEnter($event)"
// onitemleave="onItemEnter($event)" />
// Virtual DOM
return Elf.createElement(Calendar, {
min : this.min,
max : this.max,
prev : this.tPrev,
next : this.tNext,
value : this.value,
onSlidePrev : this.onSlidePrev.bind(this),
onSlideNext : this.onSlideNext.bind(this),
onItemClick : this.onItemClick.bind(this),
onItemEnter : this.onItemEnter.bind(this),
onItemLeave : this.onItemLeave.bind(this)
});
},
onSlidePrev : function (event) {
this.value.setMonth(this.value.getMonth() - 1);
},
onSlideNext : function (event) {
this.value.setMonth(this.value.getMonth() + 1);
},
onItemClick : function (event) {
if (this.phase) {
if (!(event.detail >= this.max)) {
this.prev = event.detail;
if (!(this.prev < this.next)) {
this.next = new Date(this.prev.getTime() + this.milli);
}
this.phase = !this.phase;
}
} else {
if (!(event.detail <= this.min)) {
this.next = event.detail;
if (!(this.next > this.prev)) {
this.prev = new Date(this.next.getTime() - this.milli);
}
this.phase = !this.phase;
}
}
this.tPrev = this.prev;
this.tNext = this.next;
},
onItemEnter : function (event) {
if (this.phase) {
if (!(event.detail >= this.max)) {
this.tPrev = event.detail;
if (!(this.tPrev < this.tNext)) {
this.tNext = new Date(this.tPrev.getTime() + this.milli);
}
}
} else {
if (!(event.detail <= this.min)) {
this.tNext = event.detail;
if (!(this.tNext > this.tPrev)) {
this.tPrev = new Date(this.tNext.getTime() - this.milli);
}
}
}
},
onItemLeave : function (event) {
this.tPrev = this.prev;
this.tNext = this.next;
}
});
});