-
Notifications
You must be signed in to change notification settings - Fork 22
/
dates.mobl
124 lines (110 loc) · 2.54 KB
/
dates.mobl
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
119
120
121
122
123
124
application dates
import mobl
import mobl::datepicker
entity Person {
name : String
birthday : DateTime
}
template showDay(n : Num, d : DateTime) {
row {
cell(width="40%") { label(n) }
cell { label(addDays(d, n).toDateString()) }
}
}
template showWeek(n : Num, d : DateTime) {
row {
cell(width="40%") { label(n) }
cell { label(addWeeks(d, n).toDateString()) }
}
}
template showMonth(n : Num, d : DateTime) {
row {
cell(width="40%") { label(n) }
cell { label(addMonths(d, n).toDateString()) }
}
}
screen root() {
header("People")
topRightButton("Add", onclick={ addPerson(); })
group {
list(p in Person.all()) {
itemArrow(onclick={personDates(p); }) { label(p.name) }
}
}
}
screen addPerson() {
var p = Person{ birthday = now() }
header("Add person")
topRightButton("Done", onclick={
add(p);
screen return;
})
inputs {
inputString(p.name, placeholder="Name")
}
group {
datepicker(p.birthday)
}
}
function countDays(since : DateTime) : Num {
var factor = 1000*60*60*24;
var sinceEpoch = (now().getTime() - since.getTime()) / factor;
return sinceEpoch;
}
screen personDates(p : Person) {
var birthday : DateTime = p.birthday // shortcut
init {
alert(countDays(birthday));
}
header("Birthdays")
backButton("Back", onclick={ screen return; })
group {
datepicker(birthday)
}
table {
row {
cell{ <b>"Days"</b> }
cell { <b>"Date"</b> }
}
showDay(100, birthday)
showDay(1000, birthday)
showDay(10000, birthday)
showDay(20000, birthday)
showDay(25000, birthday)
}
table {
row {
cell{ <b>"Weeks"</b> }
cell { <b>"Date"</b> }
}
showWeek(100, birthday)
showWeek(1000, birthday)
showWeek(10000, birthday)
showWeek(20000, birthday)
}
table {
row {
cell{ <b>"Months"</b> }
cell { <b>"Date"</b> }
}
showMonth(100, birthday)
showMonth(250, birthday)
showMonth(500, birthday)
showMonth(1000, birthday)
}
}
function addDays(d : DateTime, n : Num) : DateTime {
return makeDate(d.getFullYear(), d.getMonth(), d.getDate() + n);
}
function addWeeks(d : DateTime, n : Num) : DateTime {
return makeDate(d.getFullYear(), d.getMonth(), d.getDate() + 7*n);
}
function addMonths(d : DateTime, n : Num) : DateTime {
return makeDate(d.getFullYear(), d.getMonth() + n, d.getDate());
}
external sync function makeDate(year : Num, month : Num, day : Num) : DateTime
<script>
dates.makeDate = function(year, month, day) {
return new Date(year, month, day);
}
</script>