jekyll-theme-ici3d 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (330) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +50 -0
  4. data/_data/publications/pulliam2012.yml +12 -0
  5. data/_data/team/ackley.yml +25 -0
  6. data/_data/team/are.yml +22 -0
  7. data/_data/team/beauclair.yml +14 -0
  8. data/_data/team/bekele.yml +14 -0
  9. data/_data/team/bellan.yml +46 -0
  10. data/_data/team/bolton.yml +33 -0
  11. data/_data/team/borchering.yml +65 -0
  12. data/_data/team/brook.yml +15 -0
  13. data/_data/team/brown.yml +18 -0
  14. data/_data/team/bruce.yml +26 -0
  15. data/_data/team/brucePA.yml +9 -0
  16. data/_data/team/deleo.yml +49 -0
  17. data/_data/team/delva.yml +15 -0
  18. data/_data/team/dushoff.yml +52 -0
  19. data/_data/team/ervin.yml +10 -0
  20. data/_data/team/faikah.yml +26 -0
  21. data/_data/team/grebe.yml +36 -0
  22. data/_data/team/hargrove.yml +36 -0
  23. data/_data/team/hitchcock.yml +10 -0
  24. data/_data/team/hladish.yml +45 -0
  25. data/_data/team/january.yml +9 -0
  26. data/_data/team/kassanjee.yml +20 -0
  27. data/_data/team/li.yml +45 -0
  28. data/_data/team/lord.yml +20 -0
  29. data/_data/team/marx.yml +14 -0
  30. data/_data/team/mcintosh.yml +20 -0
  31. data/_data/team/mhlanga.yml +22 -0
  32. data/_data/team/mthombothi.yml +23 -0
  33. data/_data/team/mugwagwa.yml +18 -0
  34. data/_data/team/mwangi.yml +24 -0
  35. data/_data/team/mwebaze.yml +20 -0
  36. data/_data/team/ndifon.yml +18 -0
  37. data/_data/team/ngonghala.yml +30 -0
  38. data/_data/team/nondi.yml +14 -0
  39. data/_data/team/nyamai.yml +18 -0
  40. data/_data/team/october.yml +9 -0
  41. data/_data/team/paradza.yml +19 -0
  42. data/_data/team/pearson.yml +58 -0
  43. data/_data/team/porco.yml +14 -0
  44. data/_data/team/pulliam.yml +51 -0
  45. data/_data/team/reiner.yml +18 -0
  46. data/_data/team/scheepers.yml +9 -0
  47. data/_data/team/scott.yml +51 -0
  48. data/_data/team/sempa.yml +32 -0
  49. data/_data/team/sikhondze.yml +14 -0
  50. data/_data/team/template.yml +18 -0
  51. data/_data/team/ujeneza.yml +38 -0
  52. data/_data/team/vanschalkwyk.yml +32 -0
  53. data/_data/team/welte.yml +18 -0
  54. data/_data/team/williams.yml +28 -0
  55. data/_data/team/ying.yml +21 -0
  56. data/_includes/MedPH/.DS_Store +0 -0
  57. data/_includes/MedPH/assignments.md +42 -0
  58. data/_includes/MedPH/assignmentsStandard.md +74 -0
  59. data/_includes/MedPH/computerlabs.md +38 -0
  60. data/_includes/MedPH/computerlabsStandard.md +38 -0
  61. data/_includes/MedPH/lectures.md +12 -0
  62. data/_includes/MedPH/references.md +71 -0
  63. data/_includes/MedPH/schedule.md +85 -0
  64. data/_includes/MedPH/scheduleStandard.md +93 -0
  65. data/_includes/bottomTable.html +5 -0
  66. data/_includes/centerTable.html +5 -0
  67. data/_includes/clinicNavbar.html +46 -0
  68. data/_includes/contact.html +12 -0
  69. data/_includes/directors.html +47 -0
  70. data/_includes/footer.html +23 -0
  71. data/_includes/head.html +28 -0
  72. data/_includes/header.html +31 -0
  73. data/_includes/hero.html +14 -0
  74. data/_includes/index.md +9 -0
  75. data/_includes/mission.html +13 -0
  76. data/_includes/navStructure.html +70 -0
  77. data/_includes/navbar.html +65 -0
  78. data/_includes/outputs.html +74 -0
  79. data/_includes/partners.html +75 -0
  80. data/_includes/profile.html +67 -0
  81. data/_includes/publications/faculty.md +13 -0
  82. data/_includes/publications/instructional.md +5 -0
  83. data/_includes/publications/participant.md +33 -0
  84. data/_includes/talk.html +12 -0
  85. data/_includes/topTable.html +6 -0
  86. data/_includes/upcoming.html +43 -0
  87. data/_layouts/clinic.liquid +43 -0
  88. data/_layouts/example.liquid +601 -0
  89. data/_layouts/main.liquid +34 -0
  90. data/_layouts/medph.page.liquid +60 -0
  91. data/_layouts/page.liquid +41 -0
  92. data/_layouts/people.page.liquid +27 -0
  93. data/_layouts/profile.liquid +44 -0
  94. data/_layouts/redirect.liquid +15 -0
  95. data/_layouts/talk.liquid +42 -0
  96. data/assets/css/academicons.css +249 -0
  97. data/assets/css/academicons.min.css +1 -0
  98. data/assets/css/bootstrap.css +6760 -0
  99. data/assets/css/bootstrap.css.map +1 -0
  100. data/assets/css/bootstrap.min.css +6 -0
  101. data/assets/css/font-awesome.css +2086 -0
  102. data/assets/css/font-awesome.min.css +4 -0
  103. data/assets/css/ie.css +5 -0
  104. data/assets/css/main-one-page.css +6433 -0
  105. data/assets/css/main.css +7160 -0
  106. data/assets/css/my-custom-styles.css +14 -0
  107. data/assets/css/shop-main.css +3117 -0
  108. data/assets/css/skins/brown.css +299 -0
  109. data/assets/css/skins/deepskyblue.css +299 -0
  110. data/assets/css/skins/goldenrod.css +299 -0
  111. data/assets/css/skins/ici3dBlue.css +229 -0
  112. data/assets/css/skins/ici3dBlue.css.map +7 -0
  113. data/assets/css/skins/ici3dIndigo.css +229 -0
  114. data/assets/css/skins/ici3dIndigo.css.map +7 -0
  115. data/assets/css/skins/indianred.css +299 -0
  116. data/assets/css/skins/lightgreen.css +299 -0
  117. data/assets/css/skins/orange.css +299 -0
  118. data/assets/css/skins/seagreen.css +299 -0
  119. data/assets/css/skins/slategray.css +299 -0
  120. data/assets/fonts/academicons.eot +0 -0
  121. data/assets/fonts/academicons.svg +66 -0
  122. data/assets/fonts/academicons.ttf +0 -0
  123. data/assets/fonts/academicons.woff +0 -0
  124. data/assets/fonts/fontawesome-webfont.eot +0 -0
  125. data/assets/fonts/fontawesome-webfont.svg +655 -0
  126. data/assets/fonts/fontawesome-webfont.ttf +0 -0
  127. data/assets/fonts/fontawesome-webfont.woff +0 -0
  128. data/assets/fonts/fontawesome-webfont.woff2 +0 -0
  129. data/assets/fonts/glyphicons-halflings-regular.eot +0 -0
  130. data/assets/fonts/glyphicons-halflings-regular.svg +288 -0
  131. data/assets/fonts/glyphicons-halflings-regular.ttf +0 -0
  132. data/assets/fonts/glyphicons-halflings-regular.woff +0 -0
  133. data/assets/fonts/glyphicons-halflings-regular.woff2 +0 -0
  134. data/assets/ico/favicon.ico +0 -0
  135. data/assets/ico/favicon.png +0 -0
  136. data/assets/ico/ici3d114x114.png +0 -0
  137. data/assets/ico/ici3d144x144.png +0 -0
  138. data/assets/ico/ici3d57x57.png +0 -0
  139. data/assets/ico/ici3d72x72.png +0 -0
  140. data/assets/img/8hearts.png +0 -0
  141. data/assets/img/MMED2015_tutorials.jpg +0 -0
  142. data/assets/img/badge.png +0 -0
  143. data/assets/img/blog/balloon-med.jpg +0 -0
  144. data/assets/img/blog/balloon.jpg +0 -0
  145. data/assets/img/blog/buildings-med.jpg +0 -0
  146. data/assets/img/blog/buildings.jpg +0 -0
  147. data/assets/img/blog/people-med.jpg +0 -0
  148. data/assets/img/blog/people.jpg +0 -0
  149. data/assets/img/bx_loader.gif +0 -0
  150. data/assets/img/clients/logo1.png +0 -0
  151. data/assets/img/clients/logo2.png +0 -0
  152. data/assets/img/clients/logo3.png +0 -0
  153. data/assets/img/clients/logo4.png +0 -0
  154. data/assets/img/clients/logo5.png +0 -0
  155. data/assets/img/flags/China.png +0 -0
  156. data/assets/img/flags/Germany.png +0 -0
  157. data/assets/img/flags/Japan.png +0 -0
  158. data/assets/img/flags/South-Africa.png +0 -0
  159. data/assets/img/flags/United-Kingdom.png +0 -0
  160. data/assets/img/flags/United-States.png +0 -0
  161. data/assets/img/free.png +0 -0
  162. data/assets/img/fullscreen-bg.jpg +0 -0
  163. data/assets/img/gray_jean.png +0 -0
  164. data/assets/img/hero-unit-bg.png +0 -0
  165. data/assets/img/hero-unit-obj.png +0 -0
  166. data/assets/img/hero-unit-obj2.png +0 -0
  167. data/assets/img/hero-unit-obj3.png +0 -0
  168. data/assets/img/intro-img.png +0 -0
  169. data/assets/img/location-pin.png +0 -0
  170. data/assets/img/logo/ici3d-logo-light.png +0 -0
  171. data/assets/img/logo/ici3d-logo-nav.png +0 -0
  172. data/assets/img/logo/ici3d-logo-white.png +0 -0
  173. data/assets/img/logo/ici3d-logo-white_v2.png +0 -0
  174. data/assets/img/logo/ici3d-logo-white_v3.png +0 -0
  175. data/assets/img/logo/repute-logo-light-brown.png +0 -0
  176. data/assets/img/logo/repute-logo-light-deepskyblue.png +0 -0
  177. data/assets/img/logo/repute-logo-light-goldenrod.png +0 -0
  178. data/assets/img/logo/repute-logo-light-indianred.png +0 -0
  179. data/assets/img/logo/repute-logo-light-lightgreen.png +0 -0
  180. data/assets/img/logo/repute-logo-light-orange.png +0 -0
  181. data/assets/img/logo/repute-logo-light-seagreen.png +0 -0
  182. data/assets/img/logo/repute-logo-light-slategray.png +0 -0
  183. data/assets/img/logo/repute-logo-light.png +0 -0
  184. data/assets/img/logo/repute-logo-nav-brown.png +0 -0
  185. data/assets/img/logo/repute-logo-nav-deepskyblue.png +0 -0
  186. data/assets/img/logo/repute-logo-nav-goldenrod.png +0 -0
  187. data/assets/img/logo/repute-logo-nav-indianred.png +0 -0
  188. data/assets/img/logo/repute-logo-nav-light.png +0 -0
  189. data/assets/img/logo/repute-logo-nav-lightgreen.png +0 -0
  190. data/assets/img/logo/repute-logo-nav-orange.png +0 -0
  191. data/assets/img/logo/repute-logo-nav-seagreen.png +0 -0
  192. data/assets/img/logo/repute-logo-nav-slategray.png +0 -0
  193. data/assets/img/logo/repute-logo-nav.png +0 -0
  194. data/assets/img/mentors/are.jpg +0 -0
  195. data/assets/img/mentors/bolton.jpg +0 -0
  196. data/assets/img/mentors/brown.jpg +0 -0
  197. data/assets/img/mentors/kassanjee.jpg +0 -0
  198. data/assets/img/mentors/mhlanga.jpg +0 -0
  199. data/assets/img/mentors/nyamai.png +0 -0
  200. data/assets/img/news/featured-news.png +0 -0
  201. data/assets/img/news/news1.png +0 -0
  202. data/assets/img/news/news2.png +0 -0
  203. data/assets/img/news/news3.png +0 -0
  204. data/assets/img/news/news4.png +0 -0
  205. data/assets/img/news/news5.png +0 -0
  206. data/assets/img/other/snoep.jpg +0 -0
  207. data/assets/img/page-header-bg.png +0 -0
  208. data/assets/img/participants/SempaJB.jpg +0 -0
  209. data/assets/img/partners/AIMS-SA.jpg +0 -0
  210. data/assets/img/partners/CEMA_UN.pdf +0 -0
  211. data/assets/img/partners/CEMA_UN.png +0 -0
  212. data/assets/img/partners/CIDID.png +0 -0
  213. data/assets/img/partners/CIDID_long.png +0 -0
  214. data/assets/img/partners/Colby.png +0 -0
  215. data/assets/img/partners/MIDAS.png +0 -0
  216. data/assets/img/partners/McMaster.jpg +0 -0
  217. data/assets/img/partners/PSU.png +0 -0
  218. data/assets/img/partners/Proctor.png +0 -0
  219. data/assets/img/partners/SACEMA_228.png +0 -0
  220. data/assets/img/partners/UCSF.png +0 -0
  221. data/assets/img/partners/UF.png +0 -0
  222. data/assets/img/partners/UGA_228.png +0 -0
  223. data/assets/img/pattern-geometry.png +0 -0
  224. data/assets/img/portfolio/800x500/work1.png +0 -0
  225. data/assets/img/portfolio/800x500/work2.png +0 -0
  226. data/assets/img/portfolio/800x500/work3.png +0 -0
  227. data/assets/img/portfolio/800x500/work4.png +0 -0
  228. data/assets/img/portfolio/800x500/work5.png +0 -0
  229. data/assets/img/portfolio/800x500/work6.png +0 -0
  230. data/assets/img/portfolio/800x500/work7.png +0 -0
  231. data/assets/img/portfolio/800x500/work8.png +0 -0
  232. data/assets/img/portfolio/800x800/work1.png +0 -0
  233. data/assets/img/portfolio/800x800/work2.png +0 -0
  234. data/assets/img/portfolio/800x800/work3.png +0 -0
  235. data/assets/img/portfolio/800x800/work4.png +0 -0
  236. data/assets/img/portfolio/800x800/work5.png +0 -0
  237. data/assets/img/portfolio/800x800/work6.png +0 -0
  238. data/assets/img/portfolio/800x800/work7.png +0 -0
  239. data/assets/img/portfolio/800x800/work8.png +0 -0
  240. data/assets/img/portfolio/single/bicycle.jpg +0 -0
  241. data/assets/img/portfolio/single/blurred_lines.jpg +0 -0
  242. data/assets/img/portfolio/single/edge.jpg +0 -0
  243. data/assets/img/scholars/ackley.jpg +0 -0
  244. data/assets/img/scholars/beauclair.jpg +0 -0
  245. data/assets/img/scholars/beauclair.png +0 -0
  246. data/assets/img/scholars/bekele.jpg +0 -0
  247. data/assets/img/scholars/lord.jpg +0 -0
  248. data/assets/img/scholars/marx.jpg +0 -0
  249. data/assets/img/scholars/mcintosh.jpg +0 -0
  250. data/assets/img/scholars/mwebaze.jpg +0 -0
  251. data/assets/img/scholars/nondi.jpg +0 -0
  252. data/assets/img/scholars/sempa.jpg +0 -0
  253. data/assets/img/scholars/ying.jpg +0 -0
  254. data/assets/img/sliders/full-slide-color.jpg +0 -0
  255. data/assets/img/sliders/full-slide-color2.jpg +0 -0
  256. data/assets/img/sliders/full-slide-color3.jpg +0 -0
  257. data/assets/img/sliders/full-slide.jpg +0 -0
  258. data/assets/img/sliders/full-slide2.jpg +0 -0
  259. data/assets/img/sliders/full-slide3.jpg +0 -0
  260. data/assets/img/sliders/slider1-h500.png +0 -0
  261. data/assets/img/sliders/slider2-h500.png +0 -0
  262. data/assets/img/sliders/slider3-h500.png +0 -0
  263. data/assets/img/team/bellan.jpg +0 -0
  264. data/assets/img/team/borchering.jpg +0 -0
  265. data/assets/img/team/brook.jpg +0 -0
  266. data/assets/img/team/bruce.jpg +0 -0
  267. data/assets/img/team/deleo.jpg +0 -0
  268. data/assets/img/team/delva.jpg +0 -0
  269. data/assets/img/team/dushoff.jpg +0 -0
  270. data/assets/img/team/ervin.jpg +0 -0
  271. data/assets/img/team/grebe.jpg +0 -0
  272. data/assets/img/team/hargrove.jpg +0 -0
  273. data/assets/img/team/hitchcock.jpg +0 -0
  274. data/assets/img/team/hladish.jpg +0 -0
  275. data/assets/img/team/january.jpg +0 -0
  276. data/assets/img/team/li.jpg +0 -0
  277. data/assets/img/team/mthombothi.jpg +0 -0
  278. data/assets/img/team/mugwagwa.jpg +0 -0
  279. data/assets/img/team/mwangi.png +0 -0
  280. data/assets/img/team/ndifon.jpg +0 -0
  281. data/assets/img/team/ngonghala.jpg +0 -0
  282. data/assets/img/team/october.jpg +0 -0
  283. data/assets/img/team/paradza.jpg +0 -0
  284. data/assets/img/team/pearson.jpg +0 -0
  285. data/assets/img/team/porco.jpg +0 -0
  286. data/assets/img/team/pulliam.jpg +0 -0
  287. data/assets/img/team/reiner.jpg +0 -0
  288. data/assets/img/team/scheepers.jpg +0 -0
  289. data/assets/img/team/scott.jpg +0 -0
  290. data/assets/img/team/ujeneza.jpg +0 -0
  291. data/assets/img/team/vanschalkwyk.jpg +0 -0
  292. data/assets/img/team/welte.jpg +0 -0
  293. data/assets/img/team/williams.jpg +0 -0
  294. data/assets/img/testimonial-bg.png +0 -0
  295. data/assets/img/transmission.png +0 -0
  296. data/assets/js/bootstrap.js +2363 -0
  297. data/assets/js/bootstrap.min.js +7 -0
  298. data/assets/js/jquery-2.1.1.min.js +4 -0
  299. data/assets/js/plugins/autohidingnavbar/jquery.bootstrap-autohidingnavbar.js +213 -0
  300. data/assets/js/plugins/autohidingnavbar/jquery.bootstrap-autohidingnavbar.min.js +9 -0
  301. data/assets/js/plugins/bootstrap-datepicker/bootstrap-datepicker.js +474 -0
  302. data/assets/js/plugins/bootstrap-multiselect/bootstrap-multiselect.js +994 -0
  303. data/assets/js/plugins/daterangepicker/daterangepicker.js +868 -0
  304. data/assets/js/plugins/easing/jquery.easing.js +205 -0
  305. data/assets/js/plugins/easing/jquery.easing.min.js +71 -0
  306. data/assets/js/plugins/fitvids/jquery.fitvids.js +83 -0
  307. data/assets/js/plugins/google-map/google-map.js +160 -0
  308. data/assets/js/plugins/isotope/isotope.pkgd.js +4049 -0
  309. data/assets/js/plugins/isotope/isotope.pkgd.min.js +8 -0
  310. data/assets/js/plugins/jquery-cycle/jquery.cycle.all.js +1543 -0
  311. data/assets/js/plugins/jquery-easypiechart/jquery.easypiechart.js +359 -0
  312. data/assets/js/plugins/jquery-easypiechart/jquery.easypiechart.min.js +9 -0
  313. data/assets/js/plugins/jquery-maskedinput/jquery.masked-input.js +338 -0
  314. data/assets/js/plugins/jquery-maskedinput/jquery.masked-input.min.js +7 -0
  315. data/assets/js/plugins/maximage/jquery.maximage.js +697 -0
  316. data/assets/js/plugins/maximage/jquery.maximage.min.js +4 -0
  317. data/assets/js/plugins/moment/moment.js +1662 -0
  318. data/assets/js/plugins/moment/moment.min.js +6 -0
  319. data/assets/js/plugins/parsley-validation/parsley.js +2074 -0
  320. data/assets/js/plugins/parsley-validation/parsley.min.js +9 -0
  321. data/assets/js/plugins/scrollto/jquery.localscroll-1.2.7-min.js +9 -0
  322. data/assets/js/plugins/scrollto/jquery.localscroll-1.2.7.js +133 -0
  323. data/assets/js/plugins/scrollto/jquery.scrollTo-1.4.3.1-min.js +7 -0
  324. data/assets/js/plugins/scrollto/jquery.scrollTo-1.4.3.1.js +218 -0
  325. data/assets/js/plugins/slick/slick.js +2643 -0
  326. data/assets/js/plugins/slick/slick.min.js +18 -0
  327. data/assets/js/plugins/stellar/jquery.stellar.js +660 -0
  328. data/assets/js/plugins/stellar/jquery.stellar.min.js +2 -0
  329. data/assets/js/repute-scripts.js +539 -0
  330. metadata +385 -0
@@ -0,0 +1,868 @@
1
+ /**
2
+ * @version: 1.2
3
+ * @author: Dan Grossman http://www.dangrossman.info/
4
+ * @date: 2013-07-25
5
+ * @copyright: Copyright (c) 2012-2013 Dan Grossman. All rights reserved.
6
+ * @license: Licensed under Apache License v2.0. See http://www.apache.org/licenses/LICENSE-2.0
7
+ * @website: http://www.improvely.com/
8
+ */
9
+ !function ($) {
10
+
11
+ var DateRangePicker = function (element, options, cb) {
12
+ var hasOptions = typeof options == 'object';
13
+ var localeObject;
14
+
15
+ //option defaults
16
+
17
+ this.startDate = moment().startOf('day');
18
+ this.endDate = moment().startOf('day');
19
+ this.minDate = false;
20
+ this.maxDate = false;
21
+ this.dateLimit = false;
22
+
23
+ this.showDropdowns = false;
24
+ this.showWeekNumbers = false;
25
+ this.timePicker = false;
26
+ this.timePickerIncrement = 30;
27
+ this.timePicker12Hour = true;
28
+ this.ranges = {};
29
+ this.opens = 'right';
30
+
31
+ this.buttonClasses = ['btn', 'btn-small'];
32
+ this.applyClass = 'btn-success';
33
+ this.cancelClass = 'btn-default';
34
+
35
+ this.format = 'MM/DD/YYYY';
36
+ this.separator = ' - ';
37
+
38
+ this.locale = {
39
+ applyLabel: 'Apply',
40
+ cancelLabel: 'Cancel',
41
+ fromLabel: 'From',
42
+ toLabel: 'To',
43
+ weekLabel: 'W',
44
+ customRangeLabel: 'Custom Range',
45
+ daysOfWeek: moment()._lang._weekdaysMin.slice(),
46
+ monthNames: moment()._lang._monthsShort.slice(),
47
+ firstDay: 0
48
+ };
49
+
50
+ this.cb = function () { };
51
+
52
+ // by default, the daterangepicker element is placed at the bottom of HTML body
53
+ this.parentEl = 'body';
54
+
55
+ //element that triggered the date range picker
56
+ this.element = $(element);
57
+
58
+ if (this.element.hasClass('pull-right'))
59
+ this.opens = 'left';
60
+
61
+ if (this.element.is('input')) {
62
+ this.element.on({
63
+ click: $.proxy(this.show, this),
64
+ focus: $.proxy(this.show, this)
65
+ });
66
+ } else {
67
+ this.element.on('click', $.proxy(this.show, this));
68
+ }
69
+
70
+ localeObject = this.locale;
71
+
72
+ if (hasOptions) {
73
+ if (typeof options.locale == 'object') {
74
+ $.each(localeObject, function (property, value) {
75
+ localeObject[property] = options.locale[property] || value;
76
+ });
77
+ }
78
+
79
+ if (options.applyClass) {
80
+ this.applyClass = options.applyClass;
81
+ }
82
+
83
+ if (options.cancelClass) {
84
+ this.cancelClass = options.cancelClass;
85
+ }
86
+ }
87
+
88
+ var DRPTemplate = '<div class="daterangepicker dropdown-menu">' +
89
+ '<div class="calendar left"></div>' +
90
+ '<div class="calendar right"></div>' +
91
+ '<div class="ranges">' +
92
+ '<div class="range_inputs">' +
93
+ '<div class="daterangepicker_start_input" style="float: left">' +
94
+ '<label for="daterangepicker_start">' + this.locale.fromLabel + '</label>' +
95
+ '<input class="input-mini" type="text" name="daterangepicker_start" value="" disabled="disabled" />' +
96
+ '</div>' +
97
+ '<div class="daterangepicker_end_input" style="float: left; padding-left: 11px">' +
98
+ '<label for="daterangepicker_end">' + this.locale.toLabel + '</label>' +
99
+ '<input class="input-mini" type="text" name="daterangepicker_end" value="" disabled="disabled" />' +
100
+ '</div>' +
101
+ '<button class="' + this.applyClass + ' applyBtn" disabled="disabled">' + this.locale.applyLabel + '</button>&nbsp;' +
102
+ '<button class="' + this.cancelClass + ' cancelBtn">' + this.locale.cancelLabel + '</button>' +
103
+ '</div>' +
104
+ '</div>' +
105
+ '</div>';
106
+
107
+ this.parentEl = (hasOptions && options.parentEl && $(options.parentEl)) || $(this.parentEl);
108
+ //the date range picker
109
+ this.container = $(DRPTemplate).appendTo(this.parentEl);
110
+
111
+ if (hasOptions) {
112
+
113
+ if (typeof options.format == 'string')
114
+ this.format = options.format;
115
+
116
+ if (typeof options.separator == 'string')
117
+ this.separator = options.separator;
118
+
119
+ if (typeof options.startDate == 'string')
120
+ this.startDate = moment(options.startDate, this.format);
121
+
122
+ if (typeof options.endDate == 'string')
123
+ this.endDate = moment(options.endDate, this.format);
124
+
125
+ if (typeof options.minDate == 'string')
126
+ this.minDate = moment(options.minDate, this.format);
127
+
128
+ if (typeof options.maxDate == 'string')
129
+ this.maxDate = moment(options.maxDate, this.format);
130
+
131
+ if (typeof options.startDate == 'object')
132
+ this.startDate = moment(options.startDate);
133
+
134
+ if (typeof options.endDate == 'object')
135
+ this.endDate = moment(options.endDate);
136
+
137
+ if (typeof options.minDate == 'object')
138
+ this.minDate = moment(options.minDate);
139
+
140
+ if (typeof options.maxDate == 'object')
141
+ this.maxDate = moment(options.maxDate);
142
+
143
+ if (typeof options.ranges == 'object') {
144
+ for (var range in options.ranges) {
145
+
146
+ var start = moment(options.ranges[range][0]);
147
+ var end = moment(options.ranges[range][1]);
148
+
149
+ // If we have a min/max date set, bound this range
150
+ // to it, but only if it would otherwise fall
151
+ // outside of the min/max.
152
+ if (this.minDate && start.isBefore(this.minDate))
153
+ start = moment(this.minDate);
154
+
155
+ if (this.maxDate && end.isAfter(this.maxDate))
156
+ end = moment(this.maxDate);
157
+
158
+ // If the end of the range is before the minimum (if min is set) OR
159
+ // the start of the range is after the max (also if set) don't display this
160
+ // range option.
161
+ if ((this.minDate && end.isBefore(this.minDate)) || (this.maxDate && start.isAfter(this.maxDate))) {
162
+ continue;
163
+ }
164
+
165
+ this.ranges[range] = [start, end];
166
+ }
167
+
168
+ var list = '<ul>';
169
+ for (var range in this.ranges) {
170
+ list += '<li>' + range + '</li>';
171
+ }
172
+ list += '<li>' + this.locale.customRangeLabel + '</li>';
173
+ list += '</ul>';
174
+ this.container.find('.ranges').prepend(list);
175
+ }
176
+
177
+ if (typeof options.dateLimit == 'object')
178
+ this.dateLimit = options.dateLimit;
179
+
180
+ // update day names order to firstDay
181
+ if (typeof options.locale == 'object') {
182
+ if (typeof options.locale.firstDay == 'number') {
183
+ this.locale.firstDay = options.locale.firstDay;
184
+ var iterator = options.locale.firstDay;
185
+ while (iterator > 0) {
186
+ this.locale.daysOfWeek.push(this.locale.daysOfWeek.shift());
187
+ iterator--;
188
+ }
189
+ }
190
+ }
191
+
192
+ if (typeof options.opens == 'string')
193
+ this.opens = options.opens;
194
+
195
+ if (typeof options.showWeekNumbers == 'boolean') {
196
+ this.showWeekNumbers = options.showWeekNumbers;
197
+ }
198
+
199
+ if (typeof options.buttonClasses == 'string') {
200
+ this.buttonClasses = [options.buttonClasses];
201
+ }
202
+
203
+ if (typeof options.buttonClasses == 'object') {
204
+ this.buttonClasses = options.buttonClasses;
205
+ }
206
+
207
+ if (typeof options.showDropdowns == 'boolean') {
208
+ this.showDropdowns = options.showDropdowns;
209
+ }
210
+
211
+ if (typeof options.timePicker == 'boolean') {
212
+ this.timePicker = options.timePicker;
213
+ }
214
+
215
+ if (typeof options.timePickerIncrement == 'number') {
216
+ this.timePickerIncrement = options.timePickerIncrement;
217
+ }
218
+
219
+ if (typeof options.timePicker12Hour == 'boolean') {
220
+ this.timePicker12Hour = options.timePicker12Hour;
221
+ }
222
+
223
+ }
224
+
225
+ if (!this.timePicker) {
226
+ this.startDate = this.startDate.startOf('day');
227
+ this.endDate = this.endDate.startOf('day');
228
+ }
229
+
230
+ //apply CSS classes to buttons
231
+ var c = this.container;
232
+ $.each(this.buttonClasses, function (idx, val) {
233
+ c.find('button').addClass(val);
234
+ });
235
+
236
+ if (this.opens == 'right') {
237
+ //swap calendar positions
238
+ var left = this.container.find('.calendar.left');
239
+ var right = this.container.find('.calendar.right');
240
+ left.removeClass('left').addClass('right');
241
+ right.removeClass('right').addClass('left');
242
+ }
243
+
244
+ if (typeof options == 'undefined' || typeof options.ranges == 'undefined') {
245
+ this.container.find('.calendar').show();
246
+ this.move();
247
+ }
248
+
249
+ if (typeof cb == 'function')
250
+ this.cb = cb;
251
+
252
+ this.container.addClass('opens' + this.opens);
253
+
254
+ //try parse date if in text input
255
+ if (!hasOptions || (typeof options.startDate == 'undefined' && typeof options.endDate == 'undefined')) {
256
+ if ($(this.element).is('input[type=text]')) {
257
+ var val = $(this.element).val();
258
+ var split = val.split(this.separator);
259
+ var start, end;
260
+ if (split.length == 2) {
261
+ start = moment(split[0], this.format);
262
+ end = moment(split[1], this.format);
263
+ }
264
+ if (start != null && end != null) {
265
+ this.startDate = start;
266
+ this.endDate = end;
267
+ }
268
+ }
269
+ }
270
+
271
+ //state
272
+ this.oldStartDate = this.startDate.clone();
273
+ this.oldEndDate = this.endDate.clone();
274
+
275
+ this.leftCalendar = {
276
+ month: moment([this.startDate.year(), this.startDate.month(), 1, this.startDate.hour(), this.startDate.minute()]),
277
+ calendar: []
278
+ };
279
+
280
+ this.rightCalendar = {
281
+ month: moment([this.endDate.year(), this.endDate.month(), 1, this.endDate.hour(), this.endDate.minute()]),
282
+ calendar: []
283
+ };
284
+
285
+ //event listeners
286
+ this.container.on('mousedown', $.proxy(this.mousedown, this));
287
+
288
+ this.container.find('.calendar')
289
+ .on('click', '.prev', $.proxy(this.clickPrev, this))
290
+ .on('click', '.next', $.proxy(this.clickNext, this))
291
+ .on('click', 'td.available', $.proxy(this.clickDate, this))
292
+ .on('mouseenter', 'td.available', $.proxy(this.enterDate, this))
293
+ .on('mouseleave', 'td.available', $.proxy(this.updateFormInputs, this))
294
+ .on('change', 'select.yearselect', $.proxy(this.updateMonthYear, this))
295
+ .on('change', 'select.monthselect', $.proxy(this.updateMonthYear, this))
296
+ .on('change', 'select.hourselect,select.minuteselect,select.ampmselect', $.proxy(this.updateTime, this));
297
+
298
+ this.container.find('.ranges')
299
+ .on('click', 'button.applyBtn', $.proxy(this.clickApply, this))
300
+ .on('click', 'button.cancelBtn', $.proxy(this.clickCancel, this))
301
+ .on('click', '.daterangepicker_start_input,.daterangepicker_end_input', $.proxy(this.showCalendars, this))
302
+ .on('click', 'li', $.proxy(this.clickRange, this))
303
+ .on('mouseenter', 'li', $.proxy(this.enterRange, this))
304
+ .on('mouseleave', 'li', $.proxy(this.updateFormInputs, this));
305
+
306
+ this.element.on('keyup', $.proxy(this.updateFromControl, this));
307
+
308
+ this.updateView();
309
+ this.updateCalendars();
310
+
311
+ };
312
+
313
+ DateRangePicker.prototype = {
314
+
315
+ constructor: DateRangePicker,
316
+
317
+ mousedown: function (e) {
318
+ e.stopPropagation();
319
+ },
320
+
321
+ updateView: function () {
322
+ this.leftCalendar.month.month(this.startDate.month()).year(this.startDate.year());
323
+ this.rightCalendar.month.month(this.endDate.month()).year(this.endDate.year());
324
+ this.updateFormInputs();
325
+ },
326
+
327
+ updateFormInputs: function () {
328
+ this.container.find('input[name=daterangepicker_start]').val(this.startDate.format(this.format));
329
+ this.container.find('input[name=daterangepicker_end]').val(this.endDate.format(this.format));
330
+
331
+ if (this.startDate.isSame(this.endDate) || this.startDate.isBefore(this.endDate)) {
332
+ this.container.find('button.applyBtn').removeAttr('disabled');
333
+ } else {
334
+ this.container.find('button.applyBtn').attr('disabled', 'disabled');
335
+ }
336
+ },
337
+
338
+ updateFromControl: function () {
339
+ if (!this.element.is('input')) return;
340
+ if (!this.element.val().length) return;
341
+
342
+ var dateString = this.element.val().split(this.separator);
343
+ var start = moment(dateString[0], this.format);
344
+ var end = moment(dateString[1], this.format);
345
+
346
+ if (start == null || end == null) return;
347
+ if (end.isBefore(start)) return;
348
+
349
+ this.oldStartDate = this.startDate.clone();
350
+ this.oldEndDate = this.endDate.clone();
351
+
352
+ this.startDate = start;
353
+ this.endDate = end;
354
+
355
+ if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))
356
+ this.notify();
357
+
358
+ this.updateCalendars();
359
+ },
360
+
361
+ notify: function () {
362
+ this.updateView();
363
+ this.cb(this.startDate, this.endDate);
364
+ },
365
+
366
+ move: function () {
367
+ var parentOffset = {
368
+ top: this.parentEl.offset().top - (this.parentEl.is('body') ? 0 : this.parentEl.scrollTop()),
369
+ left: this.parentEl.offset().left - (this.parentEl.is('body') ? 0 : this.parentEl.scrollLeft())
370
+ };
371
+ if (this.opens == 'left') {
372
+ this.container.css({
373
+ top: this.element.offset().top + this.element.outerHeight() - parentOffset.top,
374
+ right: $(window).width() - this.element.offset().left - this.element.outerWidth() - parentOffset.left,
375
+ left: 'auto'
376
+ });
377
+ if (this.container.offset().left < 0) {
378
+ this.container.css({
379
+ right: 'auto',
380
+ left: 9
381
+ });
382
+ }
383
+ } else {
384
+ this.container.css({
385
+ top: this.element.offset().top + this.element.outerHeight() - parentOffset.top,
386
+ left: this.element.offset().left - parentOffset.left,
387
+ right: 'auto'
388
+ });
389
+ if (this.container.offset().left + this.container.outerWidth() > $(window).width()) {
390
+ this.container.css({
391
+ left: 'auto',
392
+ right: 0
393
+ });
394
+ }
395
+ }
396
+ },
397
+
398
+ show: function (e) {
399
+ this.container.show();
400
+ this.move();
401
+
402
+ if (e) {
403
+ e.stopPropagation();
404
+ e.preventDefault();
405
+ }
406
+
407
+ $(document).on('mousedown', $.proxy(this.hide, this));
408
+ this.element.trigger('shown', {target: e.target, picker: this});
409
+ },
410
+
411
+ hide: function (e) {
412
+ this.container.hide();
413
+
414
+ if (!this.startDate.isSame(this.oldStartDate) || !this.endDate.isSame(this.oldEndDate))
415
+ this.notify();
416
+
417
+ this.oldStartDate = this.startDate.clone();
418
+ this.oldEndDate = this.endDate.clone();
419
+
420
+ $(document).off('mousedown', this.hide);
421
+ this.element.trigger('hidden', { picker: this });
422
+ },
423
+
424
+ enterRange: function (e) {
425
+ var label = e.target.innerHTML;
426
+ if (label == this.locale.customRangeLabel) {
427
+ this.updateView();
428
+ } else {
429
+ var dates = this.ranges[label];
430
+ this.container.find('input[name=daterangepicker_start]').val(dates[0].format(this.format));
431
+ this.container.find('input[name=daterangepicker_end]').val(dates[1].format(this.format));
432
+ }
433
+ },
434
+
435
+ showCalendars: function() {
436
+ this.container.find('.calendar').show();
437
+ this.move();
438
+ },
439
+
440
+ updateInputText: function() {
441
+ if (this.element.is('input'))
442
+ this.element.val(this.startDate.format(this.format) + this.separator + this.endDate.format(this.format));
443
+ },
444
+
445
+ clickRange: function (e) {
446
+ var label = e.target.innerHTML;
447
+ if (label == this.locale.customRangeLabel) {
448
+ this.showCalendars();
449
+ } else {
450
+ var dates = this.ranges[label];
451
+
452
+ this.startDate = dates[0];
453
+ this.endDate = dates[1];
454
+
455
+ if (!this.timePicker) {
456
+ this.startDate.startOf('day');
457
+ this.endDate.startOf('day');
458
+ }
459
+
460
+ this.leftCalendar.month.month(this.startDate.month()).year(this.startDate.year()).hour(this.startDate.hour()).minute(this.startDate.minute());
461
+ this.rightCalendar.month.month(this.endDate.month()).year(this.endDate.year()).hour(this.endDate.hour()).minute(this.endDate.minute());
462
+ this.updateCalendars();
463
+
464
+ this.updateInputText();
465
+
466
+ this.container.find('.calendar').hide();
467
+ this.hide();
468
+ }
469
+ },
470
+
471
+ clickPrev: function (e) {
472
+ var cal = $(e.target).parents('.calendar');
473
+ if (cal.hasClass('left')) {
474
+ this.leftCalendar.month.subtract('month', 1);
475
+ } else {
476
+ this.rightCalendar.month.subtract('month', 1);
477
+ }
478
+ this.updateCalendars();
479
+ },
480
+
481
+ clickNext: function (e) {
482
+ var cal = $(e.target).parents('.calendar');
483
+ if (cal.hasClass('left')) {
484
+ this.leftCalendar.month.add('month', 1);
485
+ } else {
486
+ this.rightCalendar.month.add('month', 1);
487
+ }
488
+ this.updateCalendars();
489
+ },
490
+
491
+ enterDate: function (e) {
492
+
493
+ var title = $(e.target).attr('data-title');
494
+ var row = title.substr(1, 1);
495
+ var col = title.substr(3, 1);
496
+ var cal = $(e.target).parents('.calendar');
497
+
498
+ if (cal.hasClass('left')) {
499
+ this.container.find('input[name=daterangepicker_start]').val(this.leftCalendar.calendar[row][col].format(this.format));
500
+ } else {
501
+ this.container.find('input[name=daterangepicker_end]').val(this.rightCalendar.calendar[row][col].format(this.format));
502
+ }
503
+
504
+ },
505
+
506
+ clickDate: function (e) {
507
+ var title = $(e.target).attr('data-title');
508
+ var row = title.substr(1, 1);
509
+ var col = title.substr(3, 1);
510
+ var cal = $(e.target).parents('.calendar');
511
+
512
+ if (cal.hasClass('left')) {
513
+ var startDate = this.leftCalendar.calendar[row][col];
514
+ var endDate = this.endDate;
515
+ if (typeof this.dateLimit == 'object') {
516
+ var maxDate = moment(startDate).add(this.dateLimit).startOf('day');
517
+ if (endDate.isAfter(maxDate)) {
518
+ endDate = maxDate;
519
+ }
520
+ }
521
+ } else {
522
+ var startDate = this.startDate;
523
+ var endDate = this.rightCalendar.calendar[row][col];
524
+ if (typeof this.dateLimit == 'object') {
525
+ var minDate = moment(endDate).subtract(this.dateLimit).startOf('day');
526
+ if (startDate.isBefore(minDate)) {
527
+ startDate = minDate;
528
+ }
529
+ }
530
+ }
531
+
532
+ cal.find('td').removeClass('active');
533
+
534
+ if (startDate.isSame(endDate) || startDate.isBefore(endDate)) {
535
+ $(e.target).addClass('active');
536
+ this.startDate = startDate;
537
+ this.endDate = endDate;
538
+ } else if (startDate.isAfter(endDate)) {
539
+ $(e.target).addClass('active');
540
+ this.startDate = startDate;
541
+ this.endDate = moment(startDate).add('day', 1).startOf('day');
542
+ }
543
+
544
+ this.leftCalendar.month.month(this.startDate.month()).year(this.startDate.year());
545
+ this.rightCalendar.month.month(this.endDate.month()).year(this.endDate.year());
546
+ this.updateCalendars();
547
+ },
548
+
549
+ clickApply: function (e) {
550
+ this.updateInputText();
551
+ this.hide();
552
+ },
553
+
554
+ clickCancel: function (e) {
555
+ this.startDate = this.oldStartDate;
556
+ this.endDate = this.oldEndDate;
557
+ this.updateView();
558
+ this.updateCalendars();
559
+ this.hide();
560
+ },
561
+
562
+ updateMonthYear: function (e) {
563
+
564
+ var isLeft = $(e.target).closest('.calendar').hasClass('left');
565
+ var cal = this.container.find('.calendar.left');
566
+ if (!isLeft)
567
+ cal = this.container.find('.calendar.right');
568
+
569
+ // Month must be Number for new moment versions
570
+ var month = parseInt(cal.find('.monthselect').val(), 10);
571
+ var year = cal.find('.yearselect').val();
572
+
573
+ if (isLeft) {
574
+ this.leftCalendar.month.month(month).year(year);
575
+ } else {
576
+ this.rightCalendar.month.month(month).year(year);
577
+ }
578
+
579
+ this.updateCalendars();
580
+
581
+ },
582
+
583
+ updateTime: function(e) {
584
+
585
+ var isLeft = $(e.target).closest('.calendar').hasClass('left');
586
+ var cal = this.container.find('.calendar.left');
587
+ if (!isLeft)
588
+ cal = this.container.find('.calendar.right');
589
+
590
+ var hour = parseInt(cal.find('.hourselect').val());
591
+ var minute = parseInt(cal.find('.minuteselect').val());
592
+
593
+ if (this.timePicker12Hour) {
594
+ var ampm = cal.find('.ampmselect').val();
595
+ if (ampm == 'PM' && hour < 12)
596
+ hour += 12;
597
+ if (ampm == 'AM' && hour == 12)
598
+ hour = 0;
599
+ }
600
+
601
+ if (isLeft) {
602
+ var start = this.startDate.clone();
603
+ start.hour(hour);
604
+ start.minute(minute);
605
+ this.startDate = start;
606
+ this.leftCalendar.month.hour(hour).minute(minute);
607
+ } else {
608
+ var end = this.endDate.clone();
609
+ end.hour(hour);
610
+ end.minute(minute);
611
+ this.endDate = end;
612
+ this.rightCalendar.month.hour(hour).minute(minute);
613
+ }
614
+
615
+ this.updateCalendars();
616
+
617
+ },
618
+
619
+ updateCalendars: function () {
620
+ this.leftCalendar.calendar = this.buildCalendar(this.leftCalendar.month.month(), this.leftCalendar.month.year(), this.leftCalendar.month.hour(), this.leftCalendar.month.minute(), 'left');
621
+ this.rightCalendar.calendar = this.buildCalendar(this.rightCalendar.month.month(), this.rightCalendar.month.year(), this.rightCalendar.month.hour(), this.rightCalendar.month.minute(), 'right');
622
+ this.container.find('.calendar.left').html(this.renderCalendar(this.leftCalendar.calendar, this.startDate, this.minDate, this.maxDate));
623
+ this.container.find('.calendar.right').html(this.renderCalendar(this.rightCalendar.calendar, this.endDate, this.startDate, this.maxDate));
624
+
625
+ this.container.find('.ranges li').removeClass('active');
626
+ var customRange = true;
627
+ var i = 0;
628
+ for (var range in this.ranges) {
629
+ if (this.timePicker) {
630
+ if (this.startDate.isSame(this.ranges[range][0]) && this.endDate.isSame(this.ranges[range][1])) {
631
+ customRange = false;
632
+ this.container.find('.ranges li:eq(' + i + ')').addClass('active');
633
+ }
634
+ } else {
635
+ //ignore times when comparing dates if time picker is not enabled
636
+ if (this.startDate.format('YYYY-MM-DD') == this.ranges[range][0].format('YYYY-MM-DD') && this.endDate.format('YYYY-MM-DD') == this.ranges[range][1].format('YYYY-MM-DD')) {
637
+ customRange = false;
638
+ this.container.find('.ranges li:eq(' + i + ')').addClass('active');
639
+ }
640
+ }
641
+ i++;
642
+ }
643
+ if (customRange)
644
+ this.container.find('.ranges li:last').addClass('active');
645
+ },
646
+
647
+ buildCalendar: function (month, year, hour, minute, side) {
648
+
649
+ var firstDay = moment([year, month, 1]);
650
+ var lastMonth = moment(firstDay).subtract('month', 1).month();
651
+ var lastYear = moment(firstDay).subtract('month', 1).year();
652
+
653
+ var daysInLastMonth = moment([lastYear, lastMonth]).daysInMonth();
654
+
655
+ var dayOfWeek = firstDay.day();
656
+
657
+ //initialize a 6 rows x 7 columns array for the calendar
658
+ var calendar = [];
659
+ for (var i = 0; i < 6; i++) {
660
+ calendar[i] = [];
661
+ }
662
+
663
+ //populate the calendar with date objects
664
+ var startDay = daysInLastMonth - dayOfWeek + this.locale.firstDay + 1;
665
+ if (startDay > daysInLastMonth)
666
+ startDay -= 7;
667
+
668
+ if (dayOfWeek == this.locale.firstDay)
669
+ startDay = daysInLastMonth - 6;
670
+
671
+ var curDate = moment([lastYear, lastMonth, startDay, 12, minute]);
672
+ for (var i = 0, col = 0, row = 0; i < 42; i++, col++, curDate = moment(curDate).add('hour', 24)) {
673
+ if (i > 0 && col % 7 == 0) {
674
+ col = 0;
675
+ row++;
676
+ }
677
+ calendar[row][col] = curDate.clone().hour(hour);
678
+ curDate.hour(12);
679
+ }
680
+
681
+ return calendar;
682
+
683
+ },
684
+
685
+ renderDropdowns: function (selected, minDate, maxDate) {
686
+ var currentMonth = selected.month();
687
+ var monthHtml = '<select class="monthselect">';
688
+ var inMinYear = false;
689
+ var inMaxYear = false;
690
+
691
+ for (var m = 0; m < 12; m++) {
692
+ if ((!inMinYear || m >= minDate.month()) && (!inMaxYear || m <= maxDate.month())) {
693
+ monthHtml += "<option value='" + m + "'" +
694
+ (m === currentMonth ? " selected='selected'" : "") +
695
+ ">" + this.locale.monthNames[m] + "</option>";
696
+ }
697
+ }
698
+ monthHtml += "</select>";
699
+
700
+ var currentYear = selected.year();
701
+ var maxYear = (maxDate && maxDate.year()) || (currentYear + 5);
702
+ var minYear = (minDate && minDate.year()) || (currentYear - 50);
703
+ var yearHtml = '<select class="yearselect">';
704
+
705
+ for (var y = minYear; y <= maxYear; y++) {
706
+ yearHtml += '<option value="' + y + '"' +
707
+ (y === currentYear ? ' selected="selected"' : '') +
708
+ '>' + y + '</option>';
709
+ }
710
+
711
+ yearHtml += '</select>';
712
+
713
+ return monthHtml + yearHtml;
714
+ },
715
+
716
+ renderCalendar: function (calendar, selected, minDate, maxDate) {
717
+
718
+ var html = '<div class="calendar-date">';
719
+ html += '<table class="table-condensed">';
720
+ html += '<thead>';
721
+ html += '<tr>';
722
+
723
+ // add empty cell for week number
724
+ if (this.showWeekNumbers)
725
+ html += '<th></th>';
726
+
727
+ if (!minDate || minDate.isBefore(calendar[1][1])) {
728
+ html += '<th class="prev available"><i class="icon-arrow-left glyphicon glyphicon-arrow-left"></i></th>';
729
+ } else {
730
+ html += '<th></th>';
731
+ }
732
+
733
+ var dateHtml = this.locale.monthNames[calendar[1][1].month()] + calendar[1][1].format(" YYYY");
734
+
735
+ if (this.showDropdowns) {
736
+ dateHtml = this.renderDropdowns(calendar[1][1], minDate, maxDate);
737
+ }
738
+
739
+ html += '<th colspan="5" style="width: auto">' + dateHtml + '</th>';
740
+ if (!maxDate || maxDate.isAfter(calendar[1][1])) {
741
+ html += '<th class="next available"><i class="icon-arrow-right glyphicon glyphicon-arrow-right"></i></th>';
742
+ } else {
743
+ html += '<th></th>';
744
+ }
745
+
746
+ html += '</tr>';
747
+ html += '<tr>';
748
+
749
+ // add week number label
750
+ if (this.showWeekNumbers)
751
+ html += '<th class="week">' + this.locale.weekLabel + '</th>';
752
+
753
+ $.each(this.locale.daysOfWeek, function (index, dayOfWeek) {
754
+ html += '<th>' + dayOfWeek + '</th>';
755
+ });
756
+
757
+ html += '</tr>';
758
+ html += '</thead>';
759
+ html += '<tbody>';
760
+
761
+ for (var row = 0; row < 6; row++) {
762
+ html += '<tr>';
763
+
764
+ // add week number
765
+ if (this.showWeekNumbers)
766
+ html += '<td class="week">' + calendar[row][0].week() + '</td>';
767
+
768
+ for (var col = 0; col < 7; col++) {
769
+ var cname = 'available ';
770
+ cname += (calendar[row][col].month() == calendar[1][1].month()) ? '' : 'off';
771
+
772
+ if ((minDate && calendar[row][col].isBefore(minDate)) || (maxDate && calendar[row][col].isAfter(maxDate))) {
773
+ cname = ' off disabled ';
774
+ } else if (calendar[row][col].format('YYYY-MM-DD') == selected.format('YYYY-MM-DD')) {
775
+ cname += ' active ';
776
+ if (calendar[row][col].format('YYYY-MM-DD') == this.startDate.format('YYYY-MM-DD')) {
777
+ cname += ' start-date ';
778
+ }
779
+ if (calendar[row][col].format('YYYY-MM-DD') == this.endDate.format('YYYY-MM-DD')) {
780
+ cname += ' end-date ';
781
+ }
782
+ } else if (calendar[row][col] >= this.startDate && calendar[row][col] <= this.endDate) {
783
+ cname += ' in-range ';
784
+ if (calendar[row][col].isSame(this.startDate)) { cname += ' start-date '; }
785
+ if (calendar[row][col].isSame(this.endDate)) { cname += ' end-date '; }
786
+ }
787
+
788
+ var title = 'r' + row + 'c' + col;
789
+ html += '<td class="' + cname.replace(/\s+/g, ' ').replace(/^\s?(.*?)\s?$/, '$1') + '" data-title="' + title + '">' + calendar[row][col].date() + '</td>';
790
+ }
791
+ html += '</tr>';
792
+ }
793
+
794
+ html += '</tbody>';
795
+ html += '</table>';
796
+ html += '</div>';
797
+
798
+ if (this.timePicker) {
799
+
800
+ html += '<div class="calendar-time">';
801
+ html += '<select class="hourselect">';
802
+ var start = 0;
803
+ var end = 23;
804
+ var selected_hour = selected.hour();
805
+ if (this.timePicker12Hour) {
806
+ start = 1;
807
+ end = 12;
808
+ if (selected_hour >= 12)
809
+ selected_hour -= 12;
810
+ if (selected_hour == 0)
811
+ selected_hour = 12;
812
+ }
813
+
814
+ for (var i = start; i <= end; i++) {
815
+ if (i == selected_hour) {
816
+ html += '<option value="' + i + '" selected="selected">' + i + '</option>';
817
+ } else {
818
+ html += '<option value="' + i + '">' + i + '</option>';
819
+ }
820
+ }
821
+
822
+ html += '</select> : ';
823
+
824
+ html += '<select class="minuteselect">';
825
+
826
+ for (var i = 0; i < 60; i += this.timePickerIncrement) {
827
+ var num = i;
828
+ if (num < 10)
829
+ num = '0' + num;
830
+ if (i == selected.minute()) {
831
+ html += '<option value="' + i + '" selected="selected">' + num + '</option>';
832
+ } else {
833
+ html += '<option value="' + i + '">' + num + '</option>';
834
+ }
835
+ }
836
+
837
+ html += '</select> ';
838
+
839
+ if (this.timePicker12Hour) {
840
+ html += '<select class="ampmselect">';
841
+ if (selected.hour() >= 12) {
842
+ html += '<option value="AM">AM</option><option value="PM" selected="selected">PM</option>';
843
+ } else {
844
+ html += '<option value="AM" selected="selected">AM</option><option value="PM">PM</option>';
845
+ }
846
+ html += '</select>';
847
+ }
848
+
849
+ html += '</div>';
850
+
851
+ }
852
+
853
+ return html;
854
+
855
+ }
856
+
857
+ };
858
+
859
+ $.fn.daterangepicker = function (options, cb) {
860
+ this.each(function () {
861
+ var el = $(this);
862
+ if (!el.data('daterangepicker'))
863
+ el.data('daterangepicker', new DateRangePicker(el, options, cb));
864
+ });
865
+ return this;
866
+ };
867
+
868
+ }(window.jQuery);