repsheet_visualizer 0.2.3 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (504) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +2 -0
  3. data/Gemfile.lock +8 -6
  4. data/lib/repsheet_visualizer/application/app.rb +51 -5
  5. data/lib/repsheet_visualizer/application/backend.rb +27 -0
  6. data/lib/repsheet_visualizer/application/public/fonts/FontAwesome.otf +0 -0
  7. data/lib/repsheet_visualizer/application/public/fonts/fontawesome-webfont.eot +0 -0
  8. data/lib/repsheet_visualizer/application/public/fonts/fontawesome-webfont.svg +414 -0
  9. data/lib/repsheet_visualizer/application/public/fonts/fontawesome-webfont.ttf +0 -0
  10. data/lib/repsheet_visualizer/application/public/fonts/fontawesome-webfont.woff +0 -0
  11. data/lib/repsheet_visualizer/application/public/fonts/glyphicons-halflings-regular.eot +0 -0
  12. data/lib/repsheet_visualizer/application/public/fonts/glyphicons-halflings-regular.svg +228 -0
  13. data/lib/repsheet_visualizer/application/public/fonts/glyphicons-halflings-regular.ttf +0 -0
  14. data/lib/repsheet_visualizer/application/public/fonts/glyphicons-halflings-regular.woff +0 -0
  15. data/lib/repsheet_visualizer/application/public/img/jquery/handle-vertical.png +0 -0
  16. data/lib/repsheet_visualizer/application/public/img/jquery/handle.png +0 -0
  17. data/lib/repsheet_visualizer/application/public/img/layout/sidebar-bg.png +0 -0
  18. data/lib/repsheet_visualizer/application/public/img/loaders/ajax-loader.gif +0 -0
  19. data/lib/repsheet_visualizer/application/public/img/photos/map.png +0 -0
  20. data/lib/repsheet_visualizer/application/public/js/App.js +372 -0
  21. data/lib/repsheet_visualizer/application/public/js/Login.js +17 -0
  22. data/lib/repsheet_visualizer/application/public/js/demos/buttons.js +7 -0
  23. data/lib/repsheet_visualizer/application/public/js/demos/calendar.js +142 -0
  24. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/area.js +73 -0
  25. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/chart1.js +77 -0
  26. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/chart2.js +70 -0
  27. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/chart3.js +71 -0
  28. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/chart4.js +69 -0
  29. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/donut.js +49 -0
  30. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/horizontal.js +56 -0
  31. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/line.js +76 -0
  32. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/pie.js +50 -0
  33. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/scatter.js +62 -0
  34. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/stacked-area.js +86 -0
  35. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/stacked-horizontal.js +60 -0
  36. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/stacked-vertical.js +75 -0
  37. data/lib/repsheet_visualizer/application/public/js/demos/charts/flot/vertical.js +70 -0
  38. data/lib/repsheet_visualizer/application/public/js/demos/charts/morris/area.js +28 -0
  39. data/lib/repsheet_visualizer/application/public/js/demos/charts/morris/bar.js +29 -0
  40. data/lib/repsheet_visualizer/application/public/js/demos/charts/morris/donut.js +26 -0
  41. data/lib/repsheet_visualizer/application/public/js/demos/charts/morris/line.js +30 -0
  42. data/lib/repsheet_visualizer/application/public/js/demos/dashboard.js +26 -0
  43. data/lib/repsheet_visualizer/application/public/js/demos/form-extended.js +61 -0
  44. data/lib/repsheet_visualizer/application/public/js/demos/popups.js +16 -0
  45. data/lib/repsheet_visualizer/application/public/js/demos/pricing.js +10 -0
  46. data/lib/repsheet_visualizer/application/public/js/demos/sliders.js +77 -0
  47. data/lib/repsheet_visualizer/application/public/js/libs/bootstrap.js +1999 -0
  48. data/lib/repsheet_visualizer/application/public/js/libs/bootstrap.min.js +6 -0
  49. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  50. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  51. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  52. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  53. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  54. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  55. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  56. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  57. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  58. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  59. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  60. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  61. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  62. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  63. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/jquery-ui-1.9.2.custom.css +294 -0
  64. data/lib/repsheet_visualizer/application/public/js/libs/css/ui-lightness/jquery-ui-1.9.2.custom.min.css +7 -0
  65. data/lib/repsheet_visualizer/application/public/js/libs/jquery-1.9.1.min.js +5 -0
  66. data/lib/repsheet_visualizer/application/public/js/libs/jquery-ui-1.9.2.custom.min.js +6 -0
  67. data/lib/repsheet_visualizer/application/public/js/libs/jquery.min.map +1 -0
  68. data/lib/repsheet_visualizer/application/public/js/libs/raphael-2.1.2.min.js +11 -0
  69. data/lib/repsheet_visualizer/application/public/js/plugins/autosize/jquery.autosize.min.js +7 -0
  70. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/DT_bootstrap.js +148 -0
  71. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/Sorting icons.psd +0 -0
  72. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/back_disabled.png +0 -0
  73. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/back_enabled.png +0 -0
  74. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/back_enabled_hover.png +0 -0
  75. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/datatable-row-openclose.png +0 -0
  76. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/favicon.ico +0 -0
  77. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/forward_disabled.png +0 -0
  78. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/forward_enabled.png +0 -0
  79. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/forward_enabled_hover.png +0 -0
  80. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/sort_asc.png +0 -0
  81. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/sort_asc_disabled.png +0 -0
  82. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/sort_both.png +0 -0
  83. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/sort_desc.png +0 -0
  84. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/img/sort_desc_disabled.png +0 -0
  85. data/lib/repsheet_visualizer/application/public/js/plugins/datatables/jquery.dataTables.min.js +155 -0
  86. data/lib/repsheet_visualizer/application/public/js/plugins/datepicker/bootstrap-datepicker.js +1258 -0
  87. data/lib/repsheet_visualizer/application/public/js/plugins/datepicker/datepicker.css +481 -0
  88. data/lib/repsheet_visualizer/application/public/js/plugins/datepicker/less/datepicker.less +122 -0
  89. data/lib/repsheet_visualizer/application/public/js/plugins/fileupload/bootstrap-fileupload.css +132 -0
  90. data/lib/repsheet_visualizer/application/public/js/plugins/fileupload/bootstrap-fileupload.js +169 -0
  91. data/lib/repsheet_visualizer/application/public/js/plugins/fileupload/bootstrap-fileupload.min.css +31 -0
  92. data/lib/repsheet_visualizer/application/public/js/plugins/fileupload/bootstrap-fileupload.min.js +7 -0
  93. data/lib/repsheet_visualizer/application/public/js/plugins/flot/jquery.flot.js +2599 -0
  94. data/lib/repsheet_visualizer/application/public/js/plugins/flot/jquery.flot.orderBars.js +186 -0
  95. data/lib/repsheet_visualizer/application/public/js/plugins/flot/jquery.flot.pie.js +750 -0
  96. data/lib/repsheet_visualizer/application/public/js/plugins/flot/jquery.flot.resize.js +57 -0
  97. data/lib/repsheet_visualizer/application/public/js/plugins/flot/jquery.flot.stack.js +184 -0
  98. data/lib/repsheet_visualizer/application/public/js/plugins/flot/jquery.flot.tooltip.min.js +14 -0
  99. data/lib/repsheet_visualizer/application/public/js/plugins/fullcalendar/fullcalendar.css +589 -0
  100. data/lib/repsheet_visualizer/application/public/js/plugins/fullcalendar/fullcalendar.js +6110 -0
  101. data/lib/repsheet_visualizer/application/public/js/plugins/fullcalendar/fullcalendar.min.js +7 -0
  102. data/lib/repsheet_visualizer/application/public/js/plugins/fullcalendar/fullcalendar.print.css +32 -0
  103. data/lib/repsheet_visualizer/application/public/js/plugins/fullcalendar/gcal.js +107 -0
  104. data/lib/repsheet_visualizer/application/public/js/plugins/howl/howl.js +70 -0
  105. data/lib/repsheet_visualizer/application/public/js/plugins/howl/howl.min.js +2 -0
  106. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/jquery.icheck.js +462 -0
  107. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/jquery.icheck.min.js +11 -0
  108. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/all.css +61 -0
  109. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/_all.css +540 -0
  110. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/aero.css +54 -0
  111. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/aero.png +0 -0
  112. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/aero@2x.png +0 -0
  113. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/blue.css +54 -0
  114. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/blue.png +0 -0
  115. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/blue@2x.png +0 -0
  116. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/flat.css +54 -0
  117. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/flat.png +0 -0
  118. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/flat@2x.png +0 -0
  119. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/green.css +54 -0
  120. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/green.png +0 -0
  121. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/green@2x.png +0 -0
  122. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/grey.css +54 -0
  123. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/grey.png +0 -0
  124. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/grey@2x.png +0 -0
  125. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/orange.css +54 -0
  126. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/orange.png +0 -0
  127. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/orange@2x.png +0 -0
  128. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/pink.css +54 -0
  129. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/pink.png +0 -0
  130. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/pink@2x.png +0 -0
  131. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/purple.css +54 -0
  132. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/purple.png +0 -0
  133. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/purple@2x.png +0 -0
  134. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/red.css +54 -0
  135. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/red.png +0 -0
  136. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/red@2x.png +0 -0
  137. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/yellow.css +54 -0
  138. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/yellow.png +0 -0
  139. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/flat/yellow@2x.png +0 -0
  140. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/futurico/futurico.css +54 -0
  141. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/futurico/futurico.png +0 -0
  142. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/futurico/futurico@2x.png +0 -0
  143. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/_all.css +740 -0
  144. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/aero.css +74 -0
  145. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/blue.css +74 -0
  146. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/green.css +74 -0
  147. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/grey.css +74 -0
  148. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/line.css +74 -0
  149. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/line.png +0 -0
  150. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/line@2x.png +0 -0
  151. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/orange.css +74 -0
  152. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/pink.css +74 -0
  153. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/purple.css +74 -0
  154. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/red.css +74 -0
  155. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/line/yellow.css +74 -0
  156. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/_all.css +600 -0
  157. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/aero.css +60 -0
  158. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/aero.png +0 -0
  159. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/aero@2x.png +0 -0
  160. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/blue.css +60 -0
  161. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/blue.png +0 -0
  162. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/blue@2x.png +0 -0
  163. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/green.css +60 -0
  164. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/green.png +0 -0
  165. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/green@2x.png +0 -0
  166. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/grey.css +60 -0
  167. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/grey.png +0 -0
  168. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/grey@2x.png +0 -0
  169. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/minimal.css +60 -0
  170. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/minimal.png +0 -0
  171. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/minimal@2x.png +0 -0
  172. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/orange.css +60 -0
  173. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/orange.png +0 -0
  174. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/orange@2x.png +0 -0
  175. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/pink.css +60 -0
  176. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/pink.png +0 -0
  177. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/pink@2x.png +0 -0
  178. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/purple.css +60 -0
  179. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/purple.png +0 -0
  180. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/purple@2x.png +0 -0
  181. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/red.css +60 -0
  182. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/red.png +0 -0
  183. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/red@2x.png +0 -0
  184. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/yellow.css +60 -0
  185. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/yellow.png +0 -0
  186. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/minimal/yellow@2x.png +0 -0
  187. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/polaris/polaris.css +60 -0
  188. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/polaris/polaris.png +0 -0
  189. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/polaris/polaris@2x.png +0 -0
  190. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/_all.css +600 -0
  191. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/aero.css +60 -0
  192. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/aero.png +0 -0
  193. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/aero@2x.png +0 -0
  194. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/blue.css +60 -0
  195. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/blue.png +0 -0
  196. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/blue@2x.png +0 -0
  197. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/green.css +60 -0
  198. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/green.png +0 -0
  199. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/green@2x.png +0 -0
  200. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/grey.css +60 -0
  201. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/grey.png +0 -0
  202. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/grey@2x.png +0 -0
  203. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/orange.css +60 -0
  204. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/orange.png +0 -0
  205. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/orange@2x.png +0 -0
  206. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/pink.css +60 -0
  207. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/pink.png +0 -0
  208. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/pink@2x.png +0 -0
  209. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/purple.css +60 -0
  210. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/purple.png +0 -0
  211. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/purple@2x.png +0 -0
  212. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/red.css +60 -0
  213. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/red.png +0 -0
  214. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/red@2x.png +0 -0
  215. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/square.css +60 -0
  216. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/square.png +0 -0
  217. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/square@2x.png +0 -0
  218. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/yellow.css +60 -0
  219. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/yellow.png +0 -0
  220. data/lib/repsheet_visualizer/application/public/js/plugins/icheck/skins/square/yellow@2x.png +0 -0
  221. data/lib/repsheet_visualizer/application/public/js/plugins/magnific/jquery.magnific-popup.js +2026 -0
  222. data/lib/repsheet_visualizer/application/public/js/plugins/magnific/jquery.magnific-popup.min.js +4 -0
  223. data/lib/repsheet_visualizer/application/public/js/plugins/magnific/magnific-popup.css +396 -0
  224. data/lib/repsheet_visualizer/application/public/js/plugins/morris/morris.css +1 -0
  225. data/lib/repsheet_visualizer/application/public/js/plugins/morris/morris.min.js +1 -0
  226. data/lib/repsheet_visualizer/application/public/js/plugins/parsley/parsley.js +1363 -0
  227. data/lib/repsheet_visualizer/application/public/js/plugins/select2/select2-spinner.gif +0 -0
  228. data/lib/repsheet_visualizer/application/public/js/plugins/select2/select2.css +615 -0
  229. data/lib/repsheet_visualizer/application/public/js/plugins/select2/select2.js +3217 -0
  230. data/lib/repsheet_visualizer/application/public/js/plugins/select2/select2.min.js +22 -0
  231. data/lib/repsheet_visualizer/application/public/js/plugins/select2/select2.png +0 -0
  232. data/lib/repsheet_visualizer/application/public/js/plugins/select2/select2x2.png +0 -0
  233. data/lib/repsheet_visualizer/application/public/js/plugins/simplecolorpicker/jquery.simplecolorpicker.css +98 -0
  234. data/lib/repsheet_visualizer/application/public/js/plugins/simplecolorpicker/jquery.simplecolorpicker.js +211 -0
  235. data/lib/repsheet_visualizer/application/public/js/plugins/sparkline/jquery.sparkline.min.js +5 -0
  236. data/lib/repsheet_visualizer/application/public/js/plugins/tableCheckable/jquery.tableCheckable.js +122 -0
  237. data/lib/repsheet_visualizer/application/public/js/plugins/textarea-counter/jquery.textarea-counter.js +163 -0
  238. data/lib/repsheet_visualizer/application/public/js/plugins/timepicker/bootstrap-timepicker.css +121 -0
  239. data/lib/repsheet_visualizer/application/public/js/plugins/timepicker/bootstrap-timepicker.js +893 -0
  240. data/lib/repsheet_visualizer/application/public/stylesheets/App.css +3436 -0
  241. data/lib/repsheet_visualizer/application/public/stylesheets/Login.css +88 -0
  242. data/lib/repsheet_visualizer/application/public/stylesheets/bootstrap.min.css +9 -0
  243. data/lib/repsheet_visualizer/application/public/stylesheets/custom.css +0 -0
  244. data/lib/repsheet_visualizer/application/public/stylesheets/font-awesome.min.css +395 -0
  245. data/lib/repsheet_visualizer/application/views/actor.erb +169 -0
  246. data/lib/repsheet_visualizer/application/views/blacklist.erb +105 -0
  247. data/lib/repsheet_visualizer/application/views/index.erb +188 -0
  248. data/lib/repsheet_visualizer/application/views/layout.erb +73 -0
  249. data/lib/repsheet_visualizer/application/views/suspects.erb +105 -0
  250. data/lib/repsheet_visualizer/application/views/whitelist.erb +90 -78
  251. data/lib/repsheet_visualizer/application/views/worldview.erb +84 -78
  252. data/lib/repsheet_visualizer/version.rb +1 -1
  253. data/redesign/404.html +446 -0
  254. data/redesign/500.html +453 -0
  255. data/redesign/actor.html +237 -0
  256. data/redesign/blacklist.html +274 -0
  257. data/redesign/css/App.css +3436 -0
  258. data/redesign/css/Login.css +88 -0
  259. data/redesign/css/bootstrap.min.css +9 -0
  260. data/redesign/css/custom.css +0 -0
  261. data/redesign/css/font-awesome.min.css +395 -0
  262. data/redesign/fonts/FontAwesome.otf +0 -0
  263. data/redesign/fonts/fontawesome-webfont.eot +0 -0
  264. data/redesign/fonts/fontawesome-webfont.svg +414 -0
  265. data/redesign/fonts/fontawesome-webfont.ttf +0 -0
  266. data/redesign/fonts/fontawesome-webfont.woff +0 -0
  267. data/redesign/fonts/glyphicons-halflings-regular.eot +0 -0
  268. data/redesign/fonts/glyphicons-halflings-regular.svg +228 -0
  269. data/redesign/fonts/glyphicons-halflings-regular.ttf +0 -0
  270. data/redesign/fonts/glyphicons-halflings-regular.woff +0 -0
  271. data/redesign/img/jquery/handle-vertical.png +0 -0
  272. data/redesign/img/jquery/handle.png +0 -0
  273. data/redesign/img/layout/sidebar-bg.png +0 -0
  274. data/redesign/img/loaders/ajax-loader.gif +0 -0
  275. data/redesign/img/photos/map.png +0 -0
  276. data/redesign/index.html +333 -0
  277. data/redesign/js/App.js +372 -0
  278. data/redesign/js/Login.js +17 -0
  279. data/redesign/js/demos/buttons.js +7 -0
  280. data/redesign/js/demos/calendar.js +142 -0
  281. data/redesign/js/demos/charts/flot/area.js +73 -0
  282. data/redesign/js/demos/charts/flot/chart1.js +77 -0
  283. data/redesign/js/demos/charts/flot/chart2.js +70 -0
  284. data/redesign/js/demos/charts/flot/chart3.js +71 -0
  285. data/redesign/js/demos/charts/flot/chart4.js +69 -0
  286. data/redesign/js/demos/charts/flot/donut.js +49 -0
  287. data/redesign/js/demos/charts/flot/horizontal.js +56 -0
  288. data/redesign/js/demos/charts/flot/line.js +76 -0
  289. data/redesign/js/demos/charts/flot/pie.js +50 -0
  290. data/redesign/js/demos/charts/flot/scatter.js +62 -0
  291. data/redesign/js/demos/charts/flot/stacked-area.js +86 -0
  292. data/redesign/js/demos/charts/flot/stacked-horizontal.js +60 -0
  293. data/redesign/js/demos/charts/flot/stacked-vertical.js +75 -0
  294. data/redesign/js/demos/charts/flot/vertical.js +70 -0
  295. data/redesign/js/demos/charts/morris/area.js +28 -0
  296. data/redesign/js/demos/charts/morris/bar.js +29 -0
  297. data/redesign/js/demos/charts/morris/donut.js +26 -0
  298. data/redesign/js/demos/charts/morris/line.js +30 -0
  299. data/redesign/js/demos/dashboard.js +26 -0
  300. data/redesign/js/demos/form-extended.js +61 -0
  301. data/redesign/js/demos/popups.js +16 -0
  302. data/redesign/js/demos/pricing.js +10 -0
  303. data/redesign/js/demos/sliders.js +77 -0
  304. data/redesign/js/libs/bootstrap.js +1999 -0
  305. data/redesign/js/libs/bootstrap.min.js +6 -0
  306. data/redesign/js/libs/css/ui-lightness/images/ui-bg_diagonals-thick_18_b81900_40x40.png +0 -0
  307. data/redesign/js/libs/css/ui-lightness/images/ui-bg_diagonals-thick_20_666666_40x40.png +0 -0
  308. data/redesign/js/libs/css/ui-lightness/images/ui-bg_flat_10_000000_40x100.png +0 -0
  309. data/redesign/js/libs/css/ui-lightness/images/ui-bg_glass_100_f6f6f6_1x400.png +0 -0
  310. data/redesign/js/libs/css/ui-lightness/images/ui-bg_glass_100_fdf5ce_1x400.png +0 -0
  311. data/redesign/js/libs/css/ui-lightness/images/ui-bg_glass_65_ffffff_1x400.png +0 -0
  312. data/redesign/js/libs/css/ui-lightness/images/ui-bg_gloss-wave_35_f6a828_500x100.png +0 -0
  313. data/redesign/js/libs/css/ui-lightness/images/ui-bg_highlight-soft_100_eeeeee_1x100.png +0 -0
  314. data/redesign/js/libs/css/ui-lightness/images/ui-bg_highlight-soft_75_ffe45c_1x100.png +0 -0
  315. data/redesign/js/libs/css/ui-lightness/images/ui-icons_222222_256x240.png +0 -0
  316. data/redesign/js/libs/css/ui-lightness/images/ui-icons_228ef1_256x240.png +0 -0
  317. data/redesign/js/libs/css/ui-lightness/images/ui-icons_ef8c08_256x240.png +0 -0
  318. data/redesign/js/libs/css/ui-lightness/images/ui-icons_ffd27a_256x240.png +0 -0
  319. data/redesign/js/libs/css/ui-lightness/images/ui-icons_ffffff_256x240.png +0 -0
  320. data/redesign/js/libs/css/ui-lightness/jquery-ui-1.9.2.custom.css +294 -0
  321. data/redesign/js/libs/css/ui-lightness/jquery-ui-1.9.2.custom.min.css +7 -0
  322. data/redesign/js/libs/jquery-1.9.1.min.js +5 -0
  323. data/redesign/js/libs/jquery-ui-1.9.2.custom.min.js +6 -0
  324. data/redesign/js/libs/jquery.min.map +1 -0
  325. data/redesign/js/libs/raphael-2.1.2.min.js +11 -0
  326. data/redesign/js/plugins/autosize/jquery.autosize.min.js +7 -0
  327. data/redesign/js/plugins/datatables/DT_bootstrap.js +148 -0
  328. data/redesign/js/plugins/datatables/img/Sorting icons.psd +0 -0
  329. data/redesign/js/plugins/datatables/img/back_disabled.png +0 -0
  330. data/redesign/js/plugins/datatables/img/back_enabled.png +0 -0
  331. data/redesign/js/plugins/datatables/img/back_enabled_hover.png +0 -0
  332. data/redesign/js/plugins/datatables/img/datatable-row-openclose.png +0 -0
  333. data/redesign/js/plugins/datatables/img/favicon.ico +0 -0
  334. data/redesign/js/plugins/datatables/img/forward_disabled.png +0 -0
  335. data/redesign/js/plugins/datatables/img/forward_enabled.png +0 -0
  336. data/redesign/js/plugins/datatables/img/forward_enabled_hover.png +0 -0
  337. data/redesign/js/plugins/datatables/img/sort_asc.png +0 -0
  338. data/redesign/js/plugins/datatables/img/sort_asc_disabled.png +0 -0
  339. data/redesign/js/plugins/datatables/img/sort_both.png +0 -0
  340. data/redesign/js/plugins/datatables/img/sort_desc.png +0 -0
  341. data/redesign/js/plugins/datatables/img/sort_desc_disabled.png +0 -0
  342. data/redesign/js/plugins/datatables/jquery.dataTables.min.js +155 -0
  343. data/redesign/js/plugins/datepicker/bootstrap-datepicker.js +1258 -0
  344. data/redesign/js/plugins/datepicker/datepicker.css +481 -0
  345. data/redesign/js/plugins/datepicker/less/datepicker.less +122 -0
  346. data/redesign/js/plugins/fileupload/bootstrap-fileupload.css +132 -0
  347. data/redesign/js/plugins/fileupload/bootstrap-fileupload.js +169 -0
  348. data/redesign/js/plugins/fileupload/bootstrap-fileupload.min.css +31 -0
  349. data/redesign/js/plugins/fileupload/bootstrap-fileupload.min.js +7 -0
  350. data/redesign/js/plugins/flot/jquery.flot.js +2599 -0
  351. data/redesign/js/plugins/flot/jquery.flot.orderBars.js +186 -0
  352. data/redesign/js/plugins/flot/jquery.flot.pie.js +750 -0
  353. data/redesign/js/plugins/flot/jquery.flot.resize.js +57 -0
  354. data/redesign/js/plugins/flot/jquery.flot.stack.js +184 -0
  355. data/redesign/js/plugins/flot/jquery.flot.tooltip.min.js +14 -0
  356. data/redesign/js/plugins/fullcalendar/fullcalendar.css +589 -0
  357. data/redesign/js/plugins/fullcalendar/fullcalendar.js +6110 -0
  358. data/redesign/js/plugins/fullcalendar/fullcalendar.min.js +7 -0
  359. data/redesign/js/plugins/fullcalendar/fullcalendar.print.css +32 -0
  360. data/redesign/js/plugins/fullcalendar/gcal.js +107 -0
  361. data/redesign/js/plugins/howl/howl.js +70 -0
  362. data/redesign/js/plugins/howl/howl.min.js +2 -0
  363. data/redesign/js/plugins/icheck/jquery.icheck.js +462 -0
  364. data/redesign/js/plugins/icheck/jquery.icheck.min.js +11 -0
  365. data/redesign/js/plugins/icheck/skins/all.css +61 -0
  366. data/redesign/js/plugins/icheck/skins/flat/_all.css +540 -0
  367. data/redesign/js/plugins/icheck/skins/flat/aero.css +54 -0
  368. data/redesign/js/plugins/icheck/skins/flat/aero.png +0 -0
  369. data/redesign/js/plugins/icheck/skins/flat/aero@2x.png +0 -0
  370. data/redesign/js/plugins/icheck/skins/flat/blue.css +54 -0
  371. data/redesign/js/plugins/icheck/skins/flat/blue.png +0 -0
  372. data/redesign/js/plugins/icheck/skins/flat/blue@2x.png +0 -0
  373. data/redesign/js/plugins/icheck/skins/flat/flat.css +54 -0
  374. data/redesign/js/plugins/icheck/skins/flat/flat.png +0 -0
  375. data/redesign/js/plugins/icheck/skins/flat/flat@2x.png +0 -0
  376. data/redesign/js/plugins/icheck/skins/flat/green.css +54 -0
  377. data/redesign/js/plugins/icheck/skins/flat/green.png +0 -0
  378. data/redesign/js/plugins/icheck/skins/flat/green@2x.png +0 -0
  379. data/redesign/js/plugins/icheck/skins/flat/grey.css +54 -0
  380. data/redesign/js/plugins/icheck/skins/flat/grey.png +0 -0
  381. data/redesign/js/plugins/icheck/skins/flat/grey@2x.png +0 -0
  382. data/redesign/js/plugins/icheck/skins/flat/orange.css +54 -0
  383. data/redesign/js/plugins/icheck/skins/flat/orange.png +0 -0
  384. data/redesign/js/plugins/icheck/skins/flat/orange@2x.png +0 -0
  385. data/redesign/js/plugins/icheck/skins/flat/pink.css +54 -0
  386. data/redesign/js/plugins/icheck/skins/flat/pink.png +0 -0
  387. data/redesign/js/plugins/icheck/skins/flat/pink@2x.png +0 -0
  388. data/redesign/js/plugins/icheck/skins/flat/purple.css +54 -0
  389. data/redesign/js/plugins/icheck/skins/flat/purple.png +0 -0
  390. data/redesign/js/plugins/icheck/skins/flat/purple@2x.png +0 -0
  391. data/redesign/js/plugins/icheck/skins/flat/red.css +54 -0
  392. data/redesign/js/plugins/icheck/skins/flat/red.png +0 -0
  393. data/redesign/js/plugins/icheck/skins/flat/red@2x.png +0 -0
  394. data/redesign/js/plugins/icheck/skins/flat/yellow.css +54 -0
  395. data/redesign/js/plugins/icheck/skins/flat/yellow.png +0 -0
  396. data/redesign/js/plugins/icheck/skins/flat/yellow@2x.png +0 -0
  397. data/redesign/js/plugins/icheck/skins/futurico/futurico.css +54 -0
  398. data/redesign/js/plugins/icheck/skins/futurico/futurico.png +0 -0
  399. data/redesign/js/plugins/icheck/skins/futurico/futurico@2x.png +0 -0
  400. data/redesign/js/plugins/icheck/skins/line/_all.css +740 -0
  401. data/redesign/js/plugins/icheck/skins/line/aero.css +74 -0
  402. data/redesign/js/plugins/icheck/skins/line/blue.css +74 -0
  403. data/redesign/js/plugins/icheck/skins/line/green.css +74 -0
  404. data/redesign/js/plugins/icheck/skins/line/grey.css +74 -0
  405. data/redesign/js/plugins/icheck/skins/line/line.css +74 -0
  406. data/redesign/js/plugins/icheck/skins/line/line.png +0 -0
  407. data/redesign/js/plugins/icheck/skins/line/line@2x.png +0 -0
  408. data/redesign/js/plugins/icheck/skins/line/orange.css +74 -0
  409. data/redesign/js/plugins/icheck/skins/line/pink.css +74 -0
  410. data/redesign/js/plugins/icheck/skins/line/purple.css +74 -0
  411. data/redesign/js/plugins/icheck/skins/line/red.css +74 -0
  412. data/redesign/js/plugins/icheck/skins/line/yellow.css +74 -0
  413. data/redesign/js/plugins/icheck/skins/minimal/_all.css +600 -0
  414. data/redesign/js/plugins/icheck/skins/minimal/aero.css +60 -0
  415. data/redesign/js/plugins/icheck/skins/minimal/aero.png +0 -0
  416. data/redesign/js/plugins/icheck/skins/minimal/aero@2x.png +0 -0
  417. data/redesign/js/plugins/icheck/skins/minimal/blue.css +60 -0
  418. data/redesign/js/plugins/icheck/skins/minimal/blue.png +0 -0
  419. data/redesign/js/plugins/icheck/skins/minimal/blue@2x.png +0 -0
  420. data/redesign/js/plugins/icheck/skins/minimal/green.css +60 -0
  421. data/redesign/js/plugins/icheck/skins/minimal/green.png +0 -0
  422. data/redesign/js/plugins/icheck/skins/minimal/green@2x.png +0 -0
  423. data/redesign/js/plugins/icheck/skins/minimal/grey.css +60 -0
  424. data/redesign/js/plugins/icheck/skins/minimal/grey.png +0 -0
  425. data/redesign/js/plugins/icheck/skins/minimal/grey@2x.png +0 -0
  426. data/redesign/js/plugins/icheck/skins/minimal/minimal.css +60 -0
  427. data/redesign/js/plugins/icheck/skins/minimal/minimal.png +0 -0
  428. data/redesign/js/plugins/icheck/skins/minimal/minimal@2x.png +0 -0
  429. data/redesign/js/plugins/icheck/skins/minimal/orange.css +60 -0
  430. data/redesign/js/plugins/icheck/skins/minimal/orange.png +0 -0
  431. data/redesign/js/plugins/icheck/skins/minimal/orange@2x.png +0 -0
  432. data/redesign/js/plugins/icheck/skins/minimal/pink.css +60 -0
  433. data/redesign/js/plugins/icheck/skins/minimal/pink.png +0 -0
  434. data/redesign/js/plugins/icheck/skins/minimal/pink@2x.png +0 -0
  435. data/redesign/js/plugins/icheck/skins/minimal/purple.css +60 -0
  436. data/redesign/js/plugins/icheck/skins/minimal/purple.png +0 -0
  437. data/redesign/js/plugins/icheck/skins/minimal/purple@2x.png +0 -0
  438. data/redesign/js/plugins/icheck/skins/minimal/red.css +60 -0
  439. data/redesign/js/plugins/icheck/skins/minimal/red.png +0 -0
  440. data/redesign/js/plugins/icheck/skins/minimal/red@2x.png +0 -0
  441. data/redesign/js/plugins/icheck/skins/minimal/yellow.css +60 -0
  442. data/redesign/js/plugins/icheck/skins/minimal/yellow.png +0 -0
  443. data/redesign/js/plugins/icheck/skins/minimal/yellow@2x.png +0 -0
  444. data/redesign/js/plugins/icheck/skins/polaris/polaris.css +60 -0
  445. data/redesign/js/plugins/icheck/skins/polaris/polaris.png +0 -0
  446. data/redesign/js/plugins/icheck/skins/polaris/polaris@2x.png +0 -0
  447. data/redesign/js/plugins/icheck/skins/square/_all.css +600 -0
  448. data/redesign/js/plugins/icheck/skins/square/aero.css +60 -0
  449. data/redesign/js/plugins/icheck/skins/square/aero.png +0 -0
  450. data/redesign/js/plugins/icheck/skins/square/aero@2x.png +0 -0
  451. data/redesign/js/plugins/icheck/skins/square/blue.css +60 -0
  452. data/redesign/js/plugins/icheck/skins/square/blue.png +0 -0
  453. data/redesign/js/plugins/icheck/skins/square/blue@2x.png +0 -0
  454. data/redesign/js/plugins/icheck/skins/square/green.css +60 -0
  455. data/redesign/js/plugins/icheck/skins/square/green.png +0 -0
  456. data/redesign/js/plugins/icheck/skins/square/green@2x.png +0 -0
  457. data/redesign/js/plugins/icheck/skins/square/grey.css +60 -0
  458. data/redesign/js/plugins/icheck/skins/square/grey.png +0 -0
  459. data/redesign/js/plugins/icheck/skins/square/grey@2x.png +0 -0
  460. data/redesign/js/plugins/icheck/skins/square/orange.css +60 -0
  461. data/redesign/js/plugins/icheck/skins/square/orange.png +0 -0
  462. data/redesign/js/plugins/icheck/skins/square/orange@2x.png +0 -0
  463. data/redesign/js/plugins/icheck/skins/square/pink.css +60 -0
  464. data/redesign/js/plugins/icheck/skins/square/pink.png +0 -0
  465. data/redesign/js/plugins/icheck/skins/square/pink@2x.png +0 -0
  466. data/redesign/js/plugins/icheck/skins/square/purple.css +60 -0
  467. data/redesign/js/plugins/icheck/skins/square/purple.png +0 -0
  468. data/redesign/js/plugins/icheck/skins/square/purple@2x.png +0 -0
  469. data/redesign/js/plugins/icheck/skins/square/red.css +60 -0
  470. data/redesign/js/plugins/icheck/skins/square/red.png +0 -0
  471. data/redesign/js/plugins/icheck/skins/square/red@2x.png +0 -0
  472. data/redesign/js/plugins/icheck/skins/square/square.css +60 -0
  473. data/redesign/js/plugins/icheck/skins/square/square.png +0 -0
  474. data/redesign/js/plugins/icheck/skins/square/square@2x.png +0 -0
  475. data/redesign/js/plugins/icheck/skins/square/yellow.css +60 -0
  476. data/redesign/js/plugins/icheck/skins/square/yellow.png +0 -0
  477. data/redesign/js/plugins/icheck/skins/square/yellow@2x.png +0 -0
  478. data/redesign/js/plugins/magnific/jquery.magnific-popup.js +2026 -0
  479. data/redesign/js/plugins/magnific/jquery.magnific-popup.min.js +4 -0
  480. data/redesign/js/plugins/magnific/magnific-popup.css +396 -0
  481. data/redesign/js/plugins/morris/morris.css +1 -0
  482. data/redesign/js/plugins/morris/morris.min.js +1 -0
  483. data/redesign/js/plugins/parsley/parsley.js +1363 -0
  484. data/redesign/js/plugins/select2/select2-spinner.gif +0 -0
  485. data/redesign/js/plugins/select2/select2.css +615 -0
  486. data/redesign/js/plugins/select2/select2.js +3217 -0
  487. data/redesign/js/plugins/select2/select2.min.js +22 -0
  488. data/redesign/js/plugins/select2/select2.png +0 -0
  489. data/redesign/js/plugins/select2/select2x2.png +0 -0
  490. data/redesign/js/plugins/simplecolorpicker/jquery.simplecolorpicker.css +98 -0
  491. data/redesign/js/plugins/simplecolorpicker/jquery.simplecolorpicker.js +211 -0
  492. data/redesign/js/plugins/sparkline/jquery.sparkline.min.js +5 -0
  493. data/redesign/js/plugins/tableCheckable/jquery.tableCheckable.js +122 -0
  494. data/redesign/js/plugins/textarea-counter/jquery.textarea-counter.js +163 -0
  495. data/redesign/js/plugins/timepicker/bootstrap-timepicker.css +121 -0
  496. data/redesign/js/plugins/timepicker/bootstrap-timepicker.js +893 -0
  497. data/redesign/page-blank.html +417 -0
  498. data/redesign/suspects.html +273 -0
  499. data/redesign/whitelist.html +273 -0
  500. data/repsheet_visualizer.gemspec +1 -0
  501. data/script/fill +2 -0
  502. metadata +508 -5
  503. data/lib/repsheet_visualizer/application/views/activity.erb +0 -74
  504. data/lib/repsheet_visualizer/application/views/actors.erb +0 -130
@@ -0,0 +1,163 @@
1
+ /*
2
+ * jQuery Textarea Characters Counter Plugin v 2.0
3
+ * Examples and documentation at: http://roy-jin.appspot.com/jsp/textareaCounter.jsp
4
+ * Copyright (c) 2010 Roy Jin
5
+ * Version: 2.0 (11-JUN-2010)
6
+ * Dual licensed under the MIT and GPL licenses:
7
+ * http://www.opensource.org/licenses/mit-license.php
8
+ * http://www.gnu.org/licenses/gpl.html
9
+ * Requires: jQuery v1.4.2 or later
10
+ */
11
+ (function($){
12
+ $.fn.textareaCount = function(options, fn) {
13
+ var defaults = {
14
+ maxCharacterSize: -1,
15
+ originalStyle: 'originalTextareaInfo',
16
+ warningStyle: 'warningTextareaInfo',
17
+ warningNumber: 20,
18
+ displayFormat: '#input characters | #words words'
19
+ };
20
+ var options = $.extend(defaults, options);
21
+
22
+ var container = $(this);
23
+
24
+ $("<div class='charleft'>&nbsp;</div>").insertAfter(container);
25
+
26
+ //create charleft css
27
+ var charLeftCss = {
28
+ 'width' : container.width()
29
+ };
30
+
31
+ var charLeftInfo = getNextCharLeftInformation(container);
32
+ charLeftInfo.addClass(options.originalStyle);
33
+ charLeftInfo.css(charLeftCss);
34
+
35
+ var numInput = 0;
36
+ var maxCharacters = options.maxCharacterSize;
37
+ var numLeft = 0;
38
+ var numWords = 0;
39
+
40
+ container.bind('keyup', function(event){limitTextAreaByCharacterCount();})
41
+ .bind('mouseover', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);})
42
+ .bind('paste', function(event){setTimeout(function(){limitTextAreaByCharacterCount();}, 10);});
43
+
44
+
45
+ function limitTextAreaByCharacterCount(){
46
+ charLeftInfo.html(countByCharacters());
47
+ //function call back
48
+ if(typeof fn != 'undefined'){
49
+ fn.call(this, getInfo());
50
+ }
51
+ return true;
52
+ }
53
+
54
+ function countByCharacters(){
55
+ var content = container.val();
56
+ var contentLength = content.length;
57
+
58
+ //Start Cut
59
+ if(options.maxCharacterSize > 0){
60
+ //If copied content is already more than maxCharacterSize, chop it to maxCharacterSize.
61
+ if(contentLength >= options.maxCharacterSize) {
62
+ content = content.substring(0, options.maxCharacterSize);
63
+ }
64
+
65
+ var newlineCount = getNewlineCount(content);
66
+
67
+ // newlineCount new line character. For windows, it occupies 2 characters
68
+ var systemmaxCharacterSize = options.maxCharacterSize - newlineCount;
69
+ if (!isWin()){
70
+ systemmaxCharacterSize = options.maxCharacterSize
71
+ }
72
+ if(contentLength > systemmaxCharacterSize){
73
+ //avoid scroll bar moving
74
+ var originalScrollTopPosition = this.scrollTop;
75
+ container.val(content.substring(0, systemmaxCharacterSize));
76
+ this.scrollTop = originalScrollTopPosition;
77
+ }
78
+ charLeftInfo.removeClass(options.warningStyle);
79
+ if(systemmaxCharacterSize - contentLength <= options.warningNumber){
80
+ charLeftInfo.addClass(options.warningStyle);
81
+ }
82
+
83
+ numInput = container.val().length + newlineCount;
84
+ if(!isWin()){
85
+ numInput = container.val().length;
86
+ }
87
+
88
+ numWords = countWord(getCleanedWordString(container.val()));
89
+
90
+ numLeft = maxCharacters - numInput;
91
+ } else {
92
+ //normal count, no cut
93
+ var newlineCount = getNewlineCount(content);
94
+ numInput = container.val().length + newlineCount;
95
+ if(!isWin()){
96
+ numInput = container.val().length;
97
+ }
98
+ numWords = countWord(getCleanedWordString(container.val()));
99
+ }
100
+
101
+ return formatDisplayInfo();
102
+ }
103
+
104
+ function formatDisplayInfo(){
105
+ var format = options.displayFormat;
106
+ format = format.replace('#input', numInput);
107
+ format = format.replace('#words', numWords);
108
+ //When maxCharacters <= 0, #max, #left cannot be substituted.
109
+ if(maxCharacters > 0){
110
+ format = format.replace('#max', maxCharacters);
111
+ format = format.replace('#left', numLeft);
112
+ }
113
+ return format;
114
+ }
115
+
116
+ function getInfo(){
117
+ var info = {
118
+ input: numInput,
119
+ max: maxCharacters,
120
+ left: numLeft,
121
+ words: numWords
122
+ };
123
+ return info;
124
+ }
125
+
126
+ function getNextCharLeftInformation(container){
127
+ return container.next('.charleft');
128
+ }
129
+
130
+ function isWin(){
131
+ var strOS = navigator.appVersion;
132
+ if (strOS.toLowerCase().indexOf('win') != -1){
133
+ return true;
134
+ }
135
+ return false;
136
+ }
137
+
138
+ function getNewlineCount(content){
139
+ var newlineCount = 0;
140
+ for(var i=0; i<content.length;i++){
141
+ if(content.charAt(i) == '\n'){
142
+ newlineCount++;
143
+ }
144
+ }
145
+ return newlineCount;
146
+ }
147
+
148
+ function getCleanedWordString(content){
149
+ var fullStr = content + " ";
150
+ var initial_whitespace_rExp = /^[^A-Za-z0-9]+/gi;
151
+ var left_trimmedStr = fullStr.replace(initial_whitespace_rExp, "");
152
+ var non_alphanumerics_rExp = rExp = /[^A-Za-z0-9]+/gi;
153
+ var cleanedStr = left_trimmedStr.replace(non_alphanumerics_rExp, " ");
154
+ var splitString = cleanedStr.split(" ");
155
+ return splitString;
156
+ }
157
+
158
+ function countWord(cleanedWordString){
159
+ var word_count = cleanedWordString.length-1;
160
+ return word_count;
161
+ }
162
+ };
163
+ })(jQuery);
@@ -0,0 +1,121 @@
1
+ /*!
2
+ * Timepicker Component for Twitter Bootstrap
3
+ *
4
+ * Copyright 2013 Joris de Wit
5
+ *
6
+ * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+ .bootstrap-timepicker {
12
+ position: relative;
13
+ }
14
+ .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu {
15
+ left: auto;
16
+ right: 0;
17
+ }
18
+ .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:before {
19
+ left: auto;
20
+ right: 12px;
21
+ }
22
+ .bootstrap-timepicker.pull-right .bootstrap-timepicker-widget.dropdown-menu:after {
23
+ left: auto;
24
+ right: 13px;
25
+ }
26
+ .bootstrap-timepicker .add-on {
27
+ cursor: pointer;
28
+ }
29
+ .bootstrap-timepicker .add-on i {
30
+ display: inline-block;
31
+ width: 16px;
32
+ height: 16px;
33
+ }
34
+ .bootstrap-timepicker-widget.dropdown-menu {
35
+ padding: 2px 3px 2px 2px;
36
+ }
37
+ .bootstrap-timepicker-widget.dropdown-menu.open {
38
+ display: inline-block;
39
+ }
40
+ .bootstrap-timepicker-widget.dropdown-menu:before {
41
+ border-bottom: 7px solid rgba(0, 0, 0, 0.2);
42
+ border-left: 7px solid transparent;
43
+ border-right: 7px solid transparent;
44
+ content: "";
45
+ display: inline-block;
46
+ left: 9px;
47
+ position: absolute;
48
+ top: -7px;
49
+ }
50
+ .bootstrap-timepicker-widget.dropdown-menu:after {
51
+ border-bottom: 6px solid #FFFFFF;
52
+ border-left: 6px solid transparent;
53
+ border-right: 6px solid transparent;
54
+ content: "";
55
+ display: inline-block;
56
+ left: 10px;
57
+ position: absolute;
58
+ top: -6px;
59
+ }
60
+ .bootstrap-timepicker-widget a.btn,
61
+ .bootstrap-timepicker-widget input {
62
+ border-radius: 4px;
63
+ }
64
+ .bootstrap-timepicker-widget table {
65
+ width: 100%;
66
+ margin: 0;
67
+ }
68
+ .bootstrap-timepicker-widget table td {
69
+ text-align: center;
70
+ height: 30px;
71
+ margin: 0;
72
+ padding: 2px;
73
+ }
74
+ .bootstrap-timepicker-widget table td:not(.separator) {
75
+ min-width: 30px;
76
+ }
77
+ .bootstrap-timepicker-widget table td span {
78
+ width: 100%;
79
+ }
80
+ .bootstrap-timepicker-widget table td a {
81
+ border: 1px transparent solid;
82
+ width: 100%;
83
+ display: inline-block;
84
+ margin: 0;
85
+ padding: 8px 0;
86
+ outline: 0;
87
+ color: #333;
88
+ }
89
+ .bootstrap-timepicker-widget table td a:hover {
90
+ text-decoration: none;
91
+ background-color: #eee;
92
+ -webkit-border-radius: 4px;
93
+ -moz-border-radius: 4px;
94
+ border-radius: 4px;
95
+ border-color: #ddd;
96
+ }
97
+ .bootstrap-timepicker-widget table td a i {
98
+ margin-top: 2px;
99
+ }
100
+ .bootstrap-timepicker-widget table td input {
101
+ width: 25px;
102
+ margin: 0;
103
+ text-align: center;
104
+ }
105
+
106
+
107
+
108
+
109
+
110
+
111
+ @media (min-width: 767px) {
112
+
113
+ }
114
+ @media (max-width: 767px) {
115
+ .bootstrap-timepicker {
116
+ width: 100%;
117
+ }
118
+ .bootstrap-timepicker .dropdown-menu {
119
+ width: 100%;
120
+ }
121
+ }
@@ -0,0 +1,893 @@
1
+ /*!
2
+ * Timepicker Component for Twitter Bootstrap
3
+ *
4
+ * Copyright 2013 Joris de Wit
5
+ *
6
+ * Contributors https://github.com/jdewit/bootstrap-timepicker/graphs/contributors
7
+ *
8
+ * For the full copyright and license information, please view the LICENSE
9
+ * file that was distributed with this source code.
10
+ */
11
+ (function($, window, document, undefined) {
12
+ 'use strict';
13
+
14
+ // TIMEPICKER PUBLIC CLASS DEFINITION
15
+ var Timepicker = function(element, options) {
16
+ this.widget = '';
17
+ this.$element = $(element);
18
+ this.defaultTime = options.defaultTime;
19
+ this.disableFocus = options.disableFocus;
20
+ this.isOpen = options.isOpen;
21
+ this.minuteStep = options.minuteStep;
22
+ this.modalBackdrop = options.modalBackdrop;
23
+ this.secondStep = options.secondStep;
24
+ this.showInputs = options.showInputs;
25
+ this.showMeridian = options.showMeridian;
26
+ this.showSeconds = options.showSeconds;
27
+ this.template = options.template;
28
+ this.appendWidgetTo = options.appendWidgetTo;
29
+
30
+ this._init();
31
+ };
32
+
33
+ Timepicker.prototype = {
34
+
35
+ constructor: Timepicker,
36
+
37
+ _init: function() {
38
+ var self = this;
39
+
40
+ if (this.$element.parent().hasClass('input-group')) {
41
+ this.$element.parent('.input-group').find('.input-group-addon').on({
42
+ 'click.timepicker': $.proxy(this.showWidget, this)
43
+ });
44
+ this.$element.on({
45
+ 'focus.timepicker': $.proxy(this.highlightUnit, this),
46
+ 'click.timepicker': $.proxy(this.highlightUnit, this),
47
+ 'keydown.timepicker': $.proxy(this.elementKeydown, this),
48
+ 'blur.timepicker': $.proxy(this.blurElement, this)
49
+ });
50
+ } else {
51
+ if (this.template) {
52
+ this.$element.on({
53
+ 'focus.timepicker': $.proxy(this.showWidget, this),
54
+ 'click.timepicker': $.proxy(this.showWidget, this),
55
+ 'blur.timepicker': $.proxy(this.blurElement, this)
56
+ });
57
+ } else {
58
+ this.$element.on({
59
+ 'focus.timepicker': $.proxy(this.highlightUnit, this),
60
+ 'click.timepicker': $.proxy(this.highlightUnit, this),
61
+ 'keydown.timepicker': $.proxy(this.elementKeydown, this),
62
+ 'blur.timepicker': $.proxy(this.blurElement, this)
63
+ });
64
+ }
65
+ }
66
+
67
+ if (this.template !== false) {
68
+ this.$widget = $(this.getTemplate()).prependTo(this.$element.parents(this.appendWidgetTo)).on('click', $.proxy(this.widgetClick, this));
69
+ } else {
70
+ this.$widget = false;
71
+ }
72
+
73
+ if (this.showInputs && this.$widget !== false) {
74
+ this.$widget.find('input').each(function() {
75
+ $(this).on({
76
+ 'click.timepicker': function() { $(this).select(); },
77
+ 'keydown.timepicker': $.proxy(self.widgetKeydown, self)
78
+ });
79
+ });
80
+ }
81
+
82
+ this.setDefaultTime(this.defaultTime);
83
+ },
84
+
85
+ blurElement: function() {
86
+ this.highlightedUnit = undefined;
87
+ this.updateFromElementVal();
88
+ },
89
+
90
+ decrementHour: function() {
91
+ if (this.showMeridian) {
92
+ if (this.hour === 1) {
93
+ this.hour = 12;
94
+ } else if (this.hour === 12) {
95
+ this.hour--;
96
+
97
+ return this.toggleMeridian();
98
+ } else if (this.hour === 0) {
99
+ this.hour = 11;
100
+
101
+ return this.toggleMeridian();
102
+ } else {
103
+ this.hour--;
104
+ }
105
+ } else {
106
+ if (this.hour === 0) {
107
+ this.hour = 23;
108
+ } else {
109
+ this.hour--;
110
+ }
111
+ }
112
+ this.update();
113
+ },
114
+
115
+ decrementMinute: function(step) {
116
+ var newVal;
117
+
118
+ if (step) {
119
+ newVal = this.minute - step;
120
+ } else {
121
+ newVal = this.minute - this.minuteStep;
122
+ }
123
+
124
+ if (newVal < 0) {
125
+ this.decrementHour();
126
+ this.minute = newVal + 60;
127
+ } else {
128
+ this.minute = newVal;
129
+ }
130
+ this.update();
131
+ },
132
+
133
+ decrementSecond: function() {
134
+ var newVal = this.second - this.secondStep;
135
+
136
+ if (newVal < 0) {
137
+ this.decrementMinute(true);
138
+ this.second = newVal + 60;
139
+ } else {
140
+ this.second = newVal;
141
+ }
142
+ this.update();
143
+ },
144
+
145
+ elementKeydown: function(e) {
146
+ switch (e.keyCode) {
147
+ case 9: //tab
148
+ this.updateFromElementVal();
149
+
150
+ switch (this.highlightedUnit) {
151
+ case 'hour':
152
+ e.preventDefault();
153
+ this.highlightNextUnit();
154
+ break;
155
+ case 'minute':
156
+ if (this.showMeridian || this.showSeconds) {
157
+ e.preventDefault();
158
+ this.highlightNextUnit();
159
+ }
160
+ break;
161
+ case 'second':
162
+ if (this.showMeridian) {
163
+ e.preventDefault();
164
+ this.highlightNextUnit();
165
+ }
166
+ break;
167
+ }
168
+ break;
169
+ case 27: // escape
170
+ this.updateFromElementVal();
171
+ break;
172
+ case 37: // left arrow
173
+ e.preventDefault();
174
+ this.highlightPrevUnit();
175
+ this.updateFromElementVal();
176
+ break;
177
+ case 38: // up arrow
178
+ e.preventDefault();
179
+ switch (this.highlightedUnit) {
180
+ case 'hour':
181
+ this.incrementHour();
182
+ this.highlightHour();
183
+ break;
184
+ case 'minute':
185
+ this.incrementMinute();
186
+ this.highlightMinute();
187
+ break;
188
+ case 'second':
189
+ this.incrementSecond();
190
+ this.highlightSecond();
191
+ break;
192
+ case 'meridian':
193
+ this.toggleMeridian();
194
+ this.highlightMeridian();
195
+ break;
196
+ }
197
+ break;
198
+ case 39: // right arrow
199
+ e.preventDefault();
200
+ this.updateFromElementVal();
201
+ this.highlightNextUnit();
202
+ break;
203
+ case 40: // down arrow
204
+ e.preventDefault();
205
+ switch (this.highlightedUnit) {
206
+ case 'hour':
207
+ this.decrementHour();
208
+ this.highlightHour();
209
+ break;
210
+ case 'minute':
211
+ this.decrementMinute();
212
+ this.highlightMinute();
213
+ break;
214
+ case 'second':
215
+ this.decrementSecond();
216
+ this.highlightSecond();
217
+ break;
218
+ case 'meridian':
219
+ this.toggleMeridian();
220
+ this.highlightMeridian();
221
+ break;
222
+ }
223
+ break;
224
+ }
225
+ },
226
+
227
+ formatTime: function(hour, minute, second, meridian) {
228
+ hour = hour < 10 ? '0' + hour : hour;
229
+ minute = minute < 10 ? '0' + minute : minute;
230
+ second = second < 10 ? '0' + second : second;
231
+
232
+ return hour + ':' + minute + (this.showSeconds ? ':' + second : '') + (this.showMeridian ? ' ' + meridian : '');
233
+ },
234
+
235
+ getCursorPosition: function() {
236
+ var input = this.$element.get(0);
237
+
238
+ if ('selectionStart' in input) {// Standard-compliant browsers
239
+
240
+ return input.selectionStart;
241
+ } else if (document.selection) {// IE fix
242
+ input.focus();
243
+ var sel = document.selection.createRange(),
244
+ selLen = document.selection.createRange().text.length;
245
+
246
+ sel.moveStart('character', - input.value.length);
247
+
248
+ return sel.text.length - selLen;
249
+ }
250
+ },
251
+
252
+ getTemplate: function() {
253
+ var template,
254
+ hourTemplate,
255
+ minuteTemplate,
256
+ secondTemplate,
257
+ meridianTemplate,
258
+ templateContent;
259
+
260
+ if (this.showInputs) {
261
+ hourTemplate = '<input type="text" name="hour" class="bootstrap-timepicker-hour" maxlength="2"/>';
262
+ minuteTemplate = '<input type="text" name="minute" class="bootstrap-timepicker-minute" maxlength="2"/>';
263
+ secondTemplate = '<input type="text" name="second" class="bootstrap-timepicker-second" maxlength="2"/>';
264
+ meridianTemplate = '<input type="text" name="meridian" class="bootstrap-timepicker-meridian" maxlength="2"/>';
265
+ } else {
266
+ hourTemplate = '<span class="bootstrap-timepicker-hour"></span>';
267
+ minuteTemplate = '<span class="bootstrap-timepicker-minute"></span>';
268
+ secondTemplate = '<span class="bootstrap-timepicker-second"></span>';
269
+ meridianTemplate = '<span class="bootstrap-timepicker-meridian"></span>';
270
+ }
271
+
272
+ templateContent = '<table>'+
273
+ '<tr>'+
274
+ '<td><a href="#" data-action="incrementHour"><i class="fa fa-chevron-up"></i></a></td>'+
275
+ '<td class="separator">&nbsp;</td>'+
276
+ '<td><a href="#" data-action="incrementMinute"><i class="fa fa-chevron-up"></i></a></td>'+
277
+ (this.showSeconds ?
278
+ '<td class="separator">&nbsp;</td>'+
279
+ '<td><a href="#" data-action="incrementSecond"><i class="fa fa-chevron-up"></i></a></td>'
280
+ : '') +
281
+ (this.showMeridian ?
282
+ '<td class="separator">&nbsp;</td>'+
283
+ '<td class="meridian-column"><a href="#" data-action="toggleMeridian"><i class="fa fa-chevron-up"></i></a></td>'
284
+ : '') +
285
+ '</tr>'+
286
+ '<tr>'+
287
+ '<td>'+ hourTemplate +'</td> '+
288
+ '<td class="separator">:</td>'+
289
+ '<td>'+ minuteTemplate +'</td> '+
290
+ (this.showSeconds ?
291
+ '<td class="separator">:</td>'+
292
+ '<td>'+ secondTemplate +'</td>'
293
+ : '') +
294
+ (this.showMeridian ?
295
+ '<td class="separator">&nbsp;</td>'+
296
+ '<td>'+ meridianTemplate +'</td>'
297
+ : '') +
298
+ '</tr>'+
299
+ '<tr>'+
300
+ '<td><a href="#" data-action="decrementHour"><i class="fa fa-chevron-down"></i></a></td>'+
301
+ '<td class="separator"></td>'+
302
+ '<td><a href="#" data-action="decrementMinute"><i class="fa fa-chevron-down"></i></a></td>'+
303
+ (this.showSeconds ?
304
+ '<td class="separator">&nbsp;</td>'+
305
+ '<td><a href="#" data-action="decrementSecond"><i class="fa fa-chevron-down"></i></a></td>'
306
+ : '') +
307
+ (this.showMeridian ?
308
+ '<td class="separator">&nbsp;</td>'+
309
+ '<td><a href="#" data-action="toggleMeridian"><i class="fa fa-chevron-down"></i></a></td>'
310
+ : '') +
311
+ '</tr>'+
312
+ '</table>';
313
+
314
+ switch(this.template) {
315
+ case 'modal':
316
+ template = '<div class="bootstrap-timepicker-widget modal fade" data-backdrop="'+ (this.modalBackdrop ? 'true' : 'false') +'">'+
317
+ '<div class="modal-dialog">' +
318
+ '<div class="modal-content">' +
319
+ '<div class="modal-header">'+
320
+ '<a href="#" class="close" data-dismiss="modal">×</a>'+
321
+ '<h3>Pick a Time</h3>'+
322
+ '</div>'+
323
+ '<div class="modal-body">'+
324
+ templateContent +
325
+ '</div>'+
326
+ '<div class="modal-footer">'+
327
+ '<a href="#" class="btn btn-sm btn-primary" data-dismiss="modal">OK</a>'+
328
+ '</div>'+
329
+
330
+ '</div>' +
331
+ '</div>' +
332
+ '</div>';
333
+ break;
334
+ case 'dropdown':
335
+ template = '<div class="bootstrap-timepicker-widget dropdown-menu">'+ templateContent +'</div>';
336
+ break;
337
+ }
338
+
339
+ return template;
340
+ },
341
+
342
+ getTime: function() {
343
+ return this.formatTime(this.hour, this.minute, this.second, this.meridian);
344
+ },
345
+
346
+ hideWidget: function() {
347
+ if (this.isOpen === false) {
348
+ return;
349
+ }
350
+
351
+ if (this.showInputs) {
352
+ this.updateFromWidgetInputs();
353
+ }
354
+
355
+ this.$element.trigger({
356
+ 'type': 'hide.timepicker',
357
+ 'time': {
358
+ 'value': this.getTime(),
359
+ 'hours': this.hour,
360
+ 'minutes': this.minute,
361
+ 'seconds': this.second,
362
+ 'meridian': this.meridian
363
+ }
364
+ });
365
+
366
+ if (this.template === 'modal' && this.$widget.modal) {
367
+ this.$widget.modal('hide');
368
+ } else {
369
+ this.$widget.removeClass('open');
370
+ }
371
+
372
+ $(document).off('mousedown.timepicker');
373
+
374
+ this.isOpen = false;
375
+ },
376
+
377
+ highlightUnit: function() {
378
+ this.position = this.getCursorPosition();
379
+ if (this.position >= 0 && this.position <= 2) {
380
+ this.highlightHour();
381
+ } else if (this.position >= 3 && this.position <= 5) {
382
+ this.highlightMinute();
383
+ } else if (this.position >= 6 && this.position <= 8) {
384
+ if (this.showSeconds) {
385
+ this.highlightSecond();
386
+ } else {
387
+ this.highlightMeridian();
388
+ }
389
+ } else if (this.position >= 9 && this.position <= 11) {
390
+ this.highlightMeridian();
391
+ }
392
+ },
393
+
394
+ highlightNextUnit: function() {
395
+ switch (this.highlightedUnit) {
396
+ case 'hour':
397
+ this.highlightMinute();
398
+ break;
399
+ case 'minute':
400
+ if (this.showSeconds) {
401
+ this.highlightSecond();
402
+ } else if (this.showMeridian){
403
+ this.highlightMeridian();
404
+ } else {
405
+ this.highlightHour();
406
+ }
407
+ break;
408
+ case 'second':
409
+ if (this.showMeridian) {
410
+ this.highlightMeridian();
411
+ } else {
412
+ this.highlightHour();
413
+ }
414
+ break;
415
+ case 'meridian':
416
+ this.highlightHour();
417
+ break;
418
+ }
419
+ },
420
+
421
+ highlightPrevUnit: function() {
422
+ switch (this.highlightedUnit) {
423
+ case 'hour':
424
+ this.highlightMeridian();
425
+ break;
426
+ case 'minute':
427
+ this.highlightHour();
428
+ break;
429
+ case 'second':
430
+ this.highlightMinute();
431
+ break;
432
+ case 'meridian':
433
+ if (this.showSeconds) {
434
+ this.highlightSecond();
435
+ } else {
436
+ this.highlightMinute();
437
+ }
438
+ break;
439
+ }
440
+ },
441
+
442
+ highlightHour: function() {
443
+ var $element = this.$element.get(0);
444
+
445
+ this.highlightedUnit = 'hour';
446
+
447
+ if ($element.setSelectionRange) {
448
+ setTimeout(function() {
449
+ $element.setSelectionRange(0,2);
450
+ }, 0);
451
+ }
452
+ },
453
+
454
+ highlightMinute: function() {
455
+ var $element = this.$element.get(0);
456
+
457
+ this.highlightedUnit = 'minute';
458
+
459
+ if ($element.setSelectionRange) {
460
+ setTimeout(function() {
461
+ $element.setSelectionRange(3,5);
462
+ }, 0);
463
+ }
464
+ },
465
+
466
+ highlightSecond: function() {
467
+ var $element = this.$element.get(0);
468
+
469
+ this.highlightedUnit = 'second';
470
+
471
+ if ($element.setSelectionRange) {
472
+ setTimeout(function() {
473
+ $element.setSelectionRange(6,8);
474
+ }, 0);
475
+ }
476
+ },
477
+
478
+ highlightMeridian: function() {
479
+ var $element = this.$element.get(0);
480
+
481
+ this.highlightedUnit = 'meridian';
482
+
483
+ if ($element.setSelectionRange) {
484
+ if (this.showSeconds) {
485
+ setTimeout(function() {
486
+ $element.setSelectionRange(9,11);
487
+ }, 0);
488
+ } else {
489
+ setTimeout(function() {
490
+ $element.setSelectionRange(6,8);
491
+ }, 0);
492
+ }
493
+ }
494
+ },
495
+
496
+ incrementHour: function() {
497
+ if (this.showMeridian) {
498
+ if (this.hour === 11) {
499
+ this.hour++;
500
+ return this.toggleMeridian();
501
+ } else if (this.hour === 12) {
502
+ this.hour = 0;
503
+ }
504
+ }
505
+ if (this.hour === 23) {
506
+ this.hour = 0;
507
+
508
+ return;
509
+ }
510
+ this.hour++;
511
+ this.update();
512
+ },
513
+
514
+ incrementMinute: function(step) {
515
+ var newVal;
516
+
517
+ if (step) {
518
+ newVal = this.minute + step;
519
+ } else {
520
+ newVal = this.minute + this.minuteStep - (this.minute % this.minuteStep);
521
+ }
522
+
523
+ if (newVal > 59) {
524
+ this.incrementHour();
525
+ this.minute = newVal - 60;
526
+ } else {
527
+ this.minute = newVal;
528
+ }
529
+ this.update();
530
+ },
531
+
532
+ incrementSecond: function() {
533
+ var newVal = this.second + this.secondStep - (this.second % this.secondStep);
534
+
535
+ if (newVal > 59) {
536
+ this.incrementMinute(true);
537
+ this.second = newVal - 60;
538
+ } else {
539
+ this.second = newVal;
540
+ }
541
+ this.update();
542
+ },
543
+
544
+ remove: function() {
545
+ $('document').off('.timepicker');
546
+ if (this.$widget) {
547
+ this.$widget.remove();
548
+ }
549
+ delete this.$element.data().timepicker;
550
+ },
551
+
552
+ setDefaultTime: function(defaultTime){
553
+ if (!this.$element.val()) {
554
+ if (defaultTime === 'current') {
555
+ var dTime = new Date(),
556
+ hours = dTime.getHours(),
557
+ minutes = Math.floor(dTime.getMinutes() / this.minuteStep) * this.minuteStep,
558
+ seconds = Math.floor(dTime.getSeconds() / this.secondStep) * this.secondStep,
559
+ meridian = 'AM';
560
+
561
+ if (this.showMeridian) {
562
+ if (hours === 0) {
563
+ hours = 12;
564
+ } else if (hours >= 12) {
565
+ if (hours > 12) {
566
+ hours = hours - 12;
567
+ }
568
+ meridian = 'PM';
569
+ } else {
570
+ meridian = 'AM';
571
+ }
572
+ }
573
+
574
+ this.hour = hours;
575
+ this.minute = minutes;
576
+ this.second = seconds;
577
+ this.meridian = meridian;
578
+
579
+ this.update();
580
+
581
+ } else if (defaultTime === false) {
582
+ this.hour = 0;
583
+ this.minute = 0;
584
+ this.second = 0;
585
+ this.meridian = 'AM';
586
+ } else {
587
+ this.setTime(defaultTime);
588
+ }
589
+ } else {
590
+ this.updateFromElementVal();
591
+ }
592
+ },
593
+
594
+ setTime: function(time) {
595
+ var arr,
596
+ timeArray;
597
+
598
+ if (this.showMeridian) {
599
+ arr = time.split(' ');
600
+ timeArray = arr[0].split(':');
601
+ this.meridian = arr[1];
602
+ } else {
603
+ timeArray = time.split(':');
604
+ }
605
+
606
+ this.hour = parseInt(timeArray[0], 10);
607
+ this.minute = parseInt(timeArray[1], 10);
608
+ this.second = parseInt(timeArray[2], 10);
609
+
610
+ if (isNaN(this.hour)) {
611
+ this.hour = 0;
612
+ }
613
+ if (isNaN(this.minute)) {
614
+ this.minute = 0;
615
+ }
616
+
617
+ if (this.showMeridian) {
618
+ if (this.hour > 12) {
619
+ this.hour = 12;
620
+ } else if (this.hour < 1) {
621
+ this.hour = 12;
622
+ }
623
+
624
+ if (this.meridian === 'am' || this.meridian === 'a') {
625
+ this.meridian = 'AM';
626
+ } else if (this.meridian === 'pm' || this.meridian === 'p') {
627
+ this.meridian = 'PM';
628
+ }
629
+
630
+ if (this.meridian !== 'AM' && this.meridian !== 'PM') {
631
+ this.meridian = 'AM';
632
+ }
633
+ } else {
634
+ if (this.hour >= 24) {
635
+ this.hour = 23;
636
+ } else if (this.hour < 0) {
637
+ this.hour = 0;
638
+ }
639
+ }
640
+
641
+ if (this.minute < 0) {
642
+ this.minute = 0;
643
+ } else if (this.minute >= 60) {
644
+ this.minute = 59;
645
+ }
646
+
647
+ if (this.showSeconds) {
648
+ if (isNaN(this.second)) {
649
+ this.second = 0;
650
+ } else if (this.second < 0) {
651
+ this.second = 0;
652
+ } else if (this.second >= 60) {
653
+ this.second = 59;
654
+ }
655
+ }
656
+
657
+ this.update();
658
+ },
659
+
660
+ showWidget: function() {
661
+ if (this.isOpen) {
662
+ return;
663
+ }
664
+
665
+ if (this.$element.is(':disabled')) {
666
+ return;
667
+ }
668
+
669
+ var self = this;
670
+ $(document).on('mousedown.timepicker', function (e) {
671
+ // Clicked outside the timepicker, hide it
672
+ if ($(e.target).closest('.bootstrap-timepicker-widget').length === 0) {
673
+ self.hideWidget();
674
+ }
675
+ });
676
+
677
+ this.$element.trigger({
678
+ 'type': 'show.timepicker',
679
+ 'time': {
680
+ 'value': this.getTime(),
681
+ 'hours': this.hour,
682
+ 'minutes': this.minute,
683
+ 'seconds': this.second,
684
+ 'meridian': this.meridian
685
+ }
686
+ });
687
+
688
+ if (this.disableFocus) {
689
+ this.$element.blur();
690
+ }
691
+
692
+ this.updateFromElementVal();
693
+
694
+ if (this.template === 'modal' && this.$widget.modal) {
695
+ this.$widget.modal('show').on('hidden', $.proxy(this.hideWidget, this));
696
+ } else {
697
+ if (this.isOpen === false) {
698
+ this.$widget.addClass('open');
699
+ }
700
+ }
701
+
702
+ this.isOpen = true;
703
+ },
704
+
705
+ toggleMeridian: function() {
706
+ this.meridian = this.meridian === 'AM' ? 'PM' : 'AM';
707
+ this.update();
708
+ },
709
+
710
+ update: function() {
711
+ this.$element.trigger({
712
+ 'type': 'changeTime.timepicker',
713
+ 'time': {
714
+ 'value': this.getTime(),
715
+ 'hours': this.hour,
716
+ 'minutes': this.minute,
717
+ 'seconds': this.second,
718
+ 'meridian': this.meridian
719
+ }
720
+ });
721
+
722
+ this.updateElement();
723
+ this.updateWidget();
724
+ },
725
+
726
+ updateElement: function() {
727
+ this.$element.val(this.getTime()).change();
728
+ },
729
+
730
+ updateFromElementVal: function() {
731
+ var val = this.$element.val();
732
+
733
+ if (val) {
734
+ this.setTime(val);
735
+ }
736
+ },
737
+
738
+ updateWidget: function() {
739
+ if (this.$widget === false) {
740
+ return;
741
+ }
742
+
743
+ var hour = this.hour < 10 ? '0' + this.hour : this.hour,
744
+ minute = this.minute < 10 ? '0' + this.minute : this.minute,
745
+ second = this.second < 10 ? '0' + this.second : this.second;
746
+
747
+ if (this.showInputs) {
748
+ this.$widget.find('input.bootstrap-timepicker-hour').val(hour);
749
+ this.$widget.find('input.bootstrap-timepicker-minute').val(minute);
750
+
751
+ if (this.showSeconds) {
752
+ this.$widget.find('input.bootstrap-timepicker-second').val(second);
753
+ }
754
+ if (this.showMeridian) {
755
+ this.$widget.find('input.bootstrap-timepicker-meridian').val(this.meridian);
756
+ }
757
+ } else {
758
+ this.$widget.find('span.bootstrap-timepicker-hour').text(hour);
759
+ this.$widget.find('span.bootstrap-timepicker-minute').text(minute);
760
+
761
+ if (this.showSeconds) {
762
+ this.$widget.find('span.bootstrap-timepicker-second').text(second);
763
+ }
764
+ if (this.showMeridian) {
765
+ this.$widget.find('span.bootstrap-timepicker-meridian').text(this.meridian);
766
+ }
767
+ }
768
+ },
769
+
770
+ updateFromWidgetInputs: function() {
771
+ if (this.$widget === false) {
772
+ return;
773
+ }
774
+ var time = $('input.bootstrap-timepicker-hour', this.$widget).val() + ':' +
775
+ $('input.bootstrap-timepicker-minute', this.$widget).val() +
776
+ (this.showSeconds ? ':' + $('input.bootstrap-timepicker-second', this.$widget).val() : '') +
777
+ (this.showMeridian ? ' ' + $('input.bootstrap-timepicker-meridian', this.$widget).val() : '');
778
+
779
+ this.setTime(time);
780
+ },
781
+
782
+ widgetClick: function(e) {
783
+ e.stopPropagation();
784
+ e.preventDefault();
785
+
786
+ var action = $(e.target).closest('a').data('action');
787
+ if (action) {
788
+ this[action]();
789
+ }
790
+ },
791
+
792
+ widgetKeydown: function(e) {
793
+ var $input = $(e.target).closest('input'),
794
+ name = $input.attr('name');
795
+
796
+ switch (e.keyCode) {
797
+ case 9: //tab
798
+ if (this.showMeridian) {
799
+ if (name === 'meridian') {
800
+ return this.hideWidget();
801
+ }
802
+ } else {
803
+ if (this.showSeconds) {
804
+ if (name === 'second') {
805
+ return this.hideWidget();
806
+ }
807
+ } else {
808
+ if (name === 'minute') {
809
+ return this.hideWidget();
810
+ }
811
+ }
812
+ }
813
+
814
+ this.updateFromWidgetInputs();
815
+ break;
816
+ case 27: // escape
817
+ this.hideWidget();
818
+ break;
819
+ case 38: // up arrow
820
+ e.preventDefault();
821
+ switch (name) {
822
+ case 'hour':
823
+ this.incrementHour();
824
+ break;
825
+ case 'minute':
826
+ this.incrementMinute();
827
+ break;
828
+ case 'second':
829
+ this.incrementSecond();
830
+ break;
831
+ case 'meridian':
832
+ this.toggleMeridian();
833
+ break;
834
+ }
835
+ break;
836
+ case 40: // down arrow
837
+ e.preventDefault();
838
+ switch (name) {
839
+ case 'hour':
840
+ this.decrementHour();
841
+ break;
842
+ case 'minute':
843
+ this.decrementMinute();
844
+ break;
845
+ case 'second':
846
+ this.decrementSecond();
847
+ break;
848
+ case 'meridian':
849
+ this.toggleMeridian();
850
+ break;
851
+ }
852
+ break;
853
+ }
854
+ }
855
+ };
856
+
857
+
858
+ //TIMEPICKER PLUGIN DEFINITION
859
+ $.fn.timepicker = function(option) {
860
+ var args = Array.apply(null, arguments);
861
+ args.shift();
862
+ return this.each(function() {
863
+ var $this = $(this),
864
+ data = $this.data('timepicker'),
865
+ options = typeof option === 'object' && option;
866
+
867
+ if (!data) {
868
+ $this.data('timepicker', (data = new Timepicker(this, $.extend({}, $.fn.timepicker.defaults, options, $(this).data()))));
869
+ }
870
+
871
+ if (typeof option === 'string') {
872
+ data[option].apply(data, args);
873
+ }
874
+ });
875
+ };
876
+
877
+ $.fn.timepicker.defaults = {
878
+ defaultTime: 'current',
879
+ disableFocus: false,
880
+ isOpen: false,
881
+ minuteStep: 15,
882
+ modalBackdrop: false,
883
+ secondStep: 15,
884
+ showSeconds: false,
885
+ showInputs: true,
886
+ showMeridian: true,
887
+ template: 'dropdown',
888
+ appendWidgetTo: '.bootstrap-timepicker'
889
+ };
890
+
891
+ $.fn.timepicker.Constructor = Timepicker;
892
+
893
+ })(jQuery, window, document);