Showing
11 changed files
with
2870 additions
and
85 deletions
public/css/.gitignore
0 → 100644
public/css/.travis.yml
0 → 100644
public/css/LICENSE
0 → 100644
1 | +The MIT License (MIT) | ||
2 | + | ||
3 | +Copyright (c) 2013-2017 Blackrock Digital LLC | ||
4 | + | ||
5 | +Permission is hereby granted, free of charge, to any person obtaining a copy | ||
6 | +of this software and associated documentation files (the "Software"), to deal | ||
7 | +in the Software without restriction, including without limitation the rights | ||
8 | +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell | ||
9 | +copies of the Software, and to permit persons to whom the Software is | ||
10 | +furnished to do so, subject to the following conditions: | ||
11 | + | ||
12 | +The above copyright notice and this permission notice shall be included in | ||
13 | +all copies or substantial portions of the Software. | ||
14 | + | ||
15 | +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
16 | +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
17 | +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE | ||
18 | +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER | ||
19 | +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, | ||
20 | +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN | ||
21 | +THE SOFTWARE. |
public/css/datepicker3.css
0 → 100644
1 | +/*! | ||
2 | + * Datepicker for Bootstrap | ||
3 | + * | ||
4 | + * Copyright 2012 Stefan Petre | ||
5 | + * Improvements by Andrew Rowls | ||
6 | + * Licensed under the Apache License v2.0 | ||
7 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
8 | + * | ||
9 | + */ | ||
10 | +.datepicker { | ||
11 | + padding: 4px; | ||
12 | + border-radius: 4px; | ||
13 | + direction: ltr; | ||
14 | + /*.dow { | ||
15 | + border-top: 1px solid #ddd !important; | ||
16 | + }*/ | ||
17 | +} | ||
18 | +.datepicker-inline { | ||
19 | + width: 220px; | ||
20 | +} | ||
21 | +.datepicker.datepicker-rtl { | ||
22 | + direction: rtl; | ||
23 | +} | ||
24 | +.datepicker.datepicker-rtl table tr td span { | ||
25 | + float: right; | ||
26 | +} | ||
27 | +.datepicker-dropdown { | ||
28 | + top: 0; | ||
29 | + left: 0; | ||
30 | +} | ||
31 | +.datepicker-dropdown:before { | ||
32 | + content: ''; | ||
33 | + display: inline-block; | ||
34 | + border-left: 7px solid transparent; | ||
35 | + border-right: 7px solid transparent; | ||
36 | + border-bottom: 7px solid #ccc; | ||
37 | + border-top: 0; | ||
38 | + border-bottom-color: rgba(0, 0, 0, 0.2); | ||
39 | + position: absolute; | ||
40 | +} | ||
41 | +.datepicker-dropdown:after { | ||
42 | + content: ''; | ||
43 | + display: inline-block; | ||
44 | + border-left: 6px solid transparent; | ||
45 | + border-right: 6px solid transparent; | ||
46 | + border-bottom: 6px solid #fff; | ||
47 | + border-top: 0; | ||
48 | + position: absolute; | ||
49 | +} | ||
50 | +.datepicker-dropdown.datepicker-orient-left:before { | ||
51 | + left: 6px; | ||
52 | +} | ||
53 | +.datepicker-dropdown.datepicker-orient-left:after { | ||
54 | + left: 7px; | ||
55 | +} | ||
56 | +.datepicker-dropdown.datepicker-orient-right:before { | ||
57 | + right: 6px; | ||
58 | +} | ||
59 | +.datepicker-dropdown.datepicker-orient-right:after { | ||
60 | + right: 7px; | ||
61 | +} | ||
62 | +.datepicker-dropdown.datepicker-orient-top:before { | ||
63 | + top: -7px; | ||
64 | +} | ||
65 | +.datepicker-dropdown.datepicker-orient-top:after { | ||
66 | + top: -6px; | ||
67 | +} | ||
68 | +.datepicker-dropdown.datepicker-orient-bottom:before { | ||
69 | + bottom: -7px; | ||
70 | + border-bottom: 0; | ||
71 | + border-top: 7px solid #999; | ||
72 | +} | ||
73 | +.datepicker-dropdown.datepicker-orient-bottom:after { | ||
74 | + bottom: -6px; | ||
75 | + border-bottom: 0; | ||
76 | + border-top: 6px solid #fff; | ||
77 | +} | ||
78 | +.datepicker > div { | ||
79 | + display: none; | ||
80 | +} | ||
81 | +.datepicker.days div.datepicker-days { | ||
82 | + display: block; | ||
83 | +} | ||
84 | +.datepicker.months div.datepicker-months { | ||
85 | + display: block; | ||
86 | +} | ||
87 | +.datepicker.years div.datepicker-years { | ||
88 | + display: block; | ||
89 | +} | ||
90 | +.datepicker table { | ||
91 | + margin: 0; | ||
92 | + -webkit-touch-callout: none; | ||
93 | + -webkit-user-select: none; | ||
94 | + -khtml-user-select: none; | ||
95 | + -moz-user-select: none; | ||
96 | + -ms-user-select: none; | ||
97 | + user-select: none; | ||
98 | +} | ||
99 | +.datepicker table tr td, | ||
100 | +.datepicker table tr th { | ||
101 | + text-align: center; | ||
102 | + width: 30px; | ||
103 | + height: 30px; | ||
104 | + border-radius: 4px; | ||
105 | + border: none; | ||
106 | +} | ||
107 | +.table-striped .datepicker table tr td, | ||
108 | +.table-striped .datepicker table tr th { | ||
109 | + background-color: transparent; | ||
110 | +} | ||
111 | +.datepicker table tr td.day:hover, | ||
112 | +.datepicker table tr td.day.focused { | ||
113 | + background: #eeeeee; | ||
114 | + cursor: pointer; | ||
115 | +} | ||
116 | +.datepicker table tr td.old, | ||
117 | +.datepicker table tr td.new { | ||
118 | + color: #999999; | ||
119 | +} | ||
120 | +.datepicker table tr td.disabled, | ||
121 | +.datepicker table tr td.disabled:hover { | ||
122 | + background: none; | ||
123 | + color: #999999; | ||
124 | + cursor: default; | ||
125 | +} | ||
126 | +.datepicker table tr td.today, | ||
127 | +.datepicker table tr td.today:hover, | ||
128 | +.datepicker table tr td.today.disabled, | ||
129 | +.datepicker table tr td.today.disabled:hover { | ||
130 | + color: #000000; | ||
131 | + background-color: #ffdb99; | ||
132 | + border-color: #ffb733; | ||
133 | +} | ||
134 | +.datepicker table tr td.today:hover, | ||
135 | +.datepicker table tr td.today:hover:hover, | ||
136 | +.datepicker table tr td.today.disabled:hover, | ||
137 | +.datepicker table tr td.today.disabled:hover:hover, | ||
138 | +.datepicker table tr td.today:focus, | ||
139 | +.datepicker table tr td.today:hover:focus, | ||
140 | +.datepicker table tr td.today.disabled:focus, | ||
141 | +.datepicker table tr td.today.disabled:hover:focus, | ||
142 | +.datepicker table tr td.today:active, | ||
143 | +.datepicker table tr td.today:hover:active, | ||
144 | +.datepicker table tr td.today.disabled:active, | ||
145 | +.datepicker table tr td.today.disabled:hover:active, | ||
146 | +.datepicker table tr td.today.active, | ||
147 | +.datepicker table tr td.today:hover.active, | ||
148 | +.datepicker table tr td.today.disabled.active, | ||
149 | +.datepicker table tr td.today.disabled:hover.active, | ||
150 | +.open .dropdown-toggle.datepicker table tr td.today, | ||
151 | +.open .dropdown-toggle.datepicker table tr td.today:hover, | ||
152 | +.open .dropdown-toggle.datepicker table tr td.today.disabled, | ||
153 | +.open .dropdown-toggle.datepicker table tr td.today.disabled:hover { | ||
154 | + color: #000000; | ||
155 | + background-color: #ffcd70; | ||
156 | + border-color: #f59e00; | ||
157 | +} | ||
158 | +.datepicker table tr td.today:active, | ||
159 | +.datepicker table tr td.today:hover:active, | ||
160 | +.datepicker table tr td.today.disabled:active, | ||
161 | +.datepicker table tr td.today.disabled:hover:active, | ||
162 | +.datepicker table tr td.today.active, | ||
163 | +.datepicker table tr td.today:hover.active, | ||
164 | +.datepicker table tr td.today.disabled.active, | ||
165 | +.datepicker table tr td.today.disabled:hover.active, | ||
166 | +.open .dropdown-toggle.datepicker table tr td.today, | ||
167 | +.open .dropdown-toggle.datepicker table tr td.today:hover, | ||
168 | +.open .dropdown-toggle.datepicker table tr td.today.disabled, | ||
169 | +.open .dropdown-toggle.datepicker table tr td.today.disabled:hover { | ||
170 | + background-image: none; | ||
171 | +} | ||
172 | +.datepicker table tr td.today.disabled, | ||
173 | +.datepicker table tr td.today:hover.disabled, | ||
174 | +.datepicker table tr td.today.disabled.disabled, | ||
175 | +.datepicker table tr td.today.disabled:hover.disabled, | ||
176 | +.datepicker table tr td.today[disabled], | ||
177 | +.datepicker table tr td.today:hover[disabled], | ||
178 | +.datepicker table tr td.today.disabled[disabled], | ||
179 | +.datepicker table tr td.today.disabled:hover[disabled], | ||
180 | +fieldset[disabled] .datepicker table tr td.today, | ||
181 | +fieldset[disabled] .datepicker table tr td.today:hover, | ||
182 | +fieldset[disabled] .datepicker table tr td.today.disabled, | ||
183 | +fieldset[disabled] .datepicker table tr td.today.disabled:hover, | ||
184 | +.datepicker table tr td.today.disabled:hover, | ||
185 | +.datepicker table tr td.today:hover.disabled:hover, | ||
186 | +.datepicker table tr td.today.disabled.disabled:hover, | ||
187 | +.datepicker table tr td.today.disabled:hover.disabled:hover, | ||
188 | +.datepicker table tr td.today[disabled]:hover, | ||
189 | +.datepicker table tr td.today:hover[disabled]:hover, | ||
190 | +.datepicker table tr td.today.disabled[disabled]:hover, | ||
191 | +.datepicker table tr td.today.disabled:hover[disabled]:hover, | ||
192 | +fieldset[disabled] .datepicker table tr td.today:hover, | ||
193 | +fieldset[disabled] .datepicker table tr td.today:hover:hover, | ||
194 | +fieldset[disabled] .datepicker table tr td.today.disabled:hover, | ||
195 | +fieldset[disabled] .datepicker table tr td.today.disabled:hover:hover, | ||
196 | +.datepicker table tr td.today.disabled:focus, | ||
197 | +.datepicker table tr td.today:hover.disabled:focus, | ||
198 | +.datepicker table tr td.today.disabled.disabled:focus, | ||
199 | +.datepicker table tr td.today.disabled:hover.disabled:focus, | ||
200 | +.datepicker table tr td.today[disabled]:focus, | ||
201 | +.datepicker table tr td.today:hover[disabled]:focus, | ||
202 | +.datepicker table tr td.today.disabled[disabled]:focus, | ||
203 | +.datepicker table tr td.today.disabled:hover[disabled]:focus, | ||
204 | +fieldset[disabled] .datepicker table tr td.today:focus, | ||
205 | +fieldset[disabled] .datepicker table tr td.today:hover:focus, | ||
206 | +fieldset[disabled] .datepicker table tr td.today.disabled:focus, | ||
207 | +fieldset[disabled] .datepicker table tr td.today.disabled:hover:focus, | ||
208 | +.datepicker table tr td.today.disabled:active, | ||
209 | +.datepicker table tr td.today:hover.disabled:active, | ||
210 | +.datepicker table tr td.today.disabled.disabled:active, | ||
211 | +.datepicker table tr td.today.disabled:hover.disabled:active, | ||
212 | +.datepicker table tr td.today[disabled]:active, | ||
213 | +.datepicker table tr td.today:hover[disabled]:active, | ||
214 | +.datepicker table tr td.today.disabled[disabled]:active, | ||
215 | +.datepicker table tr td.today.disabled:hover[disabled]:active, | ||
216 | +fieldset[disabled] .datepicker table tr td.today:active, | ||
217 | +fieldset[disabled] .datepicker table tr td.today:hover:active, | ||
218 | +fieldset[disabled] .datepicker table tr td.today.disabled:active, | ||
219 | +fieldset[disabled] .datepicker table tr td.today.disabled:hover:active, | ||
220 | +.datepicker table tr td.today.disabled.active, | ||
221 | +.datepicker table tr td.today:hover.disabled.active, | ||
222 | +.datepicker table tr td.today.disabled.disabled.active, | ||
223 | +.datepicker table tr td.today.disabled:hover.disabled.active, | ||
224 | +.datepicker table tr td.today[disabled].active, | ||
225 | +.datepicker table tr td.today:hover[disabled].active, | ||
226 | +.datepicker table tr td.today.disabled[disabled].active, | ||
227 | +.datepicker table tr td.today.disabled:hover[disabled].active, | ||
228 | +fieldset[disabled] .datepicker table tr td.today.active, | ||
229 | +fieldset[disabled] .datepicker table tr td.today:hover.active, | ||
230 | +fieldset[disabled] .datepicker table tr td.today.disabled.active, | ||
231 | +fieldset[disabled] .datepicker table tr td.today.disabled:hover.active { | ||
232 | + background-color: #ffdb99; | ||
233 | + border-color: #ffb733; | ||
234 | +} | ||
235 | +.datepicker table tr td.today:hover:hover { | ||
236 | + color: #000; | ||
237 | +} | ||
238 | +.datepicker table tr td.today.active:hover { | ||
239 | + color: #fff; | ||
240 | +} | ||
241 | +.datepicker table tr td.range, | ||
242 | +.datepicker table tr td.range:hover, | ||
243 | +.datepicker table tr td.range.disabled, | ||
244 | +.datepicker table tr td.range.disabled:hover { | ||
245 | + background: #eeeeee; | ||
246 | + border-radius: 0; | ||
247 | +} | ||
248 | +.datepicker table tr td.range.today, | ||
249 | +.datepicker table tr td.range.today:hover, | ||
250 | +.datepicker table tr td.range.today.disabled, | ||
251 | +.datepicker table tr td.range.today.disabled:hover { | ||
252 | + color: #000000; | ||
253 | + background-color: #f7ca77; | ||
254 | + border-color: #f1a417; | ||
255 | + border-radius: 0; | ||
256 | +} | ||
257 | +.datepicker table tr td.range.today:hover, | ||
258 | +.datepicker table tr td.range.today:hover:hover, | ||
259 | +.datepicker table tr td.range.today.disabled:hover, | ||
260 | +.datepicker table tr td.range.today.disabled:hover:hover, | ||
261 | +.datepicker table tr td.range.today:focus, | ||
262 | +.datepicker table tr td.range.today:hover:focus, | ||
263 | +.datepicker table tr td.range.today.disabled:focus, | ||
264 | +.datepicker table tr td.range.today.disabled:hover:focus, | ||
265 | +.datepicker table tr td.range.today:active, | ||
266 | +.datepicker table tr td.range.today:hover:active, | ||
267 | +.datepicker table tr td.range.today.disabled:active, | ||
268 | +.datepicker table tr td.range.today.disabled:hover:active, | ||
269 | +.datepicker table tr td.range.today.active, | ||
270 | +.datepicker table tr td.range.today:hover.active, | ||
271 | +.datepicker table tr td.range.today.disabled.active, | ||
272 | +.datepicker table tr td.range.today.disabled:hover.active, | ||
273 | +.open .dropdown-toggle.datepicker table tr td.range.today, | ||
274 | +.open .dropdown-toggle.datepicker table tr td.range.today:hover, | ||
275 | +.open .dropdown-toggle.datepicker table tr td.range.today.disabled, | ||
276 | +.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover { | ||
277 | + color: #000000; | ||
278 | + background-color: #f4bb51; | ||
279 | + border-color: #bf800c; | ||
280 | +} | ||
281 | +.datepicker table tr td.range.today:active, | ||
282 | +.datepicker table tr td.range.today:hover:active, | ||
283 | +.datepicker table tr td.range.today.disabled:active, | ||
284 | +.datepicker table tr td.range.today.disabled:hover:active, | ||
285 | +.datepicker table tr td.range.today.active, | ||
286 | +.datepicker table tr td.range.today:hover.active, | ||
287 | +.datepicker table tr td.range.today.disabled.active, | ||
288 | +.datepicker table tr td.range.today.disabled:hover.active, | ||
289 | +.open .dropdown-toggle.datepicker table tr td.range.today, | ||
290 | +.open .dropdown-toggle.datepicker table tr td.range.today:hover, | ||
291 | +.open .dropdown-toggle.datepicker table tr td.range.today.disabled, | ||
292 | +.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover { | ||
293 | + background-image: none; | ||
294 | +} | ||
295 | +.datepicker table tr td.range.today.disabled, | ||
296 | +.datepicker table tr td.range.today:hover.disabled, | ||
297 | +.datepicker table tr td.range.today.disabled.disabled, | ||
298 | +.datepicker table tr td.range.today.disabled:hover.disabled, | ||
299 | +.datepicker table tr td.range.today[disabled], | ||
300 | +.datepicker table tr td.range.today:hover[disabled], | ||
301 | +.datepicker table tr td.range.today.disabled[disabled], | ||
302 | +.datepicker table tr td.range.today.disabled:hover[disabled], | ||
303 | +fieldset[disabled] .datepicker table tr td.range.today, | ||
304 | +fieldset[disabled] .datepicker table tr td.range.today:hover, | ||
305 | +fieldset[disabled] .datepicker table tr td.range.today.disabled, | ||
306 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:hover, | ||
307 | +.datepicker table tr td.range.today.disabled:hover, | ||
308 | +.datepicker table tr td.range.today:hover.disabled:hover, | ||
309 | +.datepicker table tr td.range.today.disabled.disabled:hover, | ||
310 | +.datepicker table tr td.range.today.disabled:hover.disabled:hover, | ||
311 | +.datepicker table tr td.range.today[disabled]:hover, | ||
312 | +.datepicker table tr td.range.today:hover[disabled]:hover, | ||
313 | +.datepicker table tr td.range.today.disabled[disabled]:hover, | ||
314 | +.datepicker table tr td.range.today.disabled:hover[disabled]:hover, | ||
315 | +fieldset[disabled] .datepicker table tr td.range.today:hover, | ||
316 | +fieldset[disabled] .datepicker table tr td.range.today:hover:hover, | ||
317 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:hover, | ||
318 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover, | ||
319 | +.datepicker table tr td.range.today.disabled:focus, | ||
320 | +.datepicker table tr td.range.today:hover.disabled:focus, | ||
321 | +.datepicker table tr td.range.today.disabled.disabled:focus, | ||
322 | +.datepicker table tr td.range.today.disabled:hover.disabled:focus, | ||
323 | +.datepicker table tr td.range.today[disabled]:focus, | ||
324 | +.datepicker table tr td.range.today:hover[disabled]:focus, | ||
325 | +.datepicker table tr td.range.today.disabled[disabled]:focus, | ||
326 | +.datepicker table tr td.range.today.disabled:hover[disabled]:focus, | ||
327 | +fieldset[disabled] .datepicker table tr td.range.today:focus, | ||
328 | +fieldset[disabled] .datepicker table tr td.range.today:hover:focus, | ||
329 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:focus, | ||
330 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus, | ||
331 | +.datepicker table tr td.range.today.disabled:active, | ||
332 | +.datepicker table tr td.range.today:hover.disabled:active, | ||
333 | +.datepicker table tr td.range.today.disabled.disabled:active, | ||
334 | +.datepicker table tr td.range.today.disabled:hover.disabled:active, | ||
335 | +.datepicker table tr td.range.today[disabled]:active, | ||
336 | +.datepicker table tr td.range.today:hover[disabled]:active, | ||
337 | +.datepicker table tr td.range.today.disabled[disabled]:active, | ||
338 | +.datepicker table tr td.range.today.disabled:hover[disabled]:active, | ||
339 | +fieldset[disabled] .datepicker table tr td.range.today:active, | ||
340 | +fieldset[disabled] .datepicker table tr td.range.today:hover:active, | ||
341 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:active, | ||
342 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active, | ||
343 | +.datepicker table tr td.range.today.disabled.active, | ||
344 | +.datepicker table tr td.range.today:hover.disabled.active, | ||
345 | +.datepicker table tr td.range.today.disabled.disabled.active, | ||
346 | +.datepicker table tr td.range.today.disabled:hover.disabled.active, | ||
347 | +.datepicker table tr td.range.today[disabled].active, | ||
348 | +.datepicker table tr td.range.today:hover[disabled].active, | ||
349 | +.datepicker table tr td.range.today.disabled[disabled].active, | ||
350 | +.datepicker table tr td.range.today.disabled:hover[disabled].active, | ||
351 | +fieldset[disabled] .datepicker table tr td.range.today.active, | ||
352 | +fieldset[disabled] .datepicker table tr td.range.today:hover.active, | ||
353 | +fieldset[disabled] .datepicker table tr td.range.today.disabled.active, | ||
354 | +fieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active { | ||
355 | + background-color: #f7ca77; | ||
356 | + border-color: #f1a417; | ||
357 | +} | ||
358 | +.datepicker table tr td.selected, | ||
359 | +.datepicker table tr td.selected:hover, | ||
360 | +.datepicker table tr td.selected.disabled, | ||
361 | +.datepicker table tr td.selected.disabled:hover { | ||
362 | + color: #ffffff; | ||
363 | + background-color: #999999; | ||
364 | + border-color: #555555; | ||
365 | + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | ||
366 | +} | ||
367 | +.datepicker table tr td.selected:hover, | ||
368 | +.datepicker table tr td.selected:hover:hover, | ||
369 | +.datepicker table tr td.selected.disabled:hover, | ||
370 | +.datepicker table tr td.selected.disabled:hover:hover, | ||
371 | +.datepicker table tr td.selected:focus, | ||
372 | +.datepicker table tr td.selected:hover:focus, | ||
373 | +.datepicker table tr td.selected.disabled:focus, | ||
374 | +.datepicker table tr td.selected.disabled:hover:focus, | ||
375 | +.datepicker table tr td.selected:active, | ||
376 | +.datepicker table tr td.selected:hover:active, | ||
377 | +.datepicker table tr td.selected.disabled:active, | ||
378 | +.datepicker table tr td.selected.disabled:hover:active, | ||
379 | +.datepicker table tr td.selected.active, | ||
380 | +.datepicker table tr td.selected:hover.active, | ||
381 | +.datepicker table tr td.selected.disabled.active, | ||
382 | +.datepicker table tr td.selected.disabled:hover.active, | ||
383 | +.open .dropdown-toggle.datepicker table tr td.selected, | ||
384 | +.open .dropdown-toggle.datepicker table tr td.selected:hover, | ||
385 | +.open .dropdown-toggle.datepicker table tr td.selected.disabled, | ||
386 | +.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover { | ||
387 | + color: #ffffff; | ||
388 | + background-color: #858585; | ||
389 | + border-color: #373737; | ||
390 | +} | ||
391 | +.datepicker table tr td.selected:active, | ||
392 | +.datepicker table tr td.selected:hover:active, | ||
393 | +.datepicker table tr td.selected.disabled:active, | ||
394 | +.datepicker table tr td.selected.disabled:hover:active, | ||
395 | +.datepicker table tr td.selected.active, | ||
396 | +.datepicker table tr td.selected:hover.active, | ||
397 | +.datepicker table tr td.selected.disabled.active, | ||
398 | +.datepicker table tr td.selected.disabled:hover.active, | ||
399 | +.open .dropdown-toggle.datepicker table tr td.selected, | ||
400 | +.open .dropdown-toggle.datepicker table tr td.selected:hover, | ||
401 | +.open .dropdown-toggle.datepicker table tr td.selected.disabled, | ||
402 | +.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover { | ||
403 | + background-image: none; | ||
404 | +} | ||
405 | +.datepicker table tr td.selected.disabled, | ||
406 | +.datepicker table tr td.selected:hover.disabled, | ||
407 | +.datepicker table tr td.selected.disabled.disabled, | ||
408 | +.datepicker table tr td.selected.disabled:hover.disabled, | ||
409 | +.datepicker table tr td.selected[disabled], | ||
410 | +.datepicker table tr td.selected:hover[disabled], | ||
411 | +.datepicker table tr td.selected.disabled[disabled], | ||
412 | +.datepicker table tr td.selected.disabled:hover[disabled], | ||
413 | +fieldset[disabled] .datepicker table tr td.selected, | ||
414 | +fieldset[disabled] .datepicker table tr td.selected:hover, | ||
415 | +fieldset[disabled] .datepicker table tr td.selected.disabled, | ||
416 | +fieldset[disabled] .datepicker table tr td.selected.disabled:hover, | ||
417 | +.datepicker table tr td.selected.disabled:hover, | ||
418 | +.datepicker table tr td.selected:hover.disabled:hover, | ||
419 | +.datepicker table tr td.selected.disabled.disabled:hover, | ||
420 | +.datepicker table tr td.selected.disabled:hover.disabled:hover, | ||
421 | +.datepicker table tr td.selected[disabled]:hover, | ||
422 | +.datepicker table tr td.selected:hover[disabled]:hover, | ||
423 | +.datepicker table tr td.selected.disabled[disabled]:hover, | ||
424 | +.datepicker table tr td.selected.disabled:hover[disabled]:hover, | ||
425 | +fieldset[disabled] .datepicker table tr td.selected:hover, | ||
426 | +fieldset[disabled] .datepicker table tr td.selected:hover:hover, | ||
427 | +fieldset[disabled] .datepicker table tr td.selected.disabled:hover, | ||
428 | +fieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover, | ||
429 | +.datepicker table tr td.selected.disabled:focus, | ||
430 | +.datepicker table tr td.selected:hover.disabled:focus, | ||
431 | +.datepicker table tr td.selected.disabled.disabled:focus, | ||
432 | +.datepicker table tr td.selected.disabled:hover.disabled:focus, | ||
433 | +.datepicker table tr td.selected[disabled]:focus, | ||
434 | +.datepicker table tr td.selected:hover[disabled]:focus, | ||
435 | +.datepicker table tr td.selected.disabled[disabled]:focus, | ||
436 | +.datepicker table tr td.selected.disabled:hover[disabled]:focus, | ||
437 | +fieldset[disabled] .datepicker table tr td.selected:focus, | ||
438 | +fieldset[disabled] .datepicker table tr td.selected:hover:focus, | ||
439 | +fieldset[disabled] .datepicker table tr td.selected.disabled:focus, | ||
440 | +fieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus, | ||
441 | +.datepicker table tr td.selected.disabled:active, | ||
442 | +.datepicker table tr td.selected:hover.disabled:active, | ||
443 | +.datepicker table tr td.selected.disabled.disabled:active, | ||
444 | +.datepicker table tr td.selected.disabled:hover.disabled:active, | ||
445 | +.datepicker table tr td.selected[disabled]:active, | ||
446 | +.datepicker table tr td.selected:hover[disabled]:active, | ||
447 | +.datepicker table tr td.selected.disabled[disabled]:active, | ||
448 | +.datepicker table tr td.selected.disabled:hover[disabled]:active, | ||
449 | +fieldset[disabled] .datepicker table tr td.selected:active, | ||
450 | +fieldset[disabled] .datepicker table tr td.selected:hover:active, | ||
451 | +fieldset[disabled] .datepicker table tr td.selected.disabled:active, | ||
452 | +fieldset[disabled] .datepicker table tr td.selected.disabled:hover:active, | ||
453 | +.datepicker table tr td.selected.disabled.active, | ||
454 | +.datepicker table tr td.selected:hover.disabled.active, | ||
455 | +.datepicker table tr td.selected.disabled.disabled.active, | ||
456 | +.datepicker table tr td.selected.disabled:hover.disabled.active, | ||
457 | +.datepicker table tr td.selected[disabled].active, | ||
458 | +.datepicker table tr td.selected:hover[disabled].active, | ||
459 | +.datepicker table tr td.selected.disabled[disabled].active, | ||
460 | +.datepicker table tr td.selected.disabled:hover[disabled].active, | ||
461 | +fieldset[disabled] .datepicker table tr td.selected.active, | ||
462 | +fieldset[disabled] .datepicker table tr td.selected:hover.active, | ||
463 | +fieldset[disabled] .datepicker table tr td.selected.disabled.active, | ||
464 | +fieldset[disabled] .datepicker table tr td.selected.disabled:hover.active { | ||
465 | + background-color: #999999; | ||
466 | + border-color: #555555; | ||
467 | +} | ||
468 | +.datepicker table tr td.active, | ||
469 | +.datepicker table tr td.active:hover, | ||
470 | +.datepicker table tr td.active.disabled, | ||
471 | +.datepicker table tr td.active.disabled:hover { | ||
472 | + color: #ffffff; | ||
473 | + background-color: #428bca; | ||
474 | + border-color: #357ebd; | ||
475 | + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | ||
476 | +} | ||
477 | +.datepicker table tr td.active:hover, | ||
478 | +.datepicker table tr td.active:hover:hover, | ||
479 | +.datepicker table tr td.active.disabled:hover, | ||
480 | +.datepicker table tr td.active.disabled:hover:hover, | ||
481 | +.datepicker table tr td.active:focus, | ||
482 | +.datepicker table tr td.active:hover:focus, | ||
483 | +.datepicker table tr td.active.disabled:focus, | ||
484 | +.datepicker table tr td.active.disabled:hover:focus, | ||
485 | +.datepicker table tr td.active:active, | ||
486 | +.datepicker table tr td.active:hover:active, | ||
487 | +.datepicker table tr td.active.disabled:active, | ||
488 | +.datepicker table tr td.active.disabled:hover:active, | ||
489 | +.datepicker table tr td.active.active, | ||
490 | +.datepicker table tr td.active:hover.active, | ||
491 | +.datepicker table tr td.active.disabled.active, | ||
492 | +.datepicker table tr td.active.disabled:hover.active, | ||
493 | +.open .dropdown-toggle.datepicker table tr td.active, | ||
494 | +.open .dropdown-toggle.datepicker table tr td.active:hover, | ||
495 | +.open .dropdown-toggle.datepicker table tr td.active.disabled, | ||
496 | +.open .dropdown-toggle.datepicker table tr td.active.disabled:hover { | ||
497 | + color: #ffffff; | ||
498 | + background-color: #3276b1; | ||
499 | + border-color: #285e8e; | ||
500 | +} | ||
501 | +.datepicker table tr td.active:active, | ||
502 | +.datepicker table tr td.active:hover:active, | ||
503 | +.datepicker table tr td.active.disabled:active, | ||
504 | +.datepicker table tr td.active.disabled:hover:active, | ||
505 | +.datepicker table tr td.active.active, | ||
506 | +.datepicker table tr td.active:hover.active, | ||
507 | +.datepicker table tr td.active.disabled.active, | ||
508 | +.datepicker table tr td.active.disabled:hover.active, | ||
509 | +.open .dropdown-toggle.datepicker table tr td.active, | ||
510 | +.open .dropdown-toggle.datepicker table tr td.active:hover, | ||
511 | +.open .dropdown-toggle.datepicker table tr td.active.disabled, | ||
512 | +.open .dropdown-toggle.datepicker table tr td.active.disabled:hover { | ||
513 | + background-image: none; | ||
514 | +} | ||
515 | +.datepicker table tr td.active.disabled, | ||
516 | +.datepicker table tr td.active:hover.disabled, | ||
517 | +.datepicker table tr td.active.disabled.disabled, | ||
518 | +.datepicker table tr td.active.disabled:hover.disabled, | ||
519 | +.datepicker table tr td.active[disabled], | ||
520 | +.datepicker table tr td.active:hover[disabled], | ||
521 | +.datepicker table tr td.active.disabled[disabled], | ||
522 | +.datepicker table tr td.active.disabled:hover[disabled], | ||
523 | +fieldset[disabled] .datepicker table tr td.active, | ||
524 | +fieldset[disabled] .datepicker table tr td.active:hover, | ||
525 | +fieldset[disabled] .datepicker table tr td.active.disabled, | ||
526 | +fieldset[disabled] .datepicker table tr td.active.disabled:hover, | ||
527 | +.datepicker table tr td.active.disabled:hover, | ||
528 | +.datepicker table tr td.active:hover.disabled:hover, | ||
529 | +.datepicker table tr td.active.disabled.disabled:hover, | ||
530 | +.datepicker table tr td.active.disabled:hover.disabled:hover, | ||
531 | +.datepicker table tr td.active[disabled]:hover, | ||
532 | +.datepicker table tr td.active:hover[disabled]:hover, | ||
533 | +.datepicker table tr td.active.disabled[disabled]:hover, | ||
534 | +.datepicker table tr td.active.disabled:hover[disabled]:hover, | ||
535 | +fieldset[disabled] .datepicker table tr td.active:hover, | ||
536 | +fieldset[disabled] .datepicker table tr td.active:hover:hover, | ||
537 | +fieldset[disabled] .datepicker table tr td.active.disabled:hover, | ||
538 | +fieldset[disabled] .datepicker table tr td.active.disabled:hover:hover, | ||
539 | +.datepicker table tr td.active.disabled:focus, | ||
540 | +.datepicker table tr td.active:hover.disabled:focus, | ||
541 | +.datepicker table tr td.active.disabled.disabled:focus, | ||
542 | +.datepicker table tr td.active.disabled:hover.disabled:focus, | ||
543 | +.datepicker table tr td.active[disabled]:focus, | ||
544 | +.datepicker table tr td.active:hover[disabled]:focus, | ||
545 | +.datepicker table tr td.active.disabled[disabled]:focus, | ||
546 | +.datepicker table tr td.active.disabled:hover[disabled]:focus, | ||
547 | +fieldset[disabled] .datepicker table tr td.active:focus, | ||
548 | +fieldset[disabled] .datepicker table tr td.active:hover:focus, | ||
549 | +fieldset[disabled] .datepicker table tr td.active.disabled:focus, | ||
550 | +fieldset[disabled] .datepicker table tr td.active.disabled:hover:focus, | ||
551 | +.datepicker table tr td.active.disabled:active, | ||
552 | +.datepicker table tr td.active:hover.disabled:active, | ||
553 | +.datepicker table tr td.active.disabled.disabled:active, | ||
554 | +.datepicker table tr td.active.disabled:hover.disabled:active, | ||
555 | +.datepicker table tr td.active[disabled]:active, | ||
556 | +.datepicker table tr td.active:hover[disabled]:active, | ||
557 | +.datepicker table tr td.active.disabled[disabled]:active, | ||
558 | +.datepicker table tr td.active.disabled:hover[disabled]:active, | ||
559 | +fieldset[disabled] .datepicker table tr td.active:active, | ||
560 | +fieldset[disabled] .datepicker table tr td.active:hover:active, | ||
561 | +fieldset[disabled] .datepicker table tr td.active.disabled:active, | ||
562 | +fieldset[disabled] .datepicker table tr td.active.disabled:hover:active, | ||
563 | +.datepicker table tr td.active.disabled.active, | ||
564 | +.datepicker table tr td.active:hover.disabled.active, | ||
565 | +.datepicker table tr td.active.disabled.disabled.active, | ||
566 | +.datepicker table tr td.active.disabled:hover.disabled.active, | ||
567 | +.datepicker table tr td.active[disabled].active, | ||
568 | +.datepicker table tr td.active:hover[disabled].active, | ||
569 | +.datepicker table tr td.active.disabled[disabled].active, | ||
570 | +.datepicker table tr td.active.disabled:hover[disabled].active, | ||
571 | +fieldset[disabled] .datepicker table tr td.active.active, | ||
572 | +fieldset[disabled] .datepicker table tr td.active:hover.active, | ||
573 | +fieldset[disabled] .datepicker table tr td.active.disabled.active, | ||
574 | +fieldset[disabled] .datepicker table tr td.active.disabled:hover.active { | ||
575 | + background-color: #428bca; | ||
576 | + border-color: #357ebd; | ||
577 | +} | ||
578 | +.datepicker table tr td span { | ||
579 | + display: block; | ||
580 | + width: 23%; | ||
581 | + height: 54px; | ||
582 | + line-height: 54px; | ||
583 | + float: left; | ||
584 | + margin: 1%; | ||
585 | + cursor: pointer; | ||
586 | + border-radius: 4px; | ||
587 | +} | ||
588 | +.datepicker table tr td span:hover { | ||
589 | + background: #eeeeee; | ||
590 | +} | ||
591 | +.datepicker table tr td span.disabled, | ||
592 | +.datepicker table tr td span.disabled:hover { | ||
593 | + background: none; | ||
594 | + color: #999999; | ||
595 | + cursor: default; | ||
596 | +} | ||
597 | +.datepicker table tr td span.active, | ||
598 | +.datepicker table tr td span.active:hover, | ||
599 | +.datepicker table tr td span.active.disabled, | ||
600 | +.datepicker table tr td span.active.disabled:hover { | ||
601 | + color: #ffffff; | ||
602 | + background-color: #428bca; | ||
603 | + border-color: #357ebd; | ||
604 | + text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); | ||
605 | +} | ||
606 | +.datepicker table tr td span.active:hover, | ||
607 | +.datepicker table tr td span.active:hover:hover, | ||
608 | +.datepicker table tr td span.active.disabled:hover, | ||
609 | +.datepicker table tr td span.active.disabled:hover:hover, | ||
610 | +.datepicker table tr td span.active:focus, | ||
611 | +.datepicker table tr td span.active:hover:focus, | ||
612 | +.datepicker table tr td span.active.disabled:focus, | ||
613 | +.datepicker table tr td span.active.disabled:hover:focus, | ||
614 | +.datepicker table tr td span.active:active, | ||
615 | +.datepicker table tr td span.active:hover:active, | ||
616 | +.datepicker table tr td span.active.disabled:active, | ||
617 | +.datepicker table tr td span.active.disabled:hover:active, | ||
618 | +.datepicker table tr td span.active.active, | ||
619 | +.datepicker table tr td span.active:hover.active, | ||
620 | +.datepicker table tr td span.active.disabled.active, | ||
621 | +.datepicker table tr td span.active.disabled:hover.active, | ||
622 | +.open .dropdown-toggle.datepicker table tr td span.active, | ||
623 | +.open .dropdown-toggle.datepicker table tr td span.active:hover, | ||
624 | +.open .dropdown-toggle.datepicker table tr td span.active.disabled, | ||
625 | +.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover { | ||
626 | + color: #ffffff; | ||
627 | + background-color: #3276b1; | ||
628 | + border-color: #285e8e; | ||
629 | +} | ||
630 | +.datepicker table tr td span.active:active, | ||
631 | +.datepicker table tr td span.active:hover:active, | ||
632 | +.datepicker table tr td span.active.disabled:active, | ||
633 | +.datepicker table tr td span.active.disabled:hover:active, | ||
634 | +.datepicker table tr td span.active.active, | ||
635 | +.datepicker table tr td span.active:hover.active, | ||
636 | +.datepicker table tr td span.active.disabled.active, | ||
637 | +.datepicker table tr td span.active.disabled:hover.active, | ||
638 | +.open .dropdown-toggle.datepicker table tr td span.active, | ||
639 | +.open .dropdown-toggle.datepicker table tr td span.active:hover, | ||
640 | +.open .dropdown-toggle.datepicker table tr td span.active.disabled, | ||
641 | +.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover { | ||
642 | + background-image: none; | ||
643 | +} | ||
644 | +.datepicker table tr td span.active.disabled, | ||
645 | +.datepicker table tr td span.active:hover.disabled, | ||
646 | +.datepicker table tr td span.active.disabled.disabled, | ||
647 | +.datepicker table tr td span.active.disabled:hover.disabled, | ||
648 | +.datepicker table tr td span.active[disabled], | ||
649 | +.datepicker table tr td span.active:hover[disabled], | ||
650 | +.datepicker table tr td span.active.disabled[disabled], | ||
651 | +.datepicker table tr td span.active.disabled:hover[disabled], | ||
652 | +fieldset[disabled] .datepicker table tr td span.active, | ||
653 | +fieldset[disabled] .datepicker table tr td span.active:hover, | ||
654 | +fieldset[disabled] .datepicker table tr td span.active.disabled, | ||
655 | +fieldset[disabled] .datepicker table tr td span.active.disabled:hover, | ||
656 | +.datepicker table tr td span.active.disabled:hover, | ||
657 | +.datepicker table tr td span.active:hover.disabled:hover, | ||
658 | +.datepicker table tr td span.active.disabled.disabled:hover, | ||
659 | +.datepicker table tr td span.active.disabled:hover.disabled:hover, | ||
660 | +.datepicker table tr td span.active[disabled]:hover, | ||
661 | +.datepicker table tr td span.active:hover[disabled]:hover, | ||
662 | +.datepicker table tr td span.active.disabled[disabled]:hover, | ||
663 | +.datepicker table tr td span.active.disabled:hover[disabled]:hover, | ||
664 | +fieldset[disabled] .datepicker table tr td span.active:hover, | ||
665 | +fieldset[disabled] .datepicker table tr td span.active:hover:hover, | ||
666 | +fieldset[disabled] .datepicker table tr td span.active.disabled:hover, | ||
667 | +fieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover, | ||
668 | +.datepicker table tr td span.active.disabled:focus, | ||
669 | +.datepicker table tr td span.active:hover.disabled:focus, | ||
670 | +.datepicker table tr td span.active.disabled.disabled:focus, | ||
671 | +.datepicker table tr td span.active.disabled:hover.disabled:focus, | ||
672 | +.datepicker table tr td span.active[disabled]:focus, | ||
673 | +.datepicker table tr td span.active:hover[disabled]:focus, | ||
674 | +.datepicker table tr td span.active.disabled[disabled]:focus, | ||
675 | +.datepicker table tr td span.active.disabled:hover[disabled]:focus, | ||
676 | +fieldset[disabled] .datepicker table tr td span.active:focus, | ||
677 | +fieldset[disabled] .datepicker table tr td span.active:hover:focus, | ||
678 | +fieldset[disabled] .datepicker table tr td span.active.disabled:focus, | ||
679 | +fieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus, | ||
680 | +.datepicker table tr td span.active.disabled:active, | ||
681 | +.datepicker table tr td span.active:hover.disabled:active, | ||
682 | +.datepicker table tr td span.active.disabled.disabled:active, | ||
683 | +.datepicker table tr td span.active.disabled:hover.disabled:active, | ||
684 | +.datepicker table tr td span.active[disabled]:active, | ||
685 | +.datepicker table tr td span.active:hover[disabled]:active, | ||
686 | +.datepicker table tr td span.active.disabled[disabled]:active, | ||
687 | +.datepicker table tr td span.active.disabled:hover[disabled]:active, | ||
688 | +fieldset[disabled] .datepicker table tr td span.active:active, | ||
689 | +fieldset[disabled] .datepicker table tr td span.active:hover:active, | ||
690 | +fieldset[disabled] .datepicker table tr td span.active.disabled:active, | ||
691 | +fieldset[disabled] .datepicker table tr td span.active.disabled:hover:active, | ||
692 | +.datepicker table tr td span.active.disabled.active, | ||
693 | +.datepicker table tr td span.active:hover.disabled.active, | ||
694 | +.datepicker table tr td span.active.disabled.disabled.active, | ||
695 | +.datepicker table tr td span.active.disabled:hover.disabled.active, | ||
696 | +.datepicker table tr td span.active[disabled].active, | ||
697 | +.datepicker table tr td span.active:hover[disabled].active, | ||
698 | +.datepicker table tr td span.active.disabled[disabled].active, | ||
699 | +.datepicker table tr td span.active.disabled:hover[disabled].active, | ||
700 | +fieldset[disabled] .datepicker table tr td span.active.active, | ||
701 | +fieldset[disabled] .datepicker table tr td span.active:hover.active, | ||
702 | +fieldset[disabled] .datepicker table tr td span.active.disabled.active, | ||
703 | +fieldset[disabled] .datepicker table tr td span.active.disabled:hover.active { | ||
704 | + background-color: #428bca; | ||
705 | + border-color: #357ebd; | ||
706 | +} | ||
707 | +.datepicker table tr td span.old, | ||
708 | +.datepicker table tr td span.new { | ||
709 | + color: #999999; | ||
710 | +} | ||
711 | +.datepicker th.datepicker-switch { | ||
712 | + width: 145px; | ||
713 | +} | ||
714 | +.datepicker thead tr:first-child th, | ||
715 | +.datepicker tfoot tr th { | ||
716 | + cursor: pointer; | ||
717 | +} | ||
718 | +.datepicker thead tr:first-child th:hover, | ||
719 | +.datepicker tfoot tr th:hover { | ||
720 | + background: #eeeeee; | ||
721 | +} | ||
722 | +.datepicker .cw { | ||
723 | + font-size: 10px; | ||
724 | + width: 12px; | ||
725 | + padding: 0 2px 0 5px; | ||
726 | + vertical-align: middle; | ||
727 | +} | ||
728 | +.datepicker thead tr:first-child th.cw { | ||
729 | + cursor: default; | ||
730 | + background-color: transparent; | ||
731 | +} | ||
732 | +.input-group.date .input-group-addon i { | ||
733 | + cursor: pointer; | ||
734 | + width: 16px; | ||
735 | + height: 16px; | ||
736 | +} | ||
737 | +.input-daterange input { | ||
738 | + text-align: center; | ||
739 | +} | ||
740 | +.input-daterange input:first-child { | ||
741 | + border-radius: 3px 0 0 3px; | ||
742 | +} | ||
743 | +.input-daterange input:last-child { | ||
744 | + border-radius: 0 3px 3px 0; | ||
745 | +} | ||
746 | +.input-daterange .input-group-addon { | ||
747 | + width: auto; | ||
748 | + min-width: 16px; | ||
749 | + padding: 4px 5px; | ||
750 | + font-weight: normal; | ||
751 | + line-height: 1.428571429; | ||
752 | + text-align: center; | ||
753 | + text-shadow: 0 1px 0 #fff; | ||
754 | + vertical-align: middle; | ||
755 | + background-color: #eeeeee; | ||
756 | + border: solid #cccccc; | ||
757 | + border-width: 1px 0; | ||
758 | + margin-left: -5px; | ||
759 | + margin-right: -5px; | ||
760 | +} | ||
761 | +.datepicker.dropdown-menu { | ||
762 | + position: absolute; | ||
763 | + top: 100%; | ||
764 | + left: 0; | ||
765 | + z-index: 1000; | ||
766 | + float: left; | ||
767 | + display: none; | ||
768 | + min-width: 160px; | ||
769 | + list-style: none; | ||
770 | + background-color: #ffffff; | ||
771 | + border: 1px solid #ccc; | ||
772 | + border: 1px solid rgba(0, 0, 0, 0.2); | ||
773 | + border-radius: 5px; | ||
774 | + -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | ||
775 | + -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | ||
776 | + box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); | ||
777 | + -webkit-background-clip: padding-box; | ||
778 | + -moz-background-clip: padding; | ||
779 | + background-clip: padding-box; | ||
780 | + *border-right-width: 2px; | ||
781 | + *border-bottom-width: 2px; | ||
782 | + color: #333333; | ||
783 | + font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; | ||
784 | + font-size: 13px; | ||
785 | + line-height: 1.428571429; | ||
786 | +} | ||
787 | +.datepicker.dropdown-menu th, | ||
788 | +.datepicker.datepicker-inline th, | ||
789 | +.datepicker.dropdown-menu td, | ||
790 | +.datepicker.datepicker-inline td { | ||
791 | + padding: 0px 5px; | ||
792 | +} |
public/css/gulpfile.js
0 → 100644
1 | +var gulp = require('gulp'); | ||
2 | +var sass = require('gulp-sass'); | ||
3 | +var browserSync = require('browser-sync').create(); | ||
4 | +var header = require('gulp-header'); | ||
5 | +var cleanCSS = require('gulp-clean-css'); | ||
6 | +var rename = require("gulp-rename"); | ||
7 | +var uglify = require('gulp-uglify'); | ||
8 | +var pkg = require('./package.json'); | ||
9 | + | ||
10 | +// Set the banner content | ||
11 | +var banner = ['/*!\n', | ||
12 | + ' * Start Bootstrap - <%= pkg.title %> v<%= pkg.version %> (<%= pkg.homepage %>)\n', | ||
13 | + ' * Copyright 2013-' + (new Date()).getFullYear(), ' <%= pkg.author %>\n', | ||
14 | + ' * Licensed under <%= pkg.license %> (https://github.com/BlackrockDigital/<%= pkg.name %>/blob/master/LICENSE)\n', | ||
15 | + ' */\n', | ||
16 | + '' | ||
17 | +].join(''); | ||
18 | + | ||
19 | +// Compiles SCSS files from /scss into /css | ||
20 | +gulp.task('sass', function() { | ||
21 | + return gulp.src('scss/grayscale.scss') | ||
22 | + .pipe(sass()) | ||
23 | + .pipe(header(banner, { | ||
24 | + pkg: pkg | ||
25 | + })) | ||
26 | + .pipe(gulp.dest('css')) | ||
27 | + .pipe(browserSync.reload({ | ||
28 | + stream: true | ||
29 | + })) | ||
30 | +}); | ||
31 | + | ||
32 | +// Minify compiled CSS | ||
33 | +gulp.task('minify-css', ['sass'], function() { | ||
34 | + return gulp.src('css/grayscale.css') | ||
35 | + .pipe(cleanCSS({ | ||
36 | + compatibility: 'ie8' | ||
37 | + })) | ||
38 | + .pipe(rename({ | ||
39 | + suffix: '.min' | ||
40 | + })) | ||
41 | + .pipe(gulp.dest('css')) | ||
42 | + .pipe(browserSync.reload({ | ||
43 | + stream: true | ||
44 | + })) | ||
45 | +}); | ||
46 | + | ||
47 | +// Minify custom JS | ||
48 | +gulp.task('minify-js', function() { | ||
49 | + return gulp.src('js/grayscale.js') | ||
50 | + .pipe(uglify()) | ||
51 | + .pipe(header(banner, { | ||
52 | + pkg: pkg | ||
53 | + })) | ||
54 | + .pipe(rename({ | ||
55 | + suffix: '.min' | ||
56 | + })) | ||
57 | + .pipe(gulp.dest('js')) | ||
58 | + .pipe(browserSync.reload({ | ||
59 | + stream: true | ||
60 | + })) | ||
61 | +}); | ||
62 | + | ||
63 | +// Copy vendor files from /node_modules into /vendor | ||
64 | +// NOTE: requires `npm install` before running! | ||
65 | +gulp.task('copy', function() { | ||
66 | + gulp.src([ | ||
67 | + 'node_modules/bootstrap/dist/**/*', | ||
68 | + '!**/npm.js', | ||
69 | + '!**/bootstrap-theme.*', | ||
70 | + '!**/*.map' | ||
71 | + ]) | ||
72 | + .pipe(gulp.dest('vendor/bootstrap')) | ||
73 | + | ||
74 | + gulp.src(['node_modules/jquery/dist/jquery.js', 'node_modules/jquery/dist/jquery.min.js']) | ||
75 | + .pipe(gulp.dest('vendor/jquery')) | ||
76 | + | ||
77 | + gulp.src(['node_modules/jquery.easing/*.js']) | ||
78 | + .pipe(gulp.dest('vendor/jquery-easing')) | ||
79 | + | ||
80 | + gulp.src([ | ||
81 | + 'node_modules/font-awesome/**', | ||
82 | + '!node_modules/font-awesome/**/*.map', | ||
83 | + '!node_modules/font-awesome/.npmignore', | ||
84 | + '!node_modules/font-awesome/*.txt', | ||
85 | + '!node_modules/font-awesome/*.md', | ||
86 | + '!node_modules/font-awesome/*.json' | ||
87 | + ]) | ||
88 | + .pipe(gulp.dest('vendor/font-awesome')) | ||
89 | +}) | ||
90 | + | ||
91 | +// Default task | ||
92 | +gulp.task('default', ['sass', 'minify-css', 'minify-js', 'copy']); | ||
93 | + | ||
94 | +// Configure the browserSync task | ||
95 | +gulp.task('browserSync', function() { | ||
96 | + browserSync.init({ | ||
97 | + server: { | ||
98 | + baseDir: '' | ||
99 | + }, | ||
100 | + }) | ||
101 | +}) | ||
102 | + | ||
103 | +// Dev task with browserSync | ||
104 | +gulp.task('dev', ['browserSync', 'sass', 'minify-css', 'minify-js'], function() { | ||
105 | + gulp.watch('scss/*.scss', ['sass']); | ||
106 | + gulp.watch('css/*.css', ['minify-css']); | ||
107 | + gulp.watch('js/*.js', ['minify-js']); | ||
108 | + // Reloads the browser whenever HTML or JS files change | ||
109 | + gulp.watch('*.html', browserSync.reload); | ||
110 | + gulp.watch('js/**/*.js', browserSync.reload); | ||
111 | +}); |
public/css/index.html
0 → 100644
1 | +<!DOCTYPE html> | ||
2 | +<html lang="en"> | ||
3 | + | ||
4 | + <head> | ||
5 | + | ||
6 | + <meta charset="utf-8"> | ||
7 | + <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
8 | + <meta name="description" content=""> | ||
9 | + <meta name="author" content=""> | ||
10 | + | ||
11 | + <title>식당 예약</title> | ||
12 | + | ||
13 | + <!-- Bootstrap core CSS --> | ||
14 | + <link href="vendor/bootstrap/css/bootstrap.min.css" rel="stylesheet"> | ||
15 | + | ||
16 | + <!-- Custom fonts for this template --> | ||
17 | + <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | ||
18 | + <link href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" rel="stylesheet" type="text/css"> | ||
19 | + <link href='https://fonts.googleapis.com/css?family=Cabin:700' rel='stylesheet' type='text/css'> | ||
20 | + | ||
21 | + <!-- Custom styles for this template --> | ||
22 | + <link href="css/grayscale.min.css" rel="stylesheet"> | ||
23 | + | ||
24 | + </head> | ||
25 | + | ||
26 | + <body id="page-top"> | ||
27 | + | ||
28 | + <!-- Navigation --> | ||
29 | + <nav class="navbar navbar-expand-lg navbar-light fixed-top" id="mainNav"> | ||
30 | + <div class="container"> | ||
31 | + <a class="navbar-brand js-scroll-trigger" href="#page-top">그로또 예약 사이트</a> | ||
32 | + <button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#navbarResponsive" aria-controls="navbarResponsive" aria-expanded="false" aria-label="Toggle navigation"> | ||
33 | + Menu | ||
34 | + <i class="fa fa-bars"></i> | ||
35 | + </button> | ||
36 | + <div class="collapse navbar-collapse" id="navbarResponsive"> | ||
37 | + <ul class="navbar-nav ml-auto"> | ||
38 | + <li class="nav-item"> | ||
39 | + <a class="nav-link js-scroll-trigger" href="#about">소개</a> | ||
40 | + </li> | ||
41 | + <li class="nav-item"> | ||
42 | + <a class="nav-link js-scroll-trigger" href="#download">예약</a> | ||
43 | + </li> | ||
44 | + <li class="nav-item"> | ||
45 | + <a class="nav-link js-scroll-trigger" href="#contact">오시는 길</a> | ||
46 | + </li> | ||
47 | + </ul> | ||
48 | + </div> | ||
49 | + </div> | ||
50 | + </nav> | ||
51 | + | ||
52 | + <!-- Intro Header --> | ||
53 | + <header class="masthead"> | ||
54 | + <div class="intro-body"> | ||
55 | + <div class="container"> | ||
56 | + <div class="row"> | ||
57 | + <div class="col-lg-8 mx-auto"> | ||
58 | + <h1 class="brand-heading">GROTTO!</h1> | ||
59 | + <p class="intro-text"> | ||
60 | + <br>정지윤</p> | ||
61 | + <a href="#about" class="btn btn-circle js-scroll-trigger"> | ||
62 | + <i class="fa fa-angle-double-down animated"></i> | ||
63 | + </a> | ||
64 | + </div> | ||
65 | + </div> | ||
66 | + </div> | ||
67 | + </div> | ||
68 | + </header> | ||
69 | + | ||
70 | + <!-- About Section --> | ||
71 | + <section id="about" class=" content-section text-center"> | ||
72 | + <div class="container"> | ||
73 | + <div class="row"> | ||
74 | + <div class="col-lg-8 mx-auto"> | ||
75 | + <h2>About GROTTO</h2> | ||
76 | + <p> | ||
77 | + <a href="http://startbootstrap.com/template-overviews/grayscale/">Grotto - Let your senses fly</a>. | ||
78 | + <br>당신의 오감을 날려드립니다.</p> | ||
79 | + | ||
80 | + <p> | ||
81 | + <a href="http://gratisography.com/">Coffee - Kona coffee</a> | ||
82 | + <br>세계 3대 커피 하와이안 코나 원두를 사용합니다.</p> | ||
83 | + <p> | ||
84 | + <a href="http://snazzymaps.com/">Wine - Wine expert</a>. | ||
85 | + <br>150가지 종류의 와인을 와인을 닮은 공간에서 편하게 즐기세요.</p> | ||
86 | + </div> | ||
87 | + </div> | ||
88 | + </div> | ||
89 | + </section> | ||
90 | + | ||
91 | + <!-- Download Section --> | ||
92 | + <section id="download" class="download-section content-section text-center"> | ||
93 | + <div class="container"> | ||
94 | + <div class="col-lg-8 mx-auto"> | ||
95 | + <h2>Reservation</h2> | ||
96 | + <p>당일 예약은 전화예약만 가능합니다.</p> | ||
97 | + <a href="http://startbootstrap.com/template-overviews/grayscale/" class="btn btn-default btn-lg">예약하기</a> | ||
98 | + </div> | ||
99 | + </div> | ||
100 | + </section> | ||
101 | + | ||
102 | + <!-- Contact Section --> | ||
103 | + <section id="contact" class="content-section text-center"> | ||
104 | + <div class="container"> | ||
105 | + <div class="row"> | ||
106 | + <div class="col-lg-8 mx-auto"> | ||
107 | + <h2>Contact GROTTO</h2> | ||
108 | + <p>전화번호 : 031-205-7220</p> | ||
109 | + <p>영업시간 : 매일 10:00 - 23:30 (Last Order 22:00)</p> | ||
110 | + <ul class="list-inline banner-social-buttons"> | ||
111 | + <li class="list-inline-item"> | ||
112 | + <a href="https://www.facebook.com/grottosuwon/" class="btn btn-default btn-lg"> | ||
113 | + <i class="fa fa-facebook fa-fw"></i> | ||
114 | + <span class="network-name">facebook</span> | ||
115 | + </a> | ||
116 | + </li> | ||
117 | + <li class="list-inline-item"> | ||
118 | + <a href="https://www.instagram.com/grotto_since2011/" class="btn btn-default btn-lg"> | ||
119 | + <i class="fa fa-instagram fa-fw"></i> | ||
120 | + <span class="network-name">Instagram</span> | ||
121 | + </a> | ||
122 | + </li> | ||
123 | + <li class="list-inline-item"> | ||
124 | + <a href="https://plus.google.com/+Startbootstrap/posts" class="btn btn-default btn-lg"> | ||
125 | + <i class="fa fa-google-plus fa-fw"></i> | ||
126 | + <span class="network-name">Google+</span> | ||
127 | + </a> | ||
128 | + </li> | ||
129 | + </ul> | ||
130 | + </div> | ||
131 | + </div> | ||
132 | + </div> | ||
133 | + </section> | ||
134 | + | ||
135 | + <!-- Map Section --> | ||
136 | + <div id="map"></div> | ||
137 | + | ||
138 | + <!-- Footer --> | ||
139 | + <footer> | ||
140 | + <div class="container text-center"> | ||
141 | + <p>Copyright © Your Website 2017</p> | ||
142 | + </div> | ||
143 | + </footer> | ||
144 | + | ||
145 | + <!-- Bootstrap core JavaScript --> | ||
146 | + <script src="vendor/jquery/jquery.min.js"></script> | ||
147 | + <script src="vendor/bootstrap/js/bootstrap.bundle.min.js"></script> | ||
148 | + | ||
149 | + <!-- Plugin JavaScript --> | ||
150 | + <script src="vendor/jquery-easing/jquery.easing.min.js"></script> | ||
151 | + | ||
152 | + <!-- Google Maps API Key - Use your own API key to enable the map feature. More information on the Google Maps API can be found at https://developers.google.com/maps/ --> | ||
153 | + <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCRngKslUGJTlibkQ3FkfTxj3Xss1UlZDA&sensor=false"></script> | ||
154 | + | ||
155 | + <!-- Custom scripts for this template --> | ||
156 | + <script src="js/grayscale.min.js"></script> | ||
157 | + | ||
158 | + </body> | ||
159 | + | ||
160 | +</html> |
1 | +/* ========================================================= | ||
2 | + * bootstrap-datepicker.js | ||
3 | + * Repo: https://github.com/eternicode/bootstrap-datepicker/ | ||
4 | + * Demo: http://eternicode.github.io/bootstrap-datepicker/ | ||
5 | + * Docs: http://bootstrap-datepicker.readthedocs.org/ | ||
6 | + * Forked from http://www.eyecon.ro/bootstrap-datepicker | ||
7 | + * ========================================================= | ||
8 | + * Started by Stefan Petre; improvements by Andrew Rowls + contributors | ||
9 | + * | ||
10 | + * Licensed under the Apache License, Version 2.0 (the "License"); | ||
11 | + * you may not use this file except in compliance with the License. | ||
12 | + * You may obtain a copy of the License at | ||
13 | + * | ||
14 | + * http://www.apache.org/licenses/LICENSE-2.0 | ||
15 | + * | ||
16 | + * Unless required by applicable law or agreed to in writing, software | ||
17 | + * distributed under the License is distributed on an "AS IS" BASIS, | ||
18 | + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
19 | + * See the License for the specific language governing permissions and | ||
20 | + * limitations under the License. | ||
21 | + * ========================================================= */ | ||
22 | + | ||
23 | +(function($, undefined){ | ||
24 | + | ||
25 | + var $window = $(window); | ||
26 | + | ||
27 | + function UTCDate(){ | ||
28 | + return new Date(Date.UTC.apply(Date, arguments)); | ||
29 | + } | ||
30 | + function UTCToday(){ | ||
31 | + var today = new Date(); | ||
32 | + return UTCDate(today.getFullYear(), today.getMonth(), today.getDate()); | ||
33 | + } | ||
34 | + function alias(method){ | ||
35 | + return function(){ | ||
36 | + return this[method].apply(this, arguments); | ||
37 | + }; | ||
38 | + } | ||
39 | + | ||
40 | + var DateArray = (function(){ | ||
41 | + var extras = { | ||
42 | + get: function(i){ | ||
43 | + return this.slice(i)[0]; | ||
44 | + }, | ||
45 | + contains: function(d){ | ||
46 | + // Array.indexOf is not cross-browser; | ||
47 | + // $.inArray doesn't work with Dates | ||
48 | + var val = d && d.valueOf(); | ||
49 | + for (var i=0, l=this.length; i < l; i++) | ||
50 | + if (this[i].valueOf() === val) | ||
51 | + return i; | ||
52 | + return -1; | ||
53 | + }, | ||
54 | + remove: function(i){ | ||
55 | + this.splice(i,1); | ||
56 | + }, | ||
57 | + replace: function(new_array){ | ||
58 | + if (!new_array) | ||
59 | + return; | ||
60 | + if (!$.isArray(new_array)) | ||
61 | + new_array = [new_array]; | ||
62 | + this.clear(); | ||
63 | + this.push.apply(this, new_array); | ||
64 | + }, | ||
65 | + clear: function(){ | ||
66 | + this.length = 0; | ||
67 | + }, | ||
68 | + copy: function(){ | ||
69 | + var a = new DateArray(); | ||
70 | + a.replace(this); | ||
71 | + return a; | ||
72 | + } | ||
73 | + }; | ||
74 | + | ||
75 | + return function(){ | ||
76 | + var a = []; | ||
77 | + a.push.apply(a, arguments); | ||
78 | + $.extend(a, extras); | ||
79 | + return a; | ||
80 | + }; | ||
81 | + })(); | ||
82 | + | ||
83 | + | ||
84 | + // Picker object | ||
85 | + | ||
86 | + var Datepicker = function(element, options){ | ||
87 | + this.dates = new DateArray(); | ||
88 | + this.viewDate = UTCToday(); | ||
89 | + this.focusDate = null; | ||
90 | + | ||
91 | + this._process_options(options); | ||
92 | + | ||
93 | + this.element = $(element); | ||
94 | + this.isInline = false; | ||
95 | + this.isInput = this.element.is('input'); | ||
96 | + this.component = this.element.is('.date') ? this.element.find('.add-on, .input-group-addon, .btn') : false; | ||
97 | + this.hasInput = this.component && this.element.find('input').length; | ||
98 | + if (this.component && this.component.length === 0) | ||
99 | + this.component = false; | ||
100 | + | ||
101 | + this.picker = $(DPGlobal.template); | ||
102 | + this._buildEvents(); | ||
103 | + this._attachEvents(); | ||
104 | + | ||
105 | + if (this.isInline){ | ||
106 | + this.picker.addClass('datepicker-inline').appendTo(this.element); | ||
107 | + } | ||
108 | + else { | ||
109 | + this.picker.addClass('datepicker-dropdown dropdown-menu'); | ||
110 | + } | ||
111 | + | ||
112 | + if (this.o.rtl){ | ||
113 | + this.picker.addClass('datepicker-rtl'); | ||
114 | + } | ||
115 | + | ||
116 | + this.viewMode = this.o.startView; | ||
117 | + | ||
118 | + if (this.o.calendarWeeks) | ||
119 | + this.picker.find('tfoot th.today') | ||
120 | + .attr('colspan', function(i, val){ | ||
121 | + return parseInt(val) + 1; | ||
122 | + }); | ||
123 | + | ||
124 | + this._allow_update = false; | ||
125 | + | ||
126 | + this.setStartDate(this._o.startDate); | ||
127 | + this.setEndDate(this._o.endDate); | ||
128 | + this.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled); | ||
129 | + | ||
130 | + this.fillDow(); | ||
131 | + this.fillMonths(); | ||
132 | + | ||
133 | + this._allow_update = true; | ||
134 | + | ||
135 | + this.update(); | ||
136 | + this.showMode(); | ||
137 | + | ||
138 | + if (this.isInline){ | ||
139 | + this.show(); | ||
140 | + } | ||
141 | + }; | ||
142 | + | ||
143 | + Datepicker.prototype = { | ||
144 | + constructor: Datepicker, | ||
145 | + | ||
146 | + _process_options: function(opts){ | ||
147 | + // Store raw options for reference | ||
148 | + this._o = $.extend({}, this._o, opts); | ||
149 | + // Processed options | ||
150 | + var o = this.o = $.extend({}, this._o); | ||
151 | + | ||
152 | + // Check if "de-DE" style date is available, if not language should | ||
153 | + // fallback to 2 letter code eg "de" | ||
154 | + var lang = o.language; | ||
155 | + if (!dates[lang]){ | ||
156 | + lang = lang.split('-')[0]; | ||
157 | + if (!dates[lang]) | ||
158 | + lang = defaults.language; | ||
159 | + } | ||
160 | + o.language = lang; | ||
161 | + | ||
162 | + switch (o.startView){ | ||
163 | + case 2: | ||
164 | + case 'decade': | ||
165 | + o.startView = 2; | ||
166 | + break; | ||
167 | + case 1: | ||
168 | + case 'year': | ||
169 | + o.startView = 1; | ||
170 | + break; | ||
171 | + default: | ||
172 | + o.startView = 0; | ||
173 | + } | ||
174 | + | ||
175 | + switch (o.minViewMode){ | ||
176 | + case 1: | ||
177 | + case 'months': | ||
178 | + o.minViewMode = 1; | ||
179 | + break; | ||
180 | + case 2: | ||
181 | + case 'years': | ||
182 | + o.minViewMode = 2; | ||
183 | + break; | ||
184 | + default: | ||
185 | + o.minViewMode = 0; | ||
186 | + } | ||
187 | + | ||
188 | + o.startView = Math.max(o.startView, o.minViewMode); | ||
189 | + | ||
190 | + // true, false, or Number > 0 | ||
191 | + if (o.multidate !== true){ | ||
192 | + o.multidate = Number(o.multidate) || false; | ||
193 | + if (o.multidate !== false) | ||
194 | + o.multidate = Math.max(0, o.multidate); | ||
195 | + else | ||
196 | + o.multidate = 1; | ||
197 | + } | ||
198 | + o.multidateSeparator = String(o.multidateSeparator); | ||
199 | + | ||
200 | + o.weekStart %= 7; | ||
201 | + o.weekEnd = ((o.weekStart + 6) % 7); | ||
202 | + | ||
203 | + var format = DPGlobal.parseFormat(o.format); | ||
204 | + if (o.startDate !== -Infinity){ | ||
205 | + if (!!o.startDate){ | ||
206 | + if (o.startDate instanceof Date) | ||
207 | + o.startDate = this._local_to_utc(this._zero_time(o.startDate)); | ||
208 | + else | ||
209 | + o.startDate = DPGlobal.parseDate(o.startDate, format, o.language); | ||
210 | + } | ||
211 | + else { | ||
212 | + o.startDate = -Infinity; | ||
213 | + } | ||
214 | + } | ||
215 | + if (o.endDate !== Infinity){ | ||
216 | + if (!!o.endDate){ | ||
217 | + if (o.endDate instanceof Date) | ||
218 | + o.endDate = this._local_to_utc(this._zero_time(o.endDate)); | ||
219 | + else | ||
220 | + o.endDate = DPGlobal.parseDate(o.endDate, format, o.language); | ||
221 | + } | ||
222 | + else { | ||
223 | + o.endDate = Infinity; | ||
224 | + } | ||
225 | + } | ||
226 | + | ||
227 | + o.daysOfWeekDisabled = o.daysOfWeekDisabled||[]; | ||
228 | + if (!$.isArray(o.daysOfWeekDisabled)) | ||
229 | + o.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\s]*/); | ||
230 | + o.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){ | ||
231 | + return parseInt(d, 10); | ||
232 | + }); | ||
233 | + | ||
234 | + var plc = String(o.orientation).toLowerCase().split(/\s+/g), | ||
235 | + _plc = o.orientation.toLowerCase(); | ||
236 | + plc = $.grep(plc, function(word){ | ||
237 | + return (/^auto|left|right|top|bottom$/).test(word); | ||
238 | + }); | ||
239 | + o.orientation = {x: 'auto', y: 'auto'}; | ||
240 | + if (!_plc || _plc === 'auto') | ||
241 | + ; // no action | ||
242 | + else if (plc.length === 1){ | ||
243 | + switch (plc[0]){ | ||
244 | + case 'top': | ||
245 | + case 'bottom': | ||
246 | + o.orientation.y = plc[0]; | ||
247 | + break; | ||
248 | + case 'left': | ||
249 | + case 'right': | ||
250 | + o.orientation.x = plc[0]; | ||
251 | + break; | ||
252 | + } | ||
253 | + } | ||
254 | + else { | ||
255 | + _plc = $.grep(plc, function(word){ | ||
256 | + return (/^left|right$/).test(word); | ||
257 | + }); | ||
258 | + o.orientation.x = _plc[0] || 'auto'; | ||
259 | + | ||
260 | + _plc = $.grep(plc, function(word){ | ||
261 | + return (/^top|bottom$/).test(word); | ||
262 | + }); | ||
263 | + o.orientation.y = _plc[0] || 'auto'; | ||
264 | + } | ||
265 | + }, | ||
266 | + _events: [], | ||
267 | + _secondaryEvents: [], | ||
268 | + _applyEvents: function(evs){ | ||
269 | + for (var i=0, el, ch, ev; i < evs.length; i++){ | ||
270 | + el = evs[i][0]; | ||
271 | + if (evs[i].length === 2){ | ||
272 | + ch = undefined; | ||
273 | + ev = evs[i][1]; | ||
274 | + } | ||
275 | + else if (evs[i].length === 3){ | ||
276 | + ch = evs[i][1]; | ||
277 | + ev = evs[i][2]; | ||
278 | + } | ||
279 | + el.on(ev, ch); | ||
280 | + } | ||
281 | + }, | ||
282 | + _unapplyEvents: function(evs){ | ||
283 | + for (var i=0, el, ev, ch; i < evs.length; i++){ | ||
284 | + el = evs[i][0]; | ||
285 | + if (evs[i].length === 2){ | ||
286 | + ch = undefined; | ||
287 | + ev = evs[i][1]; | ||
288 | + } | ||
289 | + else if (evs[i].length === 3){ | ||
290 | + ch = evs[i][1]; | ||
291 | + ev = evs[i][2]; | ||
292 | + } | ||
293 | + el.off(ev, ch); | ||
294 | + } | ||
295 | + }, | ||
296 | + _buildEvents: function(){ | ||
297 | + if (this.isInput){ // single input | ||
298 | + this._events = [ | ||
299 | + [this.element, { | ||
300 | + focus: $.proxy(this.show, this), | ||
301 | + keyup: $.proxy(function(e){ | ||
302 | + if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1) | ||
303 | + this.update(); | ||
304 | + }, this), | ||
305 | + keydown: $.proxy(this.keydown, this) | ||
306 | + }] | ||
307 | + ]; | ||
308 | + } | ||
309 | + else if (this.component && this.hasInput){ // component: input + button | ||
310 | + this._events = [ | ||
311 | + // For components that are not readonly, allow keyboard nav | ||
312 | + [this.element.find('input'), { | ||
313 | + focus: $.proxy(this.show, this), | ||
314 | + keyup: $.proxy(function(e){ | ||
315 | + if ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1) | ||
316 | + this.update(); | ||
317 | + }, this), | ||
318 | + keydown: $.proxy(this.keydown, this) | ||
319 | + }], | ||
320 | + [this.component, { | ||
321 | + click: $.proxy(this.show, this) | ||
322 | + }] | ||
323 | + ]; | ||
324 | + } | ||
325 | + else if (this.element.is('div')){ // inline datepicker | ||
326 | + this.isInline = true; | ||
327 | + } | ||
328 | + else { | ||
329 | + this._events = [ | ||
330 | + [this.element, { | ||
331 | + click: $.proxy(this.show, this) | ||
332 | + }] | ||
333 | + ]; | ||
334 | + } | ||
335 | + this._events.push( | ||
336 | + // Component: listen for blur on element descendants | ||
337 | + [this.element, '*', { | ||
338 | + blur: $.proxy(function(e){ | ||
339 | + this._focused_from = e.target; | ||
340 | + }, this) | ||
341 | + }], | ||
342 | + // Input: listen for blur on element | ||
343 | + [this.element, { | ||
344 | + blur: $.proxy(function(e){ | ||
345 | + this._focused_from = e.target; | ||
346 | + }, this) | ||
347 | + }] | ||
348 | + ); | ||
349 | + | ||
350 | + this._secondaryEvents = [ | ||
351 | + [this.picker, { | ||
352 | + click: $.proxy(this.click, this) | ||
353 | + }], | ||
354 | + [$(window), { | ||
355 | + resize: $.proxy(this.place, this) | ||
356 | + }], | ||
357 | + [$(document), { | ||
358 | + 'mousedown touchstart': $.proxy(function(e){ | ||
359 | + // Clicked outside the datepicker, hide it | ||
360 | + if (!( | ||
361 | + this.element.is(e.target) || | ||
362 | + this.element.find(e.target).length || | ||
363 | + this.picker.is(e.target) || | ||
364 | + this.picker.find(e.target).length | ||
365 | + )){ | ||
366 | + this.hide(); | ||
367 | + } | ||
368 | + }, this) | ||
369 | + }] | ||
370 | + ]; | ||
371 | + }, | ||
372 | + _attachEvents: function(){ | ||
373 | + this._detachEvents(); | ||
374 | + this._applyEvents(this._events); | ||
375 | + }, | ||
376 | + _detachEvents: function(){ | ||
377 | + this._unapplyEvents(this._events); | ||
378 | + }, | ||
379 | + _attachSecondaryEvents: function(){ | ||
380 | + this._detachSecondaryEvents(); | ||
381 | + this._applyEvents(this._secondaryEvents); | ||
382 | + }, | ||
383 | + _detachSecondaryEvents: function(){ | ||
384 | + this._unapplyEvents(this._secondaryEvents); | ||
385 | + }, | ||
386 | + _trigger: function(event, altdate){ | ||
387 | + var date = altdate || this.dates.get(-1), | ||
388 | + local_date = this._utc_to_local(date); | ||
389 | + | ||
390 | + this.element.trigger({ | ||
391 | + type: event, | ||
392 | + date: local_date, | ||
393 | + dates: $.map(this.dates, this._utc_to_local), | ||
394 | + format: $.proxy(function(ix, format){ | ||
395 | + if (arguments.length === 0){ | ||
396 | + ix = this.dates.length - 1; | ||
397 | + format = this.o.format; | ||
398 | + } | ||
399 | + else if (typeof ix === 'string'){ | ||
400 | + format = ix; | ||
401 | + ix = this.dates.length - 1; | ||
402 | + } | ||
403 | + format = format || this.o.format; | ||
404 | + var date = this.dates.get(ix); | ||
405 | + return DPGlobal.formatDate(date, format, this.o.language); | ||
406 | + }, this) | ||
407 | + }); | ||
408 | + }, | ||
409 | + | ||
410 | + show: function(){ | ||
411 | + if (!this.isInline) | ||
412 | + this.picker.appendTo('body'); | ||
413 | + this.picker.show(); | ||
414 | + this.place(); | ||
415 | + this._attachSecondaryEvents(); | ||
416 | + this._trigger('show'); | ||
417 | + }, | ||
418 | + | ||
419 | + hide: function(){ | ||
420 | + if (this.isInline) | ||
421 | + return; | ||
422 | + if (!this.picker.is(':visible')) | ||
423 | + return; | ||
424 | + this.focusDate = null; | ||
425 | + this.picker.hide().detach(); | ||
426 | + this._detachSecondaryEvents(); | ||
427 | + this.viewMode = this.o.startView; | ||
428 | + this.showMode(); | ||
429 | + | ||
430 | + if ( | ||
431 | + this.o.forceParse && | ||
432 | + ( | ||
433 | + this.isInput && this.element.val() || | ||
434 | + this.hasInput && this.element.find('input').val() | ||
435 | + ) | ||
436 | + ) | ||
437 | + this.setValue(); | ||
438 | + this._trigger('hide'); | ||
439 | + }, | ||
440 | + | ||
441 | + remove: function(){ | ||
442 | + this.hide(); | ||
443 | + this._detachEvents(); | ||
444 | + this._detachSecondaryEvents(); | ||
445 | + this.picker.remove(); | ||
446 | + delete this.element.data().datepicker; | ||
447 | + if (!this.isInput){ | ||
448 | + delete this.element.data().date; | ||
449 | + } | ||
450 | + }, | ||
451 | + | ||
452 | + _utc_to_local: function(utc){ | ||
453 | + return utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000)); | ||
454 | + }, | ||
455 | + _local_to_utc: function(local){ | ||
456 | + return local && new Date(local.getTime() - (local.getTimezoneOffset()*60000)); | ||
457 | + }, | ||
458 | + _zero_time: function(local){ | ||
459 | + return local && new Date(local.getFullYear(), local.getMonth(), local.getDate()); | ||
460 | + }, | ||
461 | + _zero_utc_time: function(utc){ | ||
462 | + return utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate())); | ||
463 | + }, | ||
464 | + | ||
465 | + getDates: function(){ | ||
466 | + return $.map(this.dates, this._utc_to_local); | ||
467 | + }, | ||
468 | + | ||
469 | + getUTCDates: function(){ | ||
470 | + return $.map(this.dates, function(d){ | ||
471 | + return new Date(d); | ||
472 | + }); | ||
473 | + }, | ||
474 | + | ||
475 | + getDate: function(){ | ||
476 | + return this._utc_to_local(this.getUTCDate()); | ||
477 | + }, | ||
478 | + | ||
479 | + getUTCDate: function(){ | ||
480 | + return new Date(this.dates.get(-1)); | ||
481 | + }, | ||
482 | + | ||
483 | + setDates: function(){ | ||
484 | + var args = $.isArray(arguments[0]) ? arguments[0] : arguments; | ||
485 | + this.update.apply(this, args); | ||
486 | + this._trigger('changeDate'); | ||
487 | + this.setValue(); | ||
488 | + }, | ||
489 | + | ||
490 | + setUTCDates: function(){ | ||
491 | + var args = $.isArray(arguments[0]) ? arguments[0] : arguments; | ||
492 | + this.update.apply(this, $.map(args, this._utc_to_local)); | ||
493 | + this._trigger('changeDate'); | ||
494 | + this.setValue(); | ||
495 | + }, | ||
496 | + | ||
497 | + setDate: alias('setDates'), | ||
498 | + setUTCDate: alias('setUTCDates'), | ||
499 | + | ||
500 | + setValue: function(){ | ||
501 | + var formatted = this.getFormattedDate(); | ||
502 | + if (!this.isInput){ | ||
503 | + if (this.component){ | ||
504 | + this.element.find('input').val(formatted).change(); | ||
505 | + } | ||
506 | + } | ||
507 | + else { | ||
508 | + this.element.val(formatted).change(); | ||
509 | + } | ||
510 | + }, | ||
511 | + | ||
512 | + getFormattedDate: function(format){ | ||
513 | + if (format === undefined) | ||
514 | + format = this.o.format; | ||
515 | + | ||
516 | + var lang = this.o.language; | ||
517 | + return $.map(this.dates, function(d){ | ||
518 | + return DPGlobal.formatDate(d, format, lang); | ||
519 | + }).join(this.o.multidateSeparator); | ||
520 | + }, | ||
521 | + | ||
522 | + setStartDate: function(startDate){ | ||
523 | + this._process_options({startDate: startDate}); | ||
524 | + this.update(); | ||
525 | + this.updateNavArrows(); | ||
526 | + }, | ||
527 | + | ||
528 | + setEndDate: function(endDate){ | ||
529 | + this._process_options({endDate: endDate}); | ||
530 | + this.update(); | ||
531 | + this.updateNavArrows(); | ||
532 | + }, | ||
533 | + | ||
534 | + setDaysOfWeekDisabled: function(daysOfWeekDisabled){ | ||
535 | + this._process_options({daysOfWeekDisabled: daysOfWeekDisabled}); | ||
536 | + this.update(); | ||
537 | + this.updateNavArrows(); | ||
538 | + }, | ||
539 | + | ||
540 | + place: function(){ | ||
541 | + if (this.isInline) | ||
542 | + return; | ||
543 | + var calendarWidth = this.picker.outerWidth(), | ||
544 | + calendarHeight = this.picker.outerHeight(), | ||
545 | + visualPadding = 10, | ||
546 | + windowWidth = $window.width(), | ||
547 | + windowHeight = $window.height(), | ||
548 | + scrollTop = $window.scrollTop(); | ||
549 | + | ||
550 | + var zIndex = parseInt(this.element.parents().filter(function(){ | ||
551 | + return $(this).css('z-index') !== 'auto'; | ||
552 | + }).first().css('z-index'))+1151; | ||
553 | + var offset = this.component ? this.component.parent().offset() : this.element.offset(); | ||
554 | + var height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false); | ||
555 | + var width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false); | ||
556 | + var left = offset.left, | ||
557 | + top = offset.top; | ||
558 | + | ||
559 | + this.picker.removeClass( | ||
560 | + 'datepicker-orient-top datepicker-orient-bottom '+ | ||
561 | + 'datepicker-orient-right datepicker-orient-left' | ||
562 | + ); | ||
563 | + | ||
564 | + if (this.o.orientation.x !== 'auto'){ | ||
565 | + this.picker.addClass('datepicker-orient-' + this.o.orientation.x); | ||
566 | + if (this.o.orientation.x === 'right') | ||
567 | + left -= calendarWidth - width; | ||
568 | + } | ||
569 | + // auto x orientation is best-placement: if it crosses a window | ||
570 | + // edge, fudge it sideways | ||
571 | + else { | ||
572 | + // Default to left | ||
573 | + this.picker.addClass('datepicker-orient-left'); | ||
574 | + if (offset.left < 0) | ||
575 | + left -= offset.left - visualPadding; | ||
576 | + else if (offset.left + calendarWidth > windowWidth) | ||
577 | + left = windowWidth - calendarWidth - visualPadding; | ||
578 | + } | ||
579 | + | ||
580 | + // auto y orientation is best-situation: top or bottom, no fudging, | ||
581 | + // decision based on which shows more of the calendar | ||
582 | + var yorient = this.o.orientation.y, | ||
583 | + top_overflow, bottom_overflow; | ||
584 | + if (yorient === 'auto'){ | ||
585 | + top_overflow = -scrollTop + offset.top - calendarHeight; | ||
586 | + bottom_overflow = scrollTop + windowHeight - (offset.top + height + calendarHeight); | ||
587 | + if (Math.max(top_overflow, bottom_overflow) === bottom_overflow) | ||
588 | + yorient = 'top'; | ||
589 | + else | ||
590 | + yorient = 'bottom'; | ||
591 | + } | ||
592 | + this.picker.addClass('datepicker-orient-' + yorient); | ||
593 | + if (yorient === 'top') | ||
594 | + top += height; | ||
595 | + else | ||
596 | + top -= calendarHeight + parseInt(this.picker.css('padding-top')); | ||
597 | + | ||
598 | + this.picker.css({ | ||
599 | + top: top, | ||
600 | + left: left, | ||
601 | + zIndex: zIndex | ||
602 | + }); | ||
603 | + }, | ||
604 | + | ||
605 | + _allow_update: true, | ||
606 | + update: function(){ | ||
607 | + if (!this._allow_update) | ||
608 | + return; | ||
609 | + | ||
610 | + var oldDates = this.dates.copy(), | ||
611 | + dates = [], | ||
612 | + fromArgs = false; | ||
613 | + if (arguments.length){ | ||
614 | + $.each(arguments, $.proxy(function(i, date){ | ||
615 | + if (date instanceof Date) | ||
616 | + date = this._local_to_utc(date); | ||
617 | + dates.push(date); | ||
618 | + }, this)); | ||
619 | + fromArgs = true; | ||
620 | + } | ||
621 | + else { | ||
622 | + dates = this.isInput | ||
623 | + ? this.element.val() | ||
624 | + : this.element.data('date') || this.element.find('input').val(); | ||
625 | + if (dates && this.o.multidate) | ||
626 | + dates = dates.split(this.o.multidateSeparator); | ||
627 | + else | ||
628 | + dates = [dates]; | ||
629 | + delete this.element.data().date; | ||
630 | + } | ||
631 | + | ||
632 | + dates = $.map(dates, $.proxy(function(date){ | ||
633 | + return DPGlobal.parseDate(date, this.o.format, this.o.language); | ||
634 | + }, this)); | ||
635 | + dates = $.grep(dates, $.proxy(function(date){ | ||
636 | + return ( | ||
637 | + date < this.o.startDate || | ||
638 | + date > this.o.endDate || | ||
639 | + !date | ||
640 | + ); | ||
641 | + }, this), true); | ||
642 | + this.dates.replace(dates); | ||
643 | + | ||
644 | + if (this.dates.length) | ||
645 | + this.viewDate = new Date(this.dates.get(-1)); | ||
646 | + else if (this.viewDate < this.o.startDate) | ||
647 | + this.viewDate = new Date(this.o.startDate); | ||
648 | + else if (this.viewDate > this.o.endDate) | ||
649 | + this.viewDate = new Date(this.o.endDate); | ||
650 | + | ||
651 | + if (fromArgs){ | ||
652 | + // setting date by clicking | ||
653 | + this.setValue(); | ||
654 | + } | ||
655 | + else if (dates.length){ | ||
656 | + // setting date by typing | ||
657 | + if (String(oldDates) !== String(this.dates)) | ||
658 | + this._trigger('changeDate'); | ||
659 | + } | ||
660 | + if (!this.dates.length && oldDates.length) | ||
661 | + this._trigger('clearDate'); | ||
662 | + | ||
663 | + this.fill(); | ||
664 | + }, | ||
665 | + | ||
666 | + fillDow: function(){ | ||
667 | + var dowCnt = this.o.weekStart, | ||
668 | + html = '<tr>'; | ||
669 | + if (this.o.calendarWeeks){ | ||
670 | + var cell = '<th class="cw"> </th>'; | ||
671 | + html += cell; | ||
672 | + this.picker.find('.datepicker-days thead tr:first-child').prepend(cell); | ||
673 | + } | ||
674 | + while (dowCnt < this.o.weekStart + 7){ | ||
675 | + html += '<th class="dow">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>'; | ||
676 | + } | ||
677 | + html += '</tr>'; | ||
678 | + this.picker.find('.datepicker-days thead').append(html); | ||
679 | + }, | ||
680 | + | ||
681 | + fillMonths: function(){ | ||
682 | + var html = '', | ||
683 | + i = 0; | ||
684 | + while (i < 12){ | ||
685 | + html += '<span class="month">'+dates[this.o.language].monthsShort[i++]+'</span>'; | ||
686 | + } | ||
687 | + this.picker.find('.datepicker-months td').html(html); | ||
688 | + }, | ||
689 | + | ||
690 | + setRange: function(range){ | ||
691 | + if (!range || !range.length) | ||
692 | + delete this.range; | ||
693 | + else | ||
694 | + this.range = $.map(range, function(d){ | ||
695 | + return d.valueOf(); | ||
696 | + }); | ||
697 | + this.fill(); | ||
698 | + }, | ||
699 | + | ||
700 | + getClassNames: function(date){ | ||
701 | + var cls = [], | ||
702 | + year = this.viewDate.getUTCFullYear(), | ||
703 | + month = this.viewDate.getUTCMonth(), | ||
704 | + today = new Date(); | ||
705 | + if (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){ | ||
706 | + cls.push('old'); | ||
707 | + } | ||
708 | + else if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){ | ||
709 | + cls.push('new'); | ||
710 | + } | ||
711 | + if (this.focusDate && date.valueOf() === this.focusDate.valueOf()) | ||
712 | + cls.push('focused'); | ||
713 | + // Compare internal UTC date with local today, not UTC today | ||
714 | + if (this.o.todayHighlight && | ||
715 | + date.getUTCFullYear() === today.getFullYear() && | ||
716 | + date.getUTCMonth() === today.getMonth() && | ||
717 | + date.getUTCDate() === today.getDate()){ | ||
718 | + cls.push('today'); | ||
719 | + } | ||
720 | + if (this.dates.contains(date) !== -1) | ||
721 | + cls.push('active'); | ||
722 | + if (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate || | ||
723 | + $.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1){ | ||
724 | + cls.push('disabled'); | ||
725 | + } | ||
726 | + if (this.range){ | ||
727 | + if (date > this.range[0] && date < this.range[this.range.length-1]){ | ||
728 | + cls.push('range'); | ||
729 | + } | ||
730 | + if ($.inArray(date.valueOf(), this.range) !== -1){ | ||
731 | + cls.push('selected'); | ||
732 | + } | ||
733 | + } | ||
734 | + return cls; | ||
735 | + }, | ||
736 | + | ||
737 | + fill: function(){ | ||
738 | + var d = new Date(this.viewDate), | ||
739 | + year = d.getUTCFullYear(), | ||
740 | + month = d.getUTCMonth(), | ||
741 | + startYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity, | ||
742 | + startMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity, | ||
743 | + endYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity, | ||
744 | + endMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity, | ||
745 | + todaytxt = dates[this.o.language].today || dates['en'].today || '', | ||
746 | + cleartxt = dates[this.o.language].clear || dates['en'].clear || '', | ||
747 | + tooltip; | ||
748 | + this.picker.find('.datepicker-days thead th.datepicker-switch') | ||
749 | + .text(dates[this.o.language].months[month]+' '+year); | ||
750 | + this.picker.find('tfoot th.today') | ||
751 | + .text(todaytxt) | ||
752 | + .toggle(this.o.todayBtn !== false); | ||
753 | + this.picker.find('tfoot th.clear') | ||
754 | + .text(cleartxt) | ||
755 | + .toggle(this.o.clearBtn !== false); | ||
756 | + this.updateNavArrows(); | ||
757 | + this.fillMonths(); | ||
758 | + var prevMonth = UTCDate(year, month-1, 28), | ||
759 | + day = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth()); | ||
760 | + prevMonth.setUTCDate(day); | ||
761 | + prevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7); | ||
762 | + var nextMonth = new Date(prevMonth); | ||
763 | + nextMonth.setUTCDate(nextMonth.getUTCDate() + 42); | ||
764 | + nextMonth = nextMonth.valueOf(); | ||
765 | + var html = []; | ||
766 | + var clsName; | ||
767 | + while (prevMonth.valueOf() < nextMonth){ | ||
768 | + if (prevMonth.getUTCDay() === this.o.weekStart){ | ||
769 | + html.push('<tr>'); | ||
770 | + if (this.o.calendarWeeks){ | ||
771 | + // ISO 8601: First week contains first thursday. | ||
772 | + // ISO also states week starts on Monday, but we can be more abstract here. | ||
773 | + var | ||
774 | + // Start of current week: based on weekstart/current date | ||
775 | + ws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5), | ||
776 | + // Thursday of this week | ||
777 | + th = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5), | ||
778 | + // First Thursday of year, year from thursday | ||
779 | + yth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5), | ||
780 | + // Calendar week: ms between thursdays, div ms per day, div 7 days | ||
781 | + calWeek = (th - yth) / 864e5 / 7 + 1; | ||
782 | + html.push('<td class="cw">'+ calWeek +'</td>'); | ||
783 | + | ||
784 | + } | ||
785 | + } | ||
786 | + clsName = this.getClassNames(prevMonth); | ||
787 | + clsName.push('day'); | ||
788 | + | ||
789 | + if (this.o.beforeShowDay !== $.noop){ | ||
790 | + var before = this.o.beforeShowDay(this._utc_to_local(prevMonth)); | ||
791 | + if (before === undefined) | ||
792 | + before = {}; | ||
793 | + else if (typeof(before) === 'boolean') | ||
794 | + before = {enabled: before}; | ||
795 | + else if (typeof(before) === 'string') | ||
796 | + before = {classes: before}; | ||
797 | + if (before.enabled === false) | ||
798 | + clsName.push('disabled'); | ||
799 | + if (before.classes) | ||
800 | + clsName = clsName.concat(before.classes.split(/\s+/)); | ||
801 | + if (before.tooltip) | ||
802 | + tooltip = before.tooltip; | ||
803 | + } | ||
804 | + | ||
805 | + clsName = $.unique(clsName); | ||
806 | + html.push('<td class="'+clsName.join(' ')+'"' + (tooltip ? ' title="'+tooltip+'"' : '') + '>'+prevMonth.getUTCDate() + '</td>'); | ||
807 | + if (prevMonth.getUTCDay() === this.o.weekEnd){ | ||
808 | + html.push('</tr>'); | ||
809 | + } | ||
810 | + prevMonth.setUTCDate(prevMonth.getUTCDate()+1); | ||
811 | + } | ||
812 | + this.picker.find('.datepicker-days tbody').empty().append(html.join('')); | ||
813 | + | ||
814 | + var months = this.picker.find('.datepicker-months') | ||
815 | + .find('th:eq(1)') | ||
816 | + .text(year) | ||
817 | + .end() | ||
818 | + .find('span').removeClass('active'); | ||
819 | + | ||
820 | + $.each(this.dates, function(i, d){ | ||
821 | + if (d.getUTCFullYear() === year) | ||
822 | + months.eq(d.getUTCMonth()).addClass('active'); | ||
823 | + }); | ||
824 | + | ||
825 | + if (year < startYear || year > endYear){ | ||
826 | + months.addClass('disabled'); | ||
827 | + } | ||
828 | + if (year === startYear){ | ||
829 | + months.slice(0, startMonth).addClass('disabled'); | ||
830 | + } | ||
831 | + if (year === endYear){ | ||
832 | + months.slice(endMonth+1).addClass('disabled'); | ||
833 | + } | ||
834 | + | ||
835 | + html = ''; | ||
836 | + year = parseInt(year/10, 10) * 10; | ||
837 | + var yearCont = this.picker.find('.datepicker-years') | ||
838 | + .find('th:eq(1)') | ||
839 | + .text(year + '-' + (year + 9)) | ||
840 | + .end() | ||
841 | + .find('td'); | ||
842 | + year -= 1; | ||
843 | + var years = $.map(this.dates, function(d){ | ||
844 | + return d.getUTCFullYear(); | ||
845 | + }), | ||
846 | + classes; | ||
847 | + for (var i = -1; i < 11; i++){ | ||
848 | + classes = ['year']; | ||
849 | + if (i === -1) | ||
850 | + classes.push('old'); | ||
851 | + else if (i === 10) | ||
852 | + classes.push('new'); | ||
853 | + if ($.inArray(year, years) !== -1) | ||
854 | + classes.push('active'); | ||
855 | + if (year < startYear || year > endYear) | ||
856 | + classes.push('disabled'); | ||
857 | + html += '<span class="' + classes.join(' ') + '">'+year+'</span>'; | ||
858 | + year += 1; | ||
859 | + } | ||
860 | + yearCont.html(html); | ||
861 | + }, | ||
862 | + | ||
863 | + updateNavArrows: function(){ | ||
864 | + if (!this._allow_update) | ||
865 | + return; | ||
866 | + | ||
867 | + var d = new Date(this.viewDate), | ||
868 | + year = d.getUTCFullYear(), | ||
869 | + month = d.getUTCMonth(); | ||
870 | + switch (this.viewMode){ | ||
871 | + case 0: | ||
872 | + if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){ | ||
873 | + this.picker.find('.prev').css({visibility: 'hidden'}); | ||
874 | + } | ||
875 | + else { | ||
876 | + this.picker.find('.prev').css({visibility: 'visible'}); | ||
877 | + } | ||
878 | + if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){ | ||
879 | + this.picker.find('.next').css({visibility: 'hidden'}); | ||
880 | + } | ||
881 | + else { | ||
882 | + this.picker.find('.next').css({visibility: 'visible'}); | ||
883 | + } | ||
884 | + break; | ||
885 | + case 1: | ||
886 | + case 2: | ||
887 | + if (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()){ | ||
888 | + this.picker.find('.prev').css({visibility: 'hidden'}); | ||
889 | + } | ||
890 | + else { | ||
891 | + this.picker.find('.prev').css({visibility: 'visible'}); | ||
892 | + } | ||
893 | + if (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()){ | ||
894 | + this.picker.find('.next').css({visibility: 'hidden'}); | ||
895 | + } | ||
896 | + else { | ||
897 | + this.picker.find('.next').css({visibility: 'visible'}); | ||
898 | + } | ||
899 | + break; | ||
900 | + } | ||
901 | + }, | ||
902 | + | ||
903 | + click: function(e){ | ||
904 | + e.preventDefault(); | ||
905 | + var target = $(e.target).closest('span, td, th'), | ||
906 | + year, month, day; | ||
907 | + if (target.length === 1){ | ||
908 | + switch (target[0].nodeName.toLowerCase()){ | ||
909 | + case 'th': | ||
910 | + switch (target[0].className){ | ||
911 | + case 'datepicker-switch': | ||
912 | + this.showMode(1); | ||
913 | + break; | ||
914 | + case 'prev': | ||
915 | + case 'next': | ||
916 | + var dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1); | ||
917 | + switch (this.viewMode){ | ||
918 | + case 0: | ||
919 | + this.viewDate = this.moveMonth(this.viewDate, dir); | ||
920 | + this._trigger('changeMonth', this.viewDate); | ||
921 | + break; | ||
922 | + case 1: | ||
923 | + case 2: | ||
924 | + this.viewDate = this.moveYear(this.viewDate, dir); | ||
925 | + if (this.viewMode === 1) | ||
926 | + this._trigger('changeYear', this.viewDate); | ||
927 | + break; | ||
928 | + } | ||
929 | + this.fill(); | ||
930 | + break; | ||
931 | + case 'today': | ||
932 | + var date = new Date(); | ||
933 | + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); | ||
934 | + | ||
935 | + this.showMode(-2); | ||
936 | + var which = this.o.todayBtn === 'linked' ? null : 'view'; | ||
937 | + this._setDate(date, which); | ||
938 | + break; | ||
939 | + case 'clear': | ||
940 | + var element; | ||
941 | + if (this.isInput) | ||
942 | + element = this.element; | ||
943 | + else if (this.component) | ||
944 | + element = this.element.find('input'); | ||
945 | + if (element) | ||
946 | + element.val("").change(); | ||
947 | + this.update(); | ||
948 | + this._trigger('changeDate'); | ||
949 | + if (this.o.autoclose) | ||
950 | + this.hide(); | ||
951 | + break; | ||
952 | + } | ||
953 | + break; | ||
954 | + case 'span': | ||
955 | + if (!target.is('.disabled')){ | ||
956 | + this.viewDate.setUTCDate(1); | ||
957 | + if (target.is('.month')){ | ||
958 | + day = 1; | ||
959 | + month = target.parent().find('span').index(target); | ||
960 | + year = this.viewDate.getUTCFullYear(); | ||
961 | + this.viewDate.setUTCMonth(month); | ||
962 | + this._trigger('changeMonth', this.viewDate); | ||
963 | + if (this.o.minViewMode === 1){ | ||
964 | + this._setDate(UTCDate(year, month, day)); | ||
965 | + } | ||
966 | + } | ||
967 | + else { | ||
968 | + day = 1; | ||
969 | + month = 0; | ||
970 | + year = parseInt(target.text(), 10)||0; | ||
971 | + this.viewDate.setUTCFullYear(year); | ||
972 | + this._trigger('changeYear', this.viewDate); | ||
973 | + if (this.o.minViewMode === 2){ | ||
974 | + this._setDate(UTCDate(year, month, day)); | ||
975 | + } | ||
976 | + } | ||
977 | + this.showMode(-1); | ||
978 | + this.fill(); | ||
979 | + } | ||
980 | + break; | ||
981 | + case 'td': | ||
982 | + if (target.is('.day') && !target.is('.disabled')){ | ||
983 | + day = parseInt(target.text(), 10)||1; | ||
984 | + year = this.viewDate.getUTCFullYear(); | ||
985 | + month = this.viewDate.getUTCMonth(); | ||
986 | + if (target.is('.old')){ | ||
987 | + if (month === 0){ | ||
988 | + month = 11; | ||
989 | + year -= 1; | ||
990 | + } | ||
991 | + else { | ||
992 | + month -= 1; | ||
993 | + } | ||
994 | + } | ||
995 | + else if (target.is('.new')){ | ||
996 | + if (month === 11){ | ||
997 | + month = 0; | ||
998 | + year += 1; | ||
999 | + } | ||
1000 | + else { | ||
1001 | + month += 1; | ||
1002 | + } | ||
1003 | + } | ||
1004 | + this._setDate(UTCDate(year, month, day)); | ||
1005 | + } | ||
1006 | + break; | ||
1007 | + } | ||
1008 | + } | ||
1009 | + if (this.picker.is(':visible') && this._focused_from){ | ||
1010 | + $(this._focused_from).focus(); | ||
1011 | + } | ||
1012 | + delete this._focused_from; | ||
1013 | + }, | ||
1014 | + | ||
1015 | + _toggle_multidate: function(date){ | ||
1016 | + var ix = this.dates.contains(date); | ||
1017 | + if (!date){ | ||
1018 | + this.dates.clear(); | ||
1019 | + } | ||
1020 | + else if (ix !== -1){ | ||
1021 | + this.dates.remove(ix); | ||
1022 | + } | ||
1023 | + else { | ||
1024 | + this.dates.push(date); | ||
1025 | + } | ||
1026 | + if (typeof this.o.multidate === 'number') | ||
1027 | + while (this.dates.length > this.o.multidate) | ||
1028 | + this.dates.remove(0); | ||
1029 | + }, | ||
1030 | + | ||
1031 | + _setDate: function(date, which){ | ||
1032 | + if (!which || which === 'date') | ||
1033 | + this._toggle_multidate(date && new Date(date)); | ||
1034 | + if (!which || which === 'view') | ||
1035 | + this.viewDate = date && new Date(date); | ||
1036 | + | ||
1037 | + this.fill(); | ||
1038 | + this.setValue(); | ||
1039 | + this._trigger('changeDate'); | ||
1040 | + var element; | ||
1041 | + if (this.isInput){ | ||
1042 | + element = this.element; | ||
1043 | + } | ||
1044 | + else if (this.component){ | ||
1045 | + element = this.element.find('input'); | ||
1046 | + } | ||
1047 | + if (element){ | ||
1048 | + element.change(); | ||
1049 | + } | ||
1050 | + if (this.o.autoclose && (!which || which === 'date')){ | ||
1051 | + this.hide(); | ||
1052 | + } | ||
1053 | + }, | ||
1054 | + | ||
1055 | + moveMonth: function(date, dir){ | ||
1056 | + if (!date) | ||
1057 | + return undefined; | ||
1058 | + if (!dir) | ||
1059 | + return date; | ||
1060 | + var new_date = new Date(date.valueOf()), | ||
1061 | + day = new_date.getUTCDate(), | ||
1062 | + month = new_date.getUTCMonth(), | ||
1063 | + mag = Math.abs(dir), | ||
1064 | + new_month, test; | ||
1065 | + dir = dir > 0 ? 1 : -1; | ||
1066 | + if (mag === 1){ | ||
1067 | + test = dir === -1 | ||
1068 | + // If going back one month, make sure month is not current month | ||
1069 | + // (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02) | ||
1070 | + ? function(){ | ||
1071 | + return new_date.getUTCMonth() === month; | ||
1072 | + } | ||
1073 | + // If going forward one month, make sure month is as expected | ||
1074 | + // (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02) | ||
1075 | + : function(){ | ||
1076 | + return new_date.getUTCMonth() !== new_month; | ||
1077 | + }; | ||
1078 | + new_month = month + dir; | ||
1079 | + new_date.setUTCMonth(new_month); | ||
1080 | + // Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11 | ||
1081 | + if (new_month < 0 || new_month > 11) | ||
1082 | + new_month = (new_month + 12) % 12; | ||
1083 | + } | ||
1084 | + else { | ||
1085 | + // For magnitudes >1, move one month at a time... | ||
1086 | + for (var i=0; i < mag; i++) | ||
1087 | + // ...which might decrease the day (eg, Jan 31 to Feb 28, etc)... | ||
1088 | + new_date = this.moveMonth(new_date, dir); | ||
1089 | + // ...then reset the day, keeping it in the new month | ||
1090 | + new_month = new_date.getUTCMonth(); | ||
1091 | + new_date.setUTCDate(day); | ||
1092 | + test = function(){ | ||
1093 | + return new_month !== new_date.getUTCMonth(); | ||
1094 | + }; | ||
1095 | + } | ||
1096 | + // Common date-resetting loop -- if date is beyond end of month, make it | ||
1097 | + // end of month | ||
1098 | + while (test()){ | ||
1099 | + new_date.setUTCDate(--day); | ||
1100 | + new_date.setUTCMonth(new_month); | ||
1101 | + } | ||
1102 | + return new_date; | ||
1103 | + }, | ||
1104 | + | ||
1105 | + moveYear: function(date, dir){ | ||
1106 | + return this.moveMonth(date, dir*12); | ||
1107 | + }, | ||
1108 | + | ||
1109 | + dateWithinRange: function(date){ | ||
1110 | + return date >= this.o.startDate && date <= this.o.endDate; | ||
1111 | + }, | ||
1112 | + | ||
1113 | + keydown: function(e){ | ||
1114 | + if (this.picker.is(':not(:visible)')){ | ||
1115 | + if (e.keyCode === 27) // allow escape to hide and re-show picker | ||
1116 | + this.show(); | ||
1117 | + return; | ||
1118 | + } | ||
1119 | + var dateChanged = false, | ||
1120 | + dir, newDate, newViewDate, | ||
1121 | + focusDate = this.focusDate || this.viewDate; | ||
1122 | + switch (e.keyCode){ | ||
1123 | + case 27: // escape | ||
1124 | + if (this.focusDate){ | ||
1125 | + this.focusDate = null; | ||
1126 | + this.viewDate = this.dates.get(-1) || this.viewDate; | ||
1127 | + this.fill(); | ||
1128 | + } | ||
1129 | + else | ||
1130 | + this.hide(); | ||
1131 | + e.preventDefault(); | ||
1132 | + break; | ||
1133 | + case 37: // left | ||
1134 | + case 39: // right | ||
1135 | + if (!this.o.keyboardNavigation) | ||
1136 | + break; | ||
1137 | + dir = e.keyCode === 37 ? -1 : 1; | ||
1138 | + if (e.ctrlKey){ | ||
1139 | + newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir); | ||
1140 | + newViewDate = this.moveYear(focusDate, dir); | ||
1141 | + this._trigger('changeYear', this.viewDate); | ||
1142 | + } | ||
1143 | + else if (e.shiftKey){ | ||
1144 | + newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir); | ||
1145 | + newViewDate = this.moveMonth(focusDate, dir); | ||
1146 | + this._trigger('changeMonth', this.viewDate); | ||
1147 | + } | ||
1148 | + else { | ||
1149 | + newDate = new Date(this.dates.get(-1) || UTCToday()); | ||
1150 | + newDate.setUTCDate(newDate.getUTCDate() + dir); | ||
1151 | + newViewDate = new Date(focusDate); | ||
1152 | + newViewDate.setUTCDate(focusDate.getUTCDate() + dir); | ||
1153 | + } | ||
1154 | + if (this.dateWithinRange(newDate)){ | ||
1155 | + this.focusDate = this.viewDate = newViewDate; | ||
1156 | + this.setValue(); | ||
1157 | + this.fill(); | ||
1158 | + e.preventDefault(); | ||
1159 | + } | ||
1160 | + break; | ||
1161 | + case 38: // up | ||
1162 | + case 40: // down | ||
1163 | + if (!this.o.keyboardNavigation) | ||
1164 | + break; | ||
1165 | + dir = e.keyCode === 38 ? -1 : 1; | ||
1166 | + if (e.ctrlKey){ | ||
1167 | + newDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir); | ||
1168 | + newViewDate = this.moveYear(focusDate, dir); | ||
1169 | + this._trigger('changeYear', this.viewDate); | ||
1170 | + } | ||
1171 | + else if (e.shiftKey){ | ||
1172 | + newDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir); | ||
1173 | + newViewDate = this.moveMonth(focusDate, dir); | ||
1174 | + this._trigger('changeMonth', this.viewDate); | ||
1175 | + } | ||
1176 | + else { | ||
1177 | + newDate = new Date(this.dates.get(-1) || UTCToday()); | ||
1178 | + newDate.setUTCDate(newDate.getUTCDate() + dir * 7); | ||
1179 | + newViewDate = new Date(focusDate); | ||
1180 | + newViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7); | ||
1181 | + } | ||
1182 | + if (this.dateWithinRange(newDate)){ | ||
1183 | + this.focusDate = this.viewDate = newViewDate; | ||
1184 | + this.setValue(); | ||
1185 | + this.fill(); | ||
1186 | + e.preventDefault(); | ||
1187 | + } | ||
1188 | + break; | ||
1189 | + case 32: // spacebar | ||
1190 | + // Spacebar is used in manually typing dates in some formats. | ||
1191 | + // As such, its behavior should not be hijacked. | ||
1192 | + break; | ||
1193 | + case 13: // enter | ||
1194 | + focusDate = this.focusDate || this.dates.get(-1) || this.viewDate; | ||
1195 | + this._toggle_multidate(focusDate); | ||
1196 | + dateChanged = true; | ||
1197 | + this.focusDate = null; | ||
1198 | + this.viewDate = this.dates.get(-1) || this.viewDate; | ||
1199 | + this.setValue(); | ||
1200 | + this.fill(); | ||
1201 | + if (this.picker.is(':visible')){ | ||
1202 | + e.preventDefault(); | ||
1203 | + if (this.o.autoclose) | ||
1204 | + this.hide(); | ||
1205 | + } | ||
1206 | + break; | ||
1207 | + case 9: // tab | ||
1208 | + this.focusDate = null; | ||
1209 | + this.viewDate = this.dates.get(-1) || this.viewDate; | ||
1210 | + this.fill(); | ||
1211 | + this.hide(); | ||
1212 | + break; | ||
1213 | + } | ||
1214 | + if (dateChanged){ | ||
1215 | + if (this.dates.length) | ||
1216 | + this._trigger('changeDate'); | ||
1217 | + else | ||
1218 | + this._trigger('clearDate'); | ||
1219 | + var element; | ||
1220 | + if (this.isInput){ | ||
1221 | + element = this.element; | ||
1222 | + } | ||
1223 | + else if (this.component){ | ||
1224 | + element = this.element.find('input'); | ||
1225 | + } | ||
1226 | + if (element){ | ||
1227 | + element.change(); | ||
1228 | + } | ||
1229 | + } | ||
1230 | + }, | ||
1231 | + | ||
1232 | + showMode: function(dir){ | ||
1233 | + if (dir){ | ||
1234 | + this.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir)); | ||
1235 | + } | ||
1236 | + this.picker | ||
1237 | + .find('>div') | ||
1238 | + .hide() | ||
1239 | + .filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName) | ||
1240 | + .css('display', 'block'); | ||
1241 | + this.updateNavArrows(); | ||
1242 | + } | ||
1243 | + }; | ||
1244 | + | ||
1245 | + var DateRangePicker = function(element, options){ | ||
1246 | + this.element = $(element); | ||
1247 | + this.inputs = $.map(options.inputs, function(i){ | ||
1248 | + return i.jquery ? i[0] : i; | ||
1249 | + }); | ||
1250 | + delete options.inputs; | ||
1251 | + | ||
1252 | + $(this.inputs) | ||
1253 | + .datepicker(options) | ||
1254 | + .bind('changeDate', $.proxy(this.dateUpdated, this)); | ||
1255 | + | ||
1256 | + this.pickers = $.map(this.inputs, function(i){ | ||
1257 | + return $(i).data('datepicker'); | ||
1258 | + }); | ||
1259 | + this.updateDates(); | ||
1260 | + }; | ||
1261 | + DateRangePicker.prototype = { | ||
1262 | + updateDates: function(){ | ||
1263 | + this.dates = $.map(this.pickers, function(i){ | ||
1264 | + return i.getUTCDate(); | ||
1265 | + }); | ||
1266 | + this.updateRanges(); | ||
1267 | + }, | ||
1268 | + updateRanges: function(){ | ||
1269 | + var range = $.map(this.dates, function(d){ | ||
1270 | + return d.valueOf(); | ||
1271 | + }); | ||
1272 | + $.each(this.pickers, function(i, p){ | ||
1273 | + p.setRange(range); | ||
1274 | + }); | ||
1275 | + }, | ||
1276 | + dateUpdated: function(e){ | ||
1277 | + // `this.updating` is a workaround for preventing infinite recursion | ||
1278 | + // between `changeDate` triggering and `setUTCDate` calling. Until | ||
1279 | + // there is a better mechanism. | ||
1280 | + if (this.updating) | ||
1281 | + return; | ||
1282 | + this.updating = true; | ||
1283 | + | ||
1284 | + var dp = $(e.target).data('datepicker'), | ||
1285 | + new_date = dp.getUTCDate(), | ||
1286 | + i = $.inArray(e.target, this.inputs), | ||
1287 | + l = this.inputs.length; | ||
1288 | + if (i === -1) | ||
1289 | + return; | ||
1290 | + | ||
1291 | + $.each(this.pickers, function(i, p){ | ||
1292 | + if (!p.getUTCDate()) | ||
1293 | + p.setUTCDate(new_date); | ||
1294 | + }); | ||
1295 | + | ||
1296 | + if (new_date < this.dates[i]){ | ||
1297 | + // Date being moved earlier/left | ||
1298 | + while (i >= 0 && new_date < this.dates[i]){ | ||
1299 | + this.pickers[i--].setUTCDate(new_date); | ||
1300 | + } | ||
1301 | + } | ||
1302 | + else if (new_date > this.dates[i]){ | ||
1303 | + // Date being moved later/right | ||
1304 | + while (i < l && new_date > this.dates[i]){ | ||
1305 | + this.pickers[i++].setUTCDate(new_date); | ||
1306 | + } | ||
1307 | + } | ||
1308 | + this.updateDates(); | ||
1309 | + | ||
1310 | + delete this.updating; | ||
1311 | + }, | ||
1312 | + remove: function(){ | ||
1313 | + $.map(this.pickers, function(p){ p.remove(); }); | ||
1314 | + delete this.element.data().datepicker; | ||
1315 | + } | ||
1316 | + }; | ||
1317 | + | ||
1318 | + function opts_from_el(el, prefix){ | ||
1319 | + // Derive options from element data-attrs | ||
1320 | + var data = $(el).data(), | ||
1321 | + out = {}, inkey, | ||
1322 | + replace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])'); | ||
1323 | + prefix = new RegExp('^' + prefix.toLowerCase()); | ||
1324 | + function re_lower(_,a){ | ||
1325 | + return a.toLowerCase(); | ||
1326 | + } | ||
1327 | + for (var key in data) | ||
1328 | + if (prefix.test(key)){ | ||
1329 | + inkey = key.replace(replace, re_lower); | ||
1330 | + out[inkey] = data[key]; | ||
1331 | + } | ||
1332 | + return out; | ||
1333 | + } | ||
1334 | + | ||
1335 | + function opts_from_locale(lang){ | ||
1336 | + // Derive options from locale plugins | ||
1337 | + var out = {}; | ||
1338 | + // Check if "de-DE" style date is available, if not language should | ||
1339 | + // fallback to 2 letter code eg "de" | ||
1340 | + if (!dates[lang]){ | ||
1341 | + lang = lang.split('-')[0]; | ||
1342 | + if (!dates[lang]) | ||
1343 | + return; | ||
1344 | + } | ||
1345 | + var d = dates[lang]; | ||
1346 | + $.each(locale_opts, function(i,k){ | ||
1347 | + if (k in d) | ||
1348 | + out[k] = d[k]; | ||
1349 | + }); | ||
1350 | + return out; | ||
1351 | + } | ||
1352 | + | ||
1353 | + var old = $.fn.datepicker; | ||
1354 | + $.fn.datepicker = function(option){ | ||
1355 | + var args = Array.apply(null, arguments); | ||
1356 | + args.shift(); | ||
1357 | + var internal_return; | ||
1358 | + this.each(function(){ | ||
1359 | + var $this = $(this), | ||
1360 | + data = $this.data('datepicker'), | ||
1361 | + options = typeof option === 'object' && option; | ||
1362 | + if (!data){ | ||
1363 | + var elopts = opts_from_el(this, 'date'), | ||
1364 | + // Preliminary otions | ||
1365 | + xopts = $.extend({}, defaults, elopts, options), | ||
1366 | + locopts = opts_from_locale(xopts.language), | ||
1367 | + // Options priority: js args, data-attrs, locales, defaults | ||
1368 | + opts = $.extend({}, defaults, locopts, elopts, options); | ||
1369 | + if ($this.is('.input-daterange') || opts.inputs){ | ||
1370 | + var ropts = { | ||
1371 | + inputs: opts.inputs || $this.find('input').toArray() | ||
1372 | + }; | ||
1373 | + $this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts)))); | ||
1374 | + } | ||
1375 | + else { | ||
1376 | + $this.data('datepicker', (data = new Datepicker(this, opts))); | ||
1377 | + } | ||
1378 | + } | ||
1379 | + if (typeof option === 'string' && typeof data[option] === 'function'){ | ||
1380 | + internal_return = data[option].apply(data, args); | ||
1381 | + if (internal_return !== undefined) | ||
1382 | + return false; | ||
1383 | + } | ||
1384 | + }); | ||
1385 | + if (internal_return !== undefined) | ||
1386 | + return internal_return; | ||
1387 | + else | ||
1388 | + return this; | ||
1389 | + }; | ||
1390 | + | ||
1391 | + var defaults = $.fn.datepicker.defaults = { | ||
1392 | + autoclose: false, | ||
1393 | + beforeShowDay: $.noop, | ||
1394 | + calendarWeeks: false, | ||
1395 | + clearBtn: false, | ||
1396 | + daysOfWeekDisabled: [], | ||
1397 | + endDate: Infinity, | ||
1398 | + forceParse: true, | ||
1399 | + format: 'mm/dd/yyyy', | ||
1400 | + keyboardNavigation: true, | ||
1401 | + language: 'en', | ||
1402 | + minViewMode: 0, | ||
1403 | + multidate: false, | ||
1404 | + multidateSeparator: ',', | ||
1405 | + orientation: "auto", | ||
1406 | + rtl: false, | ||
1407 | + startDate: -Infinity, | ||
1408 | + startView: 0, | ||
1409 | + todayBtn: false, | ||
1410 | + todayHighlight: false, | ||
1411 | + weekStart: 0 | ||
1412 | + }; | ||
1413 | + var locale_opts = $.fn.datepicker.locale_opts = [ | ||
1414 | + 'format', | ||
1415 | + 'rtl', | ||
1416 | + 'weekStart' | ||
1417 | + ]; | ||
1418 | + $.fn.datepicker.Constructor = Datepicker; | ||
1419 | + var dates = $.fn.datepicker.dates = { | ||
1420 | + en: { | ||
1421 | + days: ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday", "Sunday"], | ||
1422 | + daysShort: ["Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun"], | ||
1423 | + daysMin: ["Su", "Mo", "Tu", "We", "Th", "Fr", "Sa", "Su"], | ||
1424 | + months: ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"], | ||
1425 | + monthsShort: ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"], | ||
1426 | + today: "Today", | ||
1427 | + clear: "Clear" | ||
1428 | + } | ||
1429 | + }; | ||
1430 | + | ||
1431 | + var DPGlobal = { | ||
1432 | + modes: [ | ||
1433 | + { | ||
1434 | + clsName: 'days', | ||
1435 | + navFnc: 'Month', | ||
1436 | + navStep: 1 | ||
1437 | + }, | ||
1438 | + { | ||
1439 | + clsName: 'months', | ||
1440 | + navFnc: 'FullYear', | ||
1441 | + navStep: 1 | ||
1442 | + }, | ||
1443 | + { | ||
1444 | + clsName: 'years', | ||
1445 | + navFnc: 'FullYear', | ||
1446 | + navStep: 10 | ||
1447 | + }], | ||
1448 | + isLeapYear: function(year){ | ||
1449 | + return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); | ||
1450 | + }, | ||
1451 | + getDaysInMonth: function(year, month){ | ||
1452 | + return [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month]; | ||
1453 | + }, | ||
1454 | + validParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g, | ||
1455 | + nonpunctuation: /[^ -\/:-@\[\u3400-\u9fff-`{-~\t\n\r]+/g, | ||
1456 | + parseFormat: function(format){ | ||
1457 | + // IE treats \0 as a string end in inputs (truncating the value), | ||
1458 | + // so it's a bad format delimiter, anyway | ||
1459 | + var separators = format.replace(this.validParts, '\0').split('\0'), | ||
1460 | + parts = format.match(this.validParts); | ||
1461 | + if (!separators || !separators.length || !parts || parts.length === 0){ | ||
1462 | + throw new Error("Invalid date format."); | ||
1463 | + } | ||
1464 | + return {separators: separators, parts: parts}; | ||
1465 | + }, | ||
1466 | + parseDate: function(date, format, language){ | ||
1467 | + if (!date) | ||
1468 | + return undefined; | ||
1469 | + if (date instanceof Date) | ||
1470 | + return date; | ||
1471 | + if (typeof format === 'string') | ||
1472 | + format = DPGlobal.parseFormat(format); | ||
1473 | + var part_re = /([\-+]\d+)([dmwy])/, | ||
1474 | + parts = date.match(/([\-+]\d+)([dmwy])/g), | ||
1475 | + part, dir, i; | ||
1476 | + if (/^[\-+]\d+[dmwy]([\s,]+[\-+]\d+[dmwy])*$/.test(date)){ | ||
1477 | + date = new Date(); | ||
1478 | + for (i=0; i < parts.length; i++){ | ||
1479 | + part = part_re.exec(parts[i]); | ||
1480 | + dir = parseInt(part[1]); | ||
1481 | + switch (part[2]){ | ||
1482 | + case 'd': | ||
1483 | + date.setUTCDate(date.getUTCDate() + dir); | ||
1484 | + break; | ||
1485 | + case 'm': | ||
1486 | + date = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir); | ||
1487 | + break; | ||
1488 | + case 'w': | ||
1489 | + date.setUTCDate(date.getUTCDate() + dir * 7); | ||
1490 | + break; | ||
1491 | + case 'y': | ||
1492 | + date = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir); | ||
1493 | + break; | ||
1494 | + } | ||
1495 | + } | ||
1496 | + return UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0); | ||
1497 | + } | ||
1498 | + parts = date && date.match(this.nonpunctuation) || []; | ||
1499 | + date = new Date(); | ||
1500 | + var parsed = {}, | ||
1501 | + setters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'], | ||
1502 | + setters_map = { | ||
1503 | + yyyy: function(d,v){ | ||
1504 | + return d.setUTCFullYear(v); | ||
1505 | + }, | ||
1506 | + yy: function(d,v){ | ||
1507 | + return d.setUTCFullYear(2000+v); | ||
1508 | + }, | ||
1509 | + m: function(d,v){ | ||
1510 | + if (isNaN(d)) | ||
1511 | + return d; | ||
1512 | + v -= 1; | ||
1513 | + while (v < 0) v += 12; | ||
1514 | + v %= 12; | ||
1515 | + d.setUTCMonth(v); | ||
1516 | + while (d.getUTCMonth() !== v) | ||
1517 | + d.setUTCDate(d.getUTCDate()-1); | ||
1518 | + return d; | ||
1519 | + }, | ||
1520 | + d: function(d,v){ | ||
1521 | + return d.setUTCDate(v); | ||
1522 | + } | ||
1523 | + }, | ||
1524 | + val, filtered; | ||
1525 | + setters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m']; | ||
1526 | + setters_map['dd'] = setters_map['d']; | ||
1527 | + date = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0); | ||
1528 | + var fparts = format.parts.slice(); | ||
1529 | + // Remove noop parts | ||
1530 | + if (parts.length !== fparts.length){ | ||
1531 | + fparts = $(fparts).filter(function(i,p){ | ||
1532 | + return $.inArray(p, setters_order) !== -1; | ||
1533 | + }).toArray(); | ||
1534 | + } | ||
1535 | + // Process remainder | ||
1536 | + function match_part(){ | ||
1537 | + var m = this.slice(0, parts[i].length), | ||
1538 | + p = parts[i].slice(0, m.length); | ||
1539 | + return m === p; | ||
1540 | + } | ||
1541 | + if (parts.length === fparts.length){ | ||
1542 | + var cnt; | ||
1543 | + for (i=0, cnt = fparts.length; i < cnt; i++){ | ||
1544 | + val = parseInt(parts[i], 10); | ||
1545 | + part = fparts[i]; | ||
1546 | + if (isNaN(val)){ | ||
1547 | + switch (part){ | ||
1548 | + case 'MM': | ||
1549 | + filtered = $(dates[language].months).filter(match_part); | ||
1550 | + val = $.inArray(filtered[0], dates[language].months) + 1; | ||
1551 | + break; | ||
1552 | + case 'M': | ||
1553 | + filtered = $(dates[language].monthsShort).filter(match_part); | ||
1554 | + val = $.inArray(filtered[0], dates[language].monthsShort) + 1; | ||
1555 | + break; | ||
1556 | + } | ||
1557 | + } | ||
1558 | + parsed[part] = val; | ||
1559 | + } | ||
1560 | + var _date, s; | ||
1561 | + for (i=0; i < setters_order.length; i++){ | ||
1562 | + s = setters_order[i]; | ||
1563 | + if (s in parsed && !isNaN(parsed[s])){ | ||
1564 | + _date = new Date(date); | ||
1565 | + setters_map[s](_date, parsed[s]); | ||
1566 | + if (!isNaN(_date)) | ||
1567 | + date = _date; | ||
1568 | + } | ||
1569 | + } | ||
1570 | + } | ||
1571 | + return date; | ||
1572 | + }, | ||
1573 | + formatDate: function(date, format, language){ | ||
1574 | + if (!date) | ||
1575 | + return ''; | ||
1576 | + if (typeof format === 'string') | ||
1577 | + format = DPGlobal.parseFormat(format); | ||
1578 | + var val = { | ||
1579 | + d: date.getUTCDate(), | ||
1580 | + D: dates[language].daysShort[date.getUTCDay()], | ||
1581 | + DD: dates[language].days[date.getUTCDay()], | ||
1582 | + m: date.getUTCMonth() + 1, | ||
1583 | + M: dates[language].monthsShort[date.getUTCMonth()], | ||
1584 | + MM: dates[language].months[date.getUTCMonth()], | ||
1585 | + yy: date.getUTCFullYear().toString().substring(2), | ||
1586 | + yyyy: date.getUTCFullYear() | ||
1587 | + }; | ||
1588 | + val.dd = (val.d < 10 ? '0' : '') + val.d; | ||
1589 | + val.mm = (val.m < 10 ? '0' : '') + val.m; | ||
1590 | + date = []; | ||
1591 | + var seps = $.extend([], format.separators); | ||
1592 | + for (var i=0, cnt = format.parts.length; i <= cnt; i++){ | ||
1593 | + if (seps.length) | ||
1594 | + date.push(seps.shift()); | ||
1595 | + date.push(val[format.parts[i]]); | ||
1596 | + } | ||
1597 | + return date.join(''); | ||
1598 | + }, | ||
1599 | + headTemplate: '<thead>'+ | ||
1600 | + '<tr>'+ | ||
1601 | + '<th class="prev">«</th>'+ | ||
1602 | + '<th colspan="5" class="datepicker-switch"></th>'+ | ||
1603 | + '<th class="next">»</th>'+ | ||
1604 | + '</tr>'+ | ||
1605 | + '</thead>', | ||
1606 | + contTemplate: '<tbody><tr><td colspan="7"></td></tr></tbody>', | ||
1607 | + footTemplate: '<tfoot>'+ | ||
1608 | + '<tr>'+ | ||
1609 | + '<th colspan="7" class="today"></th>'+ | ||
1610 | + '</tr>'+ | ||
1611 | + '<tr>'+ | ||
1612 | + '<th colspan="7" class="clear"></th>'+ | ||
1613 | + '</tr>'+ | ||
1614 | + '</tfoot>' | ||
1615 | + }; | ||
1616 | + DPGlobal.template = '<div class="datepicker">'+ | ||
1617 | + '<div class="datepicker-days">'+ | ||
1618 | + '<table class=" table-condensed">'+ | ||
1619 | + DPGlobal.headTemplate+ | ||
1620 | + '<tbody></tbody>'+ | ||
1621 | + DPGlobal.footTemplate+ | ||
1622 | + '</table>'+ | ||
1623 | + '</div>'+ | ||
1624 | + '<div class="datepicker-months">'+ | ||
1625 | + '<table class="table-condensed">'+ | ||
1626 | + DPGlobal.headTemplate+ | ||
1627 | + DPGlobal.contTemplate+ | ||
1628 | + DPGlobal.footTemplate+ | ||
1629 | + '</table>'+ | ||
1630 | + '</div>'+ | ||
1631 | + '<div class="datepicker-years">'+ | ||
1632 | + '<table class="table-condensed">'+ | ||
1633 | + DPGlobal.headTemplate+ | ||
1634 | + DPGlobal.contTemplate+ | ||
1635 | + DPGlobal.footTemplate+ | ||
1636 | + '</table>'+ | ||
1637 | + '</div>'+ | ||
1638 | + '</div>'; | ||
1639 | + | ||
1640 | + $.fn.datepicker.DPGlobal = DPGlobal; | ||
1641 | + | ||
1642 | + | ||
1643 | + /* DATEPICKER NO CONFLICT | ||
1644 | + * =================== */ | ||
1645 | + | ||
1646 | + $.fn.datepicker.noConflict = function(){ | ||
1647 | + $.fn.datepicker = old; | ||
1648 | + return this; | ||
1649 | + }; | ||
1650 | + | ||
1651 | + | ||
1652 | + /* DATEPICKER DATA-API | ||
1653 | + * ================== */ | ||
1654 | + | ||
1655 | + $(document).on( | ||
1656 | + 'focus.datepicker.data-api click.datepicker.data-api', | ||
1657 | + '[data-provide="datepicker"]', | ||
1658 | + function(e){ | ||
1659 | + var $this = $(this); | ||
1660 | + if ($this.data('datepicker')) | ||
1661 | + return; | ||
1662 | + e.preventDefault(); | ||
1663 | + // component click requires us to explicitly show it | ||
1664 | + $this.datepicker('show'); | ||
1665 | + } | ||
1666 | + ); | ||
1667 | + $(function(){ | ||
1668 | + $('[data-provide="datepicker-inline"]').datepicker(); | ||
1669 | + }); | ||
1670 | + | ||
1671 | +}(window.jQuery)); |
1 | +/** | ||
2 | + * Korean translation for bootstrap-datepicker | ||
3 | + * Gu Youn <http://github.com/guyoun> | ||
4 | + */ | ||
5 | +;(function($){ | ||
6 | + $.fn.datepicker.dates['kr'] = { | ||
7 | + days: ["일요일", "월요일", "화요일", "수요일", "목요일", "금요일", "토요일", "일요일"], | ||
8 | + daysShort: ["일", "월", "화", "수", "목", "금", "토", "일"], | ||
9 | + daysMin: ["일", "월", "화", "수", "목", "금", "토", "일"], | ||
10 | + months: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"], | ||
11 | + monthsShort: ["1월", "2월", "3월", "4월", "5월", "6월", "7월", "8월", "9월", "10월", "11월", "12월"] | ||
12 | + }; | ||
13 | +}(jQuery)); |
... | @@ -3,9 +3,6 @@ | ... | @@ -3,9 +3,6 @@ |
3 | 3 | ||
4 | <head> | 4 | <head> |
5 | <meta charset="utf-8"> | 5 | <meta charset="utf-8"> |
6 | - <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> | ||
7 | - <meta name="description" content=""> | ||
8 | - <meta name="author" content=""> | ||
9 | 6 | ||
10 | <title>식당 예약</title> | 7 | <title>식당 예약</title> |
11 | 8 | ||
... | @@ -20,6 +17,14 @@ | ... | @@ -20,6 +17,14 @@ |
20 | <!-- Custom styles for this template --> | 17 | <!-- Custom styles for this template --> |
21 | <link href="css/grayscale.min.css" rel="stylesheet"> | 18 | <link href="css/grayscale.min.css" rel="stylesheet"> |
22 | 19 | ||
20 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.13.0/moment.min.js"></script> | ||
21 | + <script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datetimepicker/4.17.37/js/bootstrap-datetimepicker.min.js"></script> | ||
22 | + | ||
23 | + <link rel="stylesheet" href="https://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> | ||
24 | + <link rel="stylesheet" href="https://jqueryui.com/resources/demos/style.css"> | ||
25 | + <script src="https://code.jquery.com/jquery-1.12.4.js"></script> | ||
26 | + <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> | ||
27 | + | ||
23 | 28 | ||
24 | 29 | ||
25 | <style type="text/css"> | 30 | <style type="text/css"> |
... | @@ -98,6 +103,8 @@ | ... | @@ -98,6 +103,8 @@ |
98 | </div> | 103 | </div> |
99 | </div> | 104 | </div> |
100 | 105 | ||
106 | + | ||
107 | + | ||
101 | <!--예약시간--> | 108 | <!--예약시간--> |
102 | <div class="form-group"> | 109 | <div class="form-group"> |
103 | <div class="col-md-4 selectContainer"> | 110 | <div class="col-md-4 selectContainer"> |
... | @@ -131,28 +138,65 @@ | ... | @@ -131,28 +138,65 @@ |
131 | </div> | 138 | </div> |
132 | </div> | 139 | </div> |
133 | 140 | ||
134 | - <!--예약날짜--> | ||
135 | <div class="form-group"> | 141 | <div class="form-group"> |
136 | <div class="col-md-4 selectContainer"> | 142 | <div class="col-md-4 selectContainer"> |
137 | - <div class="input-group"> | 143 | + <div class="input-group"> |
138 | - <label class="col-md-4 control-label">예약 날짜</label> | 144 | + |
139 | - <input type="text" placeholder = "클릭하여 달력 보기" id="datepicker"></p></p> | 145 | + <label class="col-md-4 control-label">예약 날짜</label> |
140 | - <script> | 146 | + <div class="input-group input-append date" id="dateRangePicker"> </div> |
141 | - $( function() { | 147 | + <script> |
142 | - $( "#datepicker" ).datepicker(); | 148 | + $('#dateRangePicker').datepicker({ |
143 | - } ); | 149 | + format: "yyyy-mm-dd", |
144 | - </script> | 150 | + language: "kr" |
145 | - </label> | 151 | + }); |
152 | + </script> | ||
153 | + </div> | ||
154 | + </div> | ||
155 | + </div> | ||
156 | + | ||
157 | + | ||
158 | + | ||
159 | + | ||
160 | + <div class="container"> | ||
161 | + <div class="row"> | ||
162 | + <div class='col-sm-6'> | ||
163 | + <div class="form-group"> | ||
164 | + <div class='input-group date' id='datetimepicker1'> | ||
165 | + <input type='text' class="form-control" /> | ||
166 | + <span class="input-group-addon"> | ||
167 | + <span class="glyphicon glyphicon-calendar"></span> | ||
168 | + </span> | ||
169 | + </div> | ||
170 | + </div> | ||
171 | + </div> | ||
172 | + <script type="text/javascript"> | ||
173 | + $(document).ready(function(){ | ||
174 | + $('#datetimepicker1').datetimepicker(); | ||
175 | + }); | ||
176 | + </script> | ||
177 | + </div> | ||
146 | </div> | 178 | </div> |
147 | -<br> | 179 | + |
180 | + | ||
181 | + | ||
182 | + | ||
183 | + | ||
184 | + | ||
185 | + | ||
186 | + | ||
187 | + | ||
188 | + | ||
189 | + | ||
190 | + <br> | ||
148 | <div class="form-group"> | 191 | <div class="form-group"> |
192 | + <div class="col-md-4 selectContainer"> | ||
149 | <div class="input-group"> | 193 | <div class="input-group"> |
150 | <label class="col-md-4 control-label">요청사항</label> | 194 | <label class="col-md-4 control-label">요청사항</label> |
151 | <i class="glyphicon glyphicon-pencil"></i> | 195 | <i class="glyphicon glyphicon-pencil"></i> |
152 | <textarea class="form-control" name="content" placeholder="Project Description" style="width:310px; height:100px;"></textarea> | 196 | <textarea class="form-control" name="content" placeholder="Project Description" style="width:310px; height:100px;"></textarea> |
153 | </div> | 197 | </div> |
154 | </div> | 198 | </div> |
155 | - </div> | 199 | + |
156 | 200 | ||
157 | 201 | ||
158 | <br> | 202 | <br> | ... | ... |
1 | -<!DOCTYPE html> | 1 | +<!doctype html> |
2 | -<html> | 2 | +<html lang="en"> |
3 | <head> | 3 | <head> |
4 | - <meta charset = "utf-8"> | 4 | + <meta charset="utf-8"> |
5 | - <title><%= title %></title> | 5 | + <meta name="viewport" content="width=device-width, initial-scale=1"> |
6 | - <link rel = 'stylesheet' href='stylesheets/style.css'/> | 6 | + <title>jQuery UI Datepicker - Default functionality</title> |
7 | - <meta charset = "utf-8"> | 7 | + <link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> |
8 | - <meta http-equiv="X-UA-Compatible" content = "IE=edge"> | 8 | + <link rel="stylesheet" href="/resources/demos/style.css"> |
9 | - <meta name = "viewport" content = "width=device-width, initial-scale=1"> | 9 | + <script src="https://code.jquery.com/jquery-1.12.4.js"></script> |
10 | - <title><%= title %></title> | 10 | + <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> |
11 | - <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css"> | 11 | + <script> |
12 | - <link rel = 'bootstrap' href = 'javascripts/bootstrap.js'/> | 12 | + $( function() { |
13 | - <link rel = 'jquery' href = 'javascripts/jquery-3.3.1.min.js'/> | 13 | + $( "#datepicker" ).datepicker(); |
14 | + } ); | ||
15 | + </script> | ||
14 | </head> | 16 | </head> |
15 | <body> | 17 | <body> |
16 | -<h1><%= title %></h1> | ||
17 | 18 | ||
18 | -<a href="/board/write">글쓰기로 이동</a> | 19 | +<p>Date: <input type="text" id="datepicker"></p> |
19 | -<br> | ||
20 | -<br> | ||
21 | 20 | ||
22 | -<table class = "table table-striped table-bordered table-hober"> | ||
23 | - <thead> | ||
24 | - <tr class="list-table1 blue"> | ||
25 | - <td>번호</td> | ||
26 | - <td>작성자</td> | ||
27 | - <td>제목</td> | ||
28 | - <td>조회수</td> | ||
29 | - <td>변경일</td> | ||
30 | - </tr> | ||
31 | -<tbody> | ||
32 | -<% | ||
33 | - for(var i=0; i<rows.length; i++) | ||
34 | - { | ||
35 | - var oneItem = rows[i]; | ||
36 | -%> | ||
37 | - <tr> | ||
38 | - <td><%=oneItem.idx%></td> | ||
39 | - <td><%=oneItem.creater_id%></td> | ||
40 | - <td><%=oneItem.title%></td> | ||
41 | - <td><%=oneItem.hit%></td> | ||
42 | - <td><%=oneItem.modidate%></td> | ||
43 | - </tr> | ||
44 | - | ||
45 | -<% | ||
46 | - } | ||
47 | -%> | ||
48 | -</table> | ||
49 | -<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script> | ||
50 | - <!-- 모든 컴파일된 플러그인을 포함합니다 (아래), 원하지 않는다면 필요한 각각의 파일을 포함하세요 --> | ||
51 | - <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/js/bootstrap.min.js"></script> | ||
52 | 21 | ||
53 | </body> | 22 | </body> |
54 | </html> | 23 | </html> | ... | ... |
... | @@ -6,27 +6,14 @@ | ... | @@ -6,27 +6,14 @@ |
6 | <script src="https://code.jquery.com/jquery-1.12.4.js"></script> | 6 | <script src="https://code.jquery.com/jquery-1.12.4.js"></script> |
7 | <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> | 7 | <script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script> |
8 | 8 | ||
9 | - | ||
10 | - | ||
11 | <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> | 9 | <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> |
12 | <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css" rel="stylesheet"> | 10 | <link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap-theme.min.css" rel="stylesheet"> |
11 | +<link href="https://cdnjs.cloudflare.com/ajax/libs/jquery.bootstrapvalidator/0.5.0/css/bootstrapValidator.min.css" rel="stylesheet"> | ||
13 | 12 | ||
14 | <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> | 13 | <link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css"> |
15 | <link rel="stylesheet" href="http://resources/demos/style.css"> | 14 | <link rel="stylesheet" href="http://resources/demos/style.css"> |
16 | 15 | ||
17 | 16 | ||
18 | - | ||
19 | - <!-- Custom fonts for this template --> | ||
20 | - <link href="vendor/font-awesome/css/font-awesome.min.css" rel="stylesheet" type="text/css"> | ||
21 | - <link href="https://fonts.googleapis.com/css?family=Lora:400,700,400italic,700italic" rel="stylesheet" type="text/css"> | ||
22 | - <link href='https://fonts.googleapis.com/css?family=Cabin:700' rel='stylesheet' type='text/css'> | ||
23 | - | ||
24 | - <!-- Custom styles for this template --> | ||
25 | - <link href="css/grayscale.min.css" rel="stylesheet"> | ||
26 | - | ||
27 | - | ||
28 | - | ||
29 | - | ||
30 | <div class="container"> | 17 | <div class="container"> |
31 | <br><br> | 18 | <br><br> |
32 | <label class="col-md-4 control-label"><legend>예약하기</legend></label> | 19 | <label class="col-md-4 control-label"><legend>예약하기</legend></label> |
... | @@ -37,16 +24,16 @@ | ... | @@ -37,16 +24,16 @@ |
37 | <form method="POST" action="/res"> | 24 | <form method="POST" action="/res"> |
38 | <!-- Form Name --> | 25 | <!-- Form Name --> |
39 | 26 | ||
40 | - <!-- Text input--> | 27 | +<!-- 이름--> |
41 | - <div class="form-group"> | 28 | +<div class="form-group"> |
42 | - <label class="col-md-4 control-label">이름</label> | 29 | + <label class="col-md-4 control-label" br>이름</label> |
43 | - <div class="col-md-4 inputGroupContainer"> | 30 | + <div class="col-md-4 inputGroupContainer"> |
44 | <div class="input-group"> | 31 | <div class="input-group"> |
45 | - <span class="input-group-addon"><i class="glyphicon glyphicon-envelope"></i></span> | 32 | + <span class="input-group-addon"><i class="glyphicon glyphicon-user"></i></span> |
46 | - <input name="email" placeholder="홍길동" class="form-control" type="text"> | 33 | + <input name="creater_id" placeholder="이름" class="form-control" type="text"> |
47 | - </div> | ||
48 | </div> | 34 | </div> |
49 | </div> | 35 | </div> |
36 | +</div> | ||
50 | 37 | ||
51 | 38 | ||
52 | <!-- 휴대전화--> | 39 | <!-- 휴대전화--> |
... | @@ -155,10 +142,10 @@ | ... | @@ -155,10 +142,10 @@ |
155 | <!-- Text area --> | 142 | <!-- Text area --> |
156 | 143 | ||
157 | <div class="form-group"> | 144 | <div class="form-group"> |
158 | - <div class="col-md-4 inputGroupContainer"> | ||
159 | - <div class="input-group"> | ||
160 | <label class="col-md-4 control-label">요청사항</label> | 145 | <label class="col-md-4 control-label">요청사항</label> |
161 | -<i class="glyphicon glyphicon-pencil"></i></span> | 146 | + <div class="col-md-4 inputGroupContainer"> |
147 | + <div class="input-group"> | ||
148 | + <span class="input-group-addon"><i class="glyphicon glyphicon-pencil"></i></span> | ||
162 | <textarea class="form-control" name="content" placeholder="Project Description" style="width:310px; height:100px;"></textarea> | 149 | <textarea class="form-control" name="content" placeholder="Project Description" style="width:310px; height:100px;"></textarea> |
163 | </div> | 150 | </div> |
164 | </div> | 151 | </div> | ... | ... |
-
Please register or login to post a comment