ext_yarn 0.1.2 → 0.2.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 (783) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +158 -132
  3. data/.yarnrc +1 -0
  4. data/bin/yarn +1 -1
  5. data/bin/yarn_after +15 -0
  6. data/ext_yarn.gemspec +1 -1
  7. data/lib/ext_yarn/engine.rb +3 -3
  8. data/lib/ext_yarn/version.rb +1 -1
  9. data/lib/ext_yarn.rb +1 -1
  10. data/package.json +7 -3
  11. data/{node_modules → vendor}/.yarn-integrity +18 -5
  12. data/vendor/bootstrap/LICENSE +22 -0
  13. data/vendor/bootstrap/dist/js/bootstrap.bundle.js +6461 -0
  14. data/vendor/bootstrap/dist/js/bootstrap.js +3944 -0
  15. data/vendor/bootstrap/js/dist/alert.js +204 -0
  16. data/vendor/bootstrap/js/dist/button.js +192 -0
  17. data/vendor/bootstrap/js/dist/carousel.js +567 -0
  18. data/vendor/bootstrap/js/dist/collapse.js +431 -0
  19. data/vendor/bootstrap/js/dist/dropdown.js +552 -0
  20. data/vendor/bootstrap/js/dist/index.js +23 -0
  21. data/vendor/bootstrap/js/dist/modal.js +634 -0
  22. data/vendor/bootstrap/js/dist/popover.js +266 -0
  23. data/vendor/bootstrap/js/dist/scrollspy.js +379 -0
  24. data/vendor/bootstrap/js/dist/tab.js +278 -0
  25. data/vendor/bootstrap/js/dist/tooltip.js +734 -0
  26. data/vendor/bootstrap/js/dist/util.js +144 -0
  27. data/vendor/bootstrap/package.json +217 -0
  28. data/vendor/bootstrap/scss/_alert.scss +51 -0
  29. data/vendor/bootstrap/scss/_badge.scss +47 -0
  30. data/vendor/bootstrap/scss/_breadcrumb.scss +41 -0
  31. data/vendor/bootstrap/scss/_button-group.scss +172 -0
  32. data/vendor/bootstrap/scss/_buttons.scss +143 -0
  33. data/vendor/bootstrap/scss/_card.scss +301 -0
  34. data/vendor/bootstrap/scss/_carousel.scss +236 -0
  35. data/vendor/bootstrap/scss/_close.scss +35 -0
  36. data/vendor/bootstrap/scss/_code.scss +48 -0
  37. data/vendor/bootstrap/scss/_custom-forms.scss +433 -0
  38. data/vendor/bootstrap/scss/_dropdown.scss +166 -0
  39. data/vendor/bootstrap/scss/_forms.scss +333 -0
  40. data/vendor/bootstrap/scss/_functions.scss +86 -0
  41. data/vendor/bootstrap/scss/_grid.scss +52 -0
  42. data/vendor/bootstrap/scss/_images.scss +42 -0
  43. data/vendor/bootstrap/scss/_input-group.scss +173 -0
  44. data/vendor/bootstrap/scss/_jumbotron.scss +16 -0
  45. data/vendor/bootstrap/scss/_list-group.scss +115 -0
  46. data/vendor/bootstrap/scss/_media.scss +8 -0
  47. data/vendor/bootstrap/scss/_mixins.scss +41 -0
  48. data/vendor/bootstrap/scss/_modal.scss +180 -0
  49. data/vendor/bootstrap/scss/_nav.scss +118 -0
  50. data/vendor/bootstrap/scss/_navbar.scss +299 -0
  51. data/vendor/bootstrap/scss/_pagination.scss +78 -0
  52. data/vendor/bootstrap/scss/_popover.scss +183 -0
  53. data/vendor/bootstrap/scss/_print.scss +141 -0
  54. data/vendor/bootstrap/scss/_progress.scss +34 -0
  55. data/vendor/bootstrap/scss/_reboot.scss +483 -0
  56. data/vendor/bootstrap/scss/_root.scss +19 -0
  57. data/vendor/bootstrap/scss/_tables.scss +187 -0
  58. data/vendor/bootstrap/scss/_tooltip.scss +115 -0
  59. data/vendor/bootstrap/scss/_transitions.scss +22 -0
  60. data/vendor/bootstrap/scss/_type.scss +125 -0
  61. data/vendor/bootstrap/scss/_utilities.scss +15 -0
  62. data/vendor/bootstrap/scss/_variables.scss +952 -0
  63. data/vendor/bootstrap/scss/bootstrap-grid.scss +32 -0
  64. data/vendor/bootstrap/scss/bootstrap-reboot.scss +12 -0
  65. data/vendor/bootstrap/scss/bootstrap.scss +42 -0
  66. data/vendor/bootstrap/scss/mixins/_alert.scss +13 -0
  67. data/vendor/bootstrap/scss/mixins/_background-variant.scss +21 -0
  68. data/vendor/bootstrap/scss/mixins/_badge.scss +12 -0
  69. data/vendor/bootstrap/scss/mixins/_border-radius.scss +35 -0
  70. data/vendor/bootstrap/scss/mixins/_box-shadow.scss +5 -0
  71. data/vendor/bootstrap/scss/mixins/_breakpoints.scss +123 -0
  72. data/vendor/bootstrap/scss/mixins/_buttons.scss +109 -0
  73. data/vendor/bootstrap/scss/mixins/_caret.scss +66 -0
  74. data/vendor/bootstrap/scss/mixins/_clearfix.scss +7 -0
  75. data/vendor/bootstrap/scss/mixins/_float.scss +11 -0
  76. data/vendor/bootstrap/scss/mixins/_forms.scss +147 -0
  77. data/vendor/bootstrap/scss/mixins/_gradients.scss +45 -0
  78. data/vendor/bootstrap/scss/mixins/_grid-framework.scss +67 -0
  79. data/vendor/bootstrap/scss/mixins/_grid.scss +52 -0
  80. data/vendor/bootstrap/scss/mixins/_hover.scss +37 -0
  81. data/vendor/bootstrap/scss/mixins/_image.scss +36 -0
  82. data/vendor/bootstrap/scss/mixins/_list-group.scss +21 -0
  83. data/vendor/bootstrap/scss/mixins/_lists.scss +7 -0
  84. data/vendor/bootstrap/scss/mixins/_nav-divider.scss +10 -0
  85. data/vendor/bootstrap/scss/mixins/_pagination.scss +22 -0
  86. data/vendor/bootstrap/scss/mixins/_reset-text.scss +17 -0
  87. data/vendor/bootstrap/scss/mixins/_resize.scss +6 -0
  88. data/vendor/bootstrap/scss/mixins/_screen-reader.scss +33 -0
  89. data/vendor/bootstrap/scss/mixins/_size.scss +6 -0
  90. data/vendor/bootstrap/scss/mixins/_table-row.scss +30 -0
  91. data/vendor/bootstrap/scss/mixins/_text-emphasis.scss +14 -0
  92. data/vendor/bootstrap/scss/mixins/_text-hide.scss +13 -0
  93. data/vendor/bootstrap/scss/mixins/_text-truncate.scss +8 -0
  94. data/vendor/bootstrap/scss/mixins/_transition.scss +13 -0
  95. data/vendor/bootstrap/scss/mixins/_visibility.scss +7 -0
  96. data/vendor/bootstrap/scss/utilities/_align.scss +8 -0
  97. data/vendor/bootstrap/scss/utilities/_background.scss +19 -0
  98. data/vendor/bootstrap/scss/utilities/_borders.scss +59 -0
  99. data/vendor/bootstrap/scss/utilities/_clearfix.scss +3 -0
  100. data/vendor/bootstrap/scss/utilities/_display.scss +38 -0
  101. data/vendor/bootstrap/scss/utilities/_embed.scss +52 -0
  102. data/vendor/bootstrap/scss/utilities/_flex.scss +51 -0
  103. data/vendor/bootstrap/scss/utilities/_float.scss +9 -0
  104. data/vendor/bootstrap/scss/utilities/_position.scss +37 -0
  105. data/vendor/bootstrap/scss/utilities/_screenreaders.scss +11 -0
  106. data/vendor/bootstrap/scss/utilities/_shadows.scss +6 -0
  107. data/vendor/bootstrap/scss/utilities/_sizing.scss +12 -0
  108. data/vendor/bootstrap/scss/utilities/_spacing.scss +51 -0
  109. data/vendor/bootstrap/scss/utilities/_text.scss +58 -0
  110. data/vendor/bootstrap/scss/utilities/_visibility.scss +11 -0
  111. data/vendor/bootswatch/LICENSE +21 -0
  112. data/vendor/bootswatch/dist/cerulean/_bootswatch.scss +99 -0
  113. data/vendor/bootswatch/dist/cerulean/_variables.scss +57 -0
  114. data/vendor/bootswatch/dist/cosmo/_bootswatch.scss +38 -0
  115. data/vendor/bootswatch/dist/cosmo/_variables.scss +68 -0
  116. data/vendor/bootswatch/dist/cyborg/_bootswatch.scss +230 -0
  117. data/vendor/bootswatch/dist/cyborg/_variables.scss +173 -0
  118. data/vendor/bootswatch/dist/darkly/_bootswatch.scss +186 -0
  119. data/vendor/bootswatch/dist/darkly/_variables.scss +178 -0
  120. data/vendor/bootswatch/dist/flatly/_bootswatch.scss +185 -0
  121. data/vendor/bootswatch/dist/flatly/_variables.scss +113 -0
  122. data/vendor/bootswatch/dist/journal/_bootswatch.scss +73 -0
  123. data/vendor/bootswatch/dist/journal/_variables.scss +60 -0
  124. data/vendor/bootswatch/dist/litera/_bootswatch.scss +212 -0
  125. data/vendor/bootswatch/dist/litera/_variables.scss +77 -0
  126. data/vendor/bootswatch/dist/lumen/_bootswatch.scss +429 -0
  127. data/vendor/bootswatch/dist/lumen/_variables.scss +82 -0
  128. data/vendor/bootswatch/dist/lux/_bootswatch.scss +157 -0
  129. data/vendor/bootswatch/dist/lux/_variables.scss +120 -0
  130. data/vendor/bootswatch/dist/materia/_bootswatch.scss +677 -0
  131. data/vendor/bootswatch/dist/materia/_variables.scss +131 -0
  132. data/vendor/bootswatch/dist/minty/_bootswatch.scss +258 -0
  133. data/vendor/bootswatch/dist/minty/_variables.scss +97 -0
  134. data/vendor/bootswatch/dist/pulse/_bootswatch.scss +154 -0
  135. data/vendor/bootswatch/dist/pulse/_variables.scss +100 -0
  136. data/vendor/bootswatch/dist/sandstone/_bootswatch.scss +235 -0
  137. data/vendor/bootswatch/dist/sandstone/_variables.scss +143 -0
  138. data/vendor/bootswatch/dist/simplex/_bootswatch.scss +130 -0
  139. data/vendor/bootswatch/dist/simplex/_variables.scss +108 -0
  140. data/vendor/bootswatch/dist/sketchy/_bootswatch.scss +411 -0
  141. data/vendor/bootswatch/dist/sketchy/_variables.scss +164 -0
  142. data/vendor/bootswatch/dist/slate/_bootswatch.scss +425 -0
  143. data/vendor/bootswatch/dist/slate/_variables.scss +160 -0
  144. data/vendor/bootswatch/dist/solar/_bootswatch.scss +119 -0
  145. data/vendor/bootswatch/dist/solar/_variables.scss +175 -0
  146. data/vendor/bootswatch/dist/spacelab/_bootswatch.scss +167 -0
  147. data/vendor/bootswatch/dist/spacelab/_variables.scss +63 -0
  148. data/vendor/bootswatch/dist/superhero/_bootswatch.scss +200 -0
  149. data/vendor/bootswatch/dist/superhero/_variables.scss +148 -0
  150. data/vendor/bootswatch/dist/united/_bootswatch.scss +26 -0
  151. data/vendor/bootswatch/dist/united/_variables.scss +53 -0
  152. data/vendor/bootswatch/dist/yeti/_bootswatch.scss +468 -0
  153. data/vendor/bootswatch/dist/yeti/_variables.scss +110 -0
  154. data/vendor/bootswatch/package.json +38 -0
  155. data/{node_modules → vendor}/chartkick/chartkick.js +867 -848
  156. data/{node_modules → vendor}/eonasdan-bootstrap-datetimepicker/LICENSE +21 -21
  157. data/{node_modules → vendor}/moment-timezone/LICENSE +19 -19
  158. data/vendor/popper.js/dist/umd/popper-utils.js +1133 -0
  159. data/vendor/popper.js/dist/umd/popper.js +2540 -0
  160. data/vendor/popper.js/package.json +54 -0
  161. data/vendor/tempusdominus-bootstrap-4/LICENSE +21 -0
  162. data/vendor/tempusdominus-bootstrap-4/build/js/tempusdominus-bootstrap-4.js +2779 -0
  163. data/vendor/tempusdominus-bootstrap-4/package.json +79 -0
  164. data/vendor/tempusdominus-bootstrap-4/src/sass/_tempusdominus-bootstrap-4.scss +342 -0
  165. data/vendor/tempusdominus-bootstrap-4/src/sass/tempusdominus-bootstrap-4-build.scss +12 -0
  166. data/yarn.lock +65 -2
  167. metadata +778 -626
  168. data/Gemfile.lock +0 -78
  169. /data/{node_modules → vendor}/bootstrap-sass/LICENSE +0 -0
  170. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/affix.js +0 -0
  171. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/alert.js +0 -0
  172. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/button.js +0 -0
  173. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/carousel.js +0 -0
  174. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/collapse.js +0 -0
  175. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/dropdown.js +0 -0
  176. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/modal.js +0 -0
  177. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/popover.js +0 -0
  178. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/scrollspy.js +0 -0
  179. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/tab.js +0 -0
  180. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js +0 -0
  181. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap/transition.js +0 -0
  182. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap-sprockets.js +0 -0
  183. /data/{node_modules → vendor}/bootstrap-sass/assets/javascripts/bootstrap.js +0 -0
  184. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/_bootstrap-compass.scss +0 -0
  185. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/_bootstrap-mincer.scss +0 -0
  186. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/_bootstrap-sprockets.scss +0 -0
  187. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/_bootstrap.scss +0 -0
  188. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_alerts.scss +0 -0
  189. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_badges.scss +0 -0
  190. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_breadcrumbs.scss +0 -0
  191. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_button-groups.scss +0 -0
  192. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_buttons.scss +0 -0
  193. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_carousel.scss +0 -0
  194. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_close.scss +0 -0
  195. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_code.scss +0 -0
  196. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_component-animations.scss +0 -0
  197. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_dropdowns.scss +0 -0
  198. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_forms.scss +0 -0
  199. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_glyphicons.scss +0 -0
  200. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_grid.scss +0 -0
  201. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_input-groups.scss +0 -0
  202. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_jumbotron.scss +0 -0
  203. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_labels.scss +0 -0
  204. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_list-group.scss +0 -0
  205. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_media.scss +0 -0
  206. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_mixins.scss +0 -0
  207. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_modals.scss +0 -0
  208. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_navbar.scss +0 -0
  209. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_navs.scss +0 -0
  210. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_normalize.scss +0 -0
  211. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_pager.scss +0 -0
  212. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_pagination.scss +0 -0
  213. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_panels.scss +0 -0
  214. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_popovers.scss +0 -0
  215. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_print.scss +0 -0
  216. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_progress-bars.scss +0 -0
  217. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-embed.scss +0 -0
  218. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_responsive-utilities.scss +0 -0
  219. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_scaffolding.scss +0 -0
  220. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_tables.scss +0 -0
  221. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_theme.scss +0 -0
  222. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_thumbnails.scss +0 -0
  223. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_tooltip.scss +0 -0
  224. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_type.scss +0 -0
  225. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_utilities.scss +0 -0
  226. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_variables.scss +0 -0
  227. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/_wells.scss +0 -0
  228. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_alerts.scss +0 -0
  229. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_background-variant.scss +0 -0
  230. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_border-radius.scss +0 -0
  231. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_buttons.scss +0 -0
  232. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_center-block.scss +0 -0
  233. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_clearfix.scss +0 -0
  234. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_forms.scss +0 -0
  235. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_gradients.scss +0 -0
  236. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid-framework.scss +0 -0
  237. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_grid.scss +0 -0
  238. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_hide-text.scss +0 -0
  239. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_image.scss +0 -0
  240. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_labels.scss +0 -0
  241. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_list-group.scss +0 -0
  242. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-divider.scss +0 -0
  243. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_nav-vertical-align.scss +0 -0
  244. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_opacity.scss +0 -0
  245. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_pagination.scss +0 -0
  246. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_panels.scss +0 -0
  247. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_progress-bar.scss +0 -0
  248. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-filter.scss +0 -0
  249. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_reset-text.scss +0 -0
  250. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_resize.scss +0 -0
  251. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_responsive-visibility.scss +0 -0
  252. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_size.scss +0 -0
  253. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_tab-focus.scss +0 -0
  254. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_table-row.scss +0 -0
  255. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-emphasis.scss +0 -0
  256. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_text-overflow.scss +0 -0
  257. /data/{node_modules → vendor}/bootstrap-sass/assets/stylesheets/bootstrap/mixins/_vendor-prefixes.scss +0 -0
  258. /data/{node_modules → vendor}/bootstrap-sass/package.json +0 -0
  259. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/LICENSE +0 -0
  260. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/cerulean/_bootswatch.scss +0 -0
  261. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/cerulean/_variables.scss +0 -0
  262. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/cosmo/_bootswatch.scss +0 -0
  263. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/cosmo/_variables.scss +0 -0
  264. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/cyborg/_bootswatch.scss +0 -0
  265. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/cyborg/_variables.scss +0 -0
  266. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/darkly/_bootswatch.scss +0 -0
  267. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/darkly/_variables.scss +0 -0
  268. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/flatly/_bootswatch.scss +0 -0
  269. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/flatly/_variables.scss +0 -0
  270. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/journal/_bootswatch.scss +0 -0
  271. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/journal/_variables.scss +0 -0
  272. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/lumen/_bootswatch.scss +0 -0
  273. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/lumen/_variables.scss +0 -0
  274. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/package.json +0 -0
  275. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/paper/_bootswatch.scss +0 -0
  276. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/paper/_variables.scss +0 -0
  277. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/readable/_bootswatch.scss +0 -0
  278. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/readable/_variables.scss +0 -0
  279. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/sandstone/_bootswatch.scss +0 -0
  280. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/sandstone/_variables.scss +0 -0
  281. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/simplex/_bootswatch.scss +0 -0
  282. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/simplex/_variables.scss +0 -0
  283. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/slate/_bootswatch.scss +0 -0
  284. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/slate/_variables.scss +0 -0
  285. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/spacelab/_bootswatch.scss +0 -0
  286. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/spacelab/_variables.scss +0 -0
  287. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/superhero/_bootswatch.scss +0 -0
  288. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/superhero/_variables.scss +0 -0
  289. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/united/_bootswatch.scss +0 -0
  290. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/united/_variables.scss +0 -0
  291. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/yeti/_bootswatch.scss +0 -0
  292. /data/{node_modules/bootswatch → vendor/bootswatch-sass}/yeti/_variables.scss +0 -0
  293. /data/{node_modules → vendor}/chart.js/LICENSE.md +0 -0
  294. /data/{node_modules → vendor}/chart.js/dist/Chart.bundle.js +0 -0
  295. /data/{node_modules → vendor}/chart.js/dist/Chart.js +0 -0
  296. /data/{node_modules → vendor}/chart.js/package.json +0 -0
  297. /data/{node_modules → vendor}/chartkick/LICENSE.txt +0 -0
  298. /data/{node_modules → vendor}/chartkick/package.json +0 -0
  299. /data/{node_modules → vendor}/eonasdan-bootstrap-datetimepicker/package.json +0 -0
  300. /data/{node_modules → vendor}/eonasdan-bootstrap-datetimepicker/src/js/bootstrap-datetimepicker.js +0 -0
  301. /data/{node_modules → vendor}/eonasdan-bootstrap-datetimepicker/src/sass/_bootstrap-datetimepicker.scss +0 -0
  302. /data/{node_modules → vendor}/eonasdan-bootstrap-datetimepicker/src/sass/bootstrap-datetimepicker-build.scss +0 -0
  303. /data/{node_modules → vendor}/file-saver/FileSaver.js +0 -0
  304. /data/{node_modules → vendor}/file-saver/LICENSE.md +0 -0
  305. /data/{node_modules → vendor}/file-saver/package.json +0 -0
  306. /data/{node_modules → vendor}/font-awesome-sass/LICENSE.txt +0 -0
  307. /data/{node_modules → vendor}/font-awesome-sass/assets/fonts/font-awesome/fontawesome-webfont.eot +0 -0
  308. /data/{node_modules → vendor}/font-awesome-sass/assets/fonts/font-awesome/fontawesome-webfont.svg +0 -0
  309. /data/{node_modules → vendor}/font-awesome-sass/assets/fonts/font-awesome/fontawesome-webfont.ttf +0 -0
  310. /data/{node_modules → vendor}/font-awesome-sass/assets/fonts/font-awesome/fontawesome-webfont.woff +0 -0
  311. /data/{node_modules → vendor}/font-awesome-sass/assets/fonts/font-awesome/fontawesome-webfont.woff2 +0 -0
  312. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/_font-awesome-compass.scss +0 -0
  313. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/_font-awesome-sprockets.scss +0 -0
  314. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/_font-awesome.scss +0 -0
  315. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_animated.scss +0 -0
  316. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_bordered-pulled.scss +0 -0
  317. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_core.scss +0 -0
  318. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_fixed-width.scss +0 -0
  319. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_icons.scss +0 -0
  320. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_larger.scss +0 -0
  321. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_list.scss +0 -0
  322. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_mixins.scss +0 -0
  323. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_path.scss +0 -0
  324. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_rotated-flipped.scss +0 -0
  325. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_screen-reader.scss +0 -0
  326. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_stacked.scss +0 -0
  327. /data/{node_modules → vendor}/font-awesome-sass/assets/stylesheets/font-awesome/_variables.scss +0 -0
  328. /data/{node_modules → vendor}/font-awesome-sass/package.json +0 -0
  329. /data/{node_modules → vendor}/jquery/LICENSE.txt +0 -0
  330. /data/{node_modules → vendor}/jquery/dist/jquery.js +0 -0
  331. /data/{node_modules → vendor}/jquery/dist/jquery.slim.js +0 -0
  332. /data/{node_modules → vendor}/jquery/package.json +0 -0
  333. /data/{node_modules → vendor}/jquery-pjax/LICENSE +0 -0
  334. /data/{node_modules → vendor}/jquery-pjax/jquery.pjax.js +0 -0
  335. /data/{node_modules → vendor}/jquery-pjax/package.json +0 -0
  336. /data/{node_modules → vendor}/jquery-ui/LICENSE.txt +0 -0
  337. /data/{node_modules → vendor}/jquery-ui/package.json +0 -0
  338. /data/{node_modules → vendor}/jquery-ui/themes/base/accordion.css +0 -0
  339. /data/{node_modules → vendor}/jquery-ui/themes/base/all.css +0 -0
  340. /data/{node_modules → vendor}/jquery-ui/themes/base/autocomplete.css +0 -0
  341. /data/{node_modules → vendor}/jquery-ui/themes/base/base.css +0 -0
  342. /data/{node_modules → vendor}/jquery-ui/themes/base/button.css +0 -0
  343. /data/{node_modules → vendor}/jquery-ui/themes/base/checkboxradio.css +0 -0
  344. /data/{node_modules → vendor}/jquery-ui/themes/base/controlgroup.css +0 -0
  345. /data/{node_modules → vendor}/jquery-ui/themes/base/core.css +0 -0
  346. /data/{node_modules → vendor}/jquery-ui/themes/base/datepicker.css +0 -0
  347. /data/{node_modules → vendor}/jquery-ui/themes/base/dialog.css +0 -0
  348. /data/{node_modules → vendor}/jquery-ui/themes/base/draggable.css +0 -0
  349. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-bg_flat_0_aaaaaa_40x100.png +0 -0
  350. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-icons_444444_256x240.png +0 -0
  351. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-icons_555555_256x240.png +0 -0
  352. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-icons_777620_256x240.png +0 -0
  353. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-icons_777777_256x240.png +0 -0
  354. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-icons_cc0000_256x240.png +0 -0
  355. /data/{node_modules → vendor}/jquery-ui/themes/base/images/ui-icons_ffffff_256x240.png +0 -0
  356. /data/{node_modules → vendor}/jquery-ui/themes/base/menu.css +0 -0
  357. /data/{node_modules → vendor}/jquery-ui/themes/base/progressbar.css +0 -0
  358. /data/{node_modules → vendor}/jquery-ui/themes/base/resizable.css +0 -0
  359. /data/{node_modules → vendor}/jquery-ui/themes/base/selectable.css +0 -0
  360. /data/{node_modules → vendor}/jquery-ui/themes/base/selectmenu.css +0 -0
  361. /data/{node_modules → vendor}/jquery-ui/themes/base/slider.css +0 -0
  362. /data/{node_modules → vendor}/jquery-ui/themes/base/sortable.css +0 -0
  363. /data/{node_modules → vendor}/jquery-ui/themes/base/spinner.css +0 -0
  364. /data/{node_modules → vendor}/jquery-ui/themes/base/tabs.css +0 -0
  365. /data/{node_modules → vendor}/jquery-ui/themes/base/theme.css +0 -0
  366. /data/{node_modules → vendor}/jquery-ui/themes/base/tooltip.css +0 -0
  367. /data/{node_modules → vendor}/jquery-ui/ui/core.js +0 -0
  368. /data/{node_modules → vendor}/jquery-ui/ui/data.js +0 -0
  369. /data/{node_modules → vendor}/jquery-ui/ui/disable-selection.js +0 -0
  370. /data/{node_modules → vendor}/jquery-ui/ui/effect.js +0 -0
  371. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-blind.js +0 -0
  372. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-bounce.js +0 -0
  373. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-clip.js +0 -0
  374. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-drop.js +0 -0
  375. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-explode.js +0 -0
  376. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-fade.js +0 -0
  377. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-fold.js +0 -0
  378. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-highlight.js +0 -0
  379. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-puff.js +0 -0
  380. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-pulsate.js +0 -0
  381. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-scale.js +0 -0
  382. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-shake.js +0 -0
  383. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-size.js +0 -0
  384. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-slide.js +0 -0
  385. /data/{node_modules → vendor}/jquery-ui/ui/effects/effect-transfer.js +0 -0
  386. /data/{node_modules → vendor}/jquery-ui/ui/escape-selector.js +0 -0
  387. /data/{node_modules → vendor}/jquery-ui/ui/focusable.js +0 -0
  388. /data/{node_modules → vendor}/jquery-ui/ui/form-reset-mixin.js +0 -0
  389. /data/{node_modules → vendor}/jquery-ui/ui/form.js +0 -0
  390. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-af.js +0 -0
  391. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ar-DZ.js +0 -0
  392. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ar.js +0 -0
  393. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-az.js +0 -0
  394. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-be.js +0 -0
  395. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-bg.js +0 -0
  396. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-bs.js +0 -0
  397. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ca.js +0 -0
  398. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-cs.js +0 -0
  399. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-cy-GB.js +0 -0
  400. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-da.js +0 -0
  401. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-de.js +0 -0
  402. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-el.js +0 -0
  403. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-en-AU.js +0 -0
  404. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-en-GB.js +0 -0
  405. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-en-NZ.js +0 -0
  406. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-eo.js +0 -0
  407. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-es.js +0 -0
  408. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-et.js +0 -0
  409. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-eu.js +0 -0
  410. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-fa.js +0 -0
  411. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-fi.js +0 -0
  412. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-fo.js +0 -0
  413. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-fr-CA.js +0 -0
  414. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-fr-CH.js +0 -0
  415. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-fr.js +0 -0
  416. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-gl.js +0 -0
  417. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-he.js +0 -0
  418. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-hi.js +0 -0
  419. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-hr.js +0 -0
  420. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-hu.js +0 -0
  421. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-hy.js +0 -0
  422. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-id.js +0 -0
  423. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-is.js +0 -0
  424. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-it-CH.js +0 -0
  425. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-it.js +0 -0
  426. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ja.js +0 -0
  427. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ka.js +0 -0
  428. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-kk.js +0 -0
  429. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-km.js +0 -0
  430. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ko.js +0 -0
  431. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ky.js +0 -0
  432. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-lb.js +0 -0
  433. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-lt.js +0 -0
  434. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-lv.js +0 -0
  435. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-mk.js +0 -0
  436. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ml.js +0 -0
  437. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ms.js +0 -0
  438. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-nb.js +0 -0
  439. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-nl-BE.js +0 -0
  440. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-nl.js +0 -0
  441. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-nn.js +0 -0
  442. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-no.js +0 -0
  443. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-pl.js +0 -0
  444. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-pt-BR.js +0 -0
  445. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-pt.js +0 -0
  446. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-rm.js +0 -0
  447. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ro.js +0 -0
  448. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ru.js +0 -0
  449. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-sk.js +0 -0
  450. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-sl.js +0 -0
  451. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-sq.js +0 -0
  452. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-sr-SR.js +0 -0
  453. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-sr.js +0 -0
  454. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-sv.js +0 -0
  455. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-ta.js +0 -0
  456. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-th.js +0 -0
  457. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-tj.js +0 -0
  458. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-tr.js +0 -0
  459. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-uk.js +0 -0
  460. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-vi.js +0 -0
  461. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-zh-CN.js +0 -0
  462. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-zh-HK.js +0 -0
  463. /data/{node_modules → vendor}/jquery-ui/ui/i18n/datepicker-zh-TW.js +0 -0
  464. /data/{node_modules → vendor}/jquery-ui/ui/ie.js +0 -0
  465. /data/{node_modules → vendor}/jquery-ui/ui/jquery-1-7.js +0 -0
  466. /data/{node_modules → vendor}/jquery-ui/ui/keycode.js +0 -0
  467. /data/{node_modules → vendor}/jquery-ui/ui/labels.js +0 -0
  468. /data/{node_modules → vendor}/jquery-ui/ui/plugin.js +0 -0
  469. /data/{node_modules → vendor}/jquery-ui/ui/position.js +0 -0
  470. /data/{node_modules → vendor}/jquery-ui/ui/safe-active-element.js +0 -0
  471. /data/{node_modules → vendor}/jquery-ui/ui/safe-blur.js +0 -0
  472. /data/{node_modules → vendor}/jquery-ui/ui/scroll-parent.js +0 -0
  473. /data/{node_modules → vendor}/jquery-ui/ui/tabbable.js +0 -0
  474. /data/{node_modules → vendor}/jquery-ui/ui/unique-id.js +0 -0
  475. /data/{node_modules → vendor}/jquery-ui/ui/version.js +0 -0
  476. /data/{node_modules → vendor}/jquery-ui/ui/widget.js +0 -0
  477. /data/{node_modules → vendor}/jquery-ui/ui/widgets/accordion.js +0 -0
  478. /data/{node_modules → vendor}/jquery-ui/ui/widgets/autocomplete.js +0 -0
  479. /data/{node_modules → vendor}/jquery-ui/ui/widgets/button.js +0 -0
  480. /data/{node_modules → vendor}/jquery-ui/ui/widgets/checkboxradio.js +0 -0
  481. /data/{node_modules → vendor}/jquery-ui/ui/widgets/controlgroup.js +0 -0
  482. /data/{node_modules → vendor}/jquery-ui/ui/widgets/datepicker.js +0 -0
  483. /data/{node_modules → vendor}/jquery-ui/ui/widgets/dialog.js +0 -0
  484. /data/{node_modules → vendor}/jquery-ui/ui/widgets/draggable.js +0 -0
  485. /data/{node_modules → vendor}/jquery-ui/ui/widgets/droppable.js +0 -0
  486. /data/{node_modules → vendor}/jquery-ui/ui/widgets/menu.js +0 -0
  487. /data/{node_modules → vendor}/jquery-ui/ui/widgets/mouse.js +0 -0
  488. /data/{node_modules → vendor}/jquery-ui/ui/widgets/progressbar.js +0 -0
  489. /data/{node_modules → vendor}/jquery-ui/ui/widgets/resizable.js +0 -0
  490. /data/{node_modules → vendor}/jquery-ui/ui/widgets/selectable.js +0 -0
  491. /data/{node_modules → vendor}/jquery-ui/ui/widgets/selectmenu.js +0 -0
  492. /data/{node_modules → vendor}/jquery-ui/ui/widgets/slider.js +0 -0
  493. /data/{node_modules → vendor}/jquery-ui/ui/widgets/sortable.js +0 -0
  494. /data/{node_modules → vendor}/jquery-ui/ui/widgets/spinner.js +0 -0
  495. /data/{node_modules → vendor}/jquery-ui/ui/widgets/tabs.js +0 -0
  496. /data/{node_modules → vendor}/jquery-ui/ui/widgets/tooltip.js +0 -0
  497. /data/{node_modules → vendor}/jquery-ujs/MIT-LICENSE +0 -0
  498. /data/{node_modules → vendor}/jquery-ujs/package.json +0 -0
  499. /data/{node_modules → vendor}/jquery-ujs/src/rails.js +0 -0
  500. /data/{node_modules → vendor}/js-cookie/LICENSE +0 -0
  501. /data/{node_modules → vendor}/js-cookie/package.json +0 -0
  502. /data/{node_modules → vendor}/js-cookie/src/js.cookie.js +0 -0
  503. /data/{node_modules → vendor}/jstz/LICENCE +0 -0
  504. /data/{node_modules → vendor}/jstz/dist/jstz.js +0 -0
  505. /data/{node_modules → vendor}/jstz/package.json +0 -0
  506. /data/{node_modules → vendor}/lodash/LICENSE +0 -0
  507. /data/{node_modules → vendor}/lodash/core.js +0 -0
  508. /data/{node_modules → vendor}/lodash/lodash.js +0 -0
  509. /data/{node_modules → vendor}/lodash/package.json +0 -0
  510. /data/{node_modules → vendor}/moment/LICENSE +0 -0
  511. /data/{node_modules → vendor}/moment/locale/af.js +0 -0
  512. /data/{node_modules → vendor}/moment/locale/ar-dz.js +0 -0
  513. /data/{node_modules → vendor}/moment/locale/ar-kw.js +0 -0
  514. /data/{node_modules → vendor}/moment/locale/ar-ly.js +0 -0
  515. /data/{node_modules → vendor}/moment/locale/ar-ma.js +0 -0
  516. /data/{node_modules → vendor}/moment/locale/ar-sa.js +0 -0
  517. /data/{node_modules → vendor}/moment/locale/ar-tn.js +0 -0
  518. /data/{node_modules → vendor}/moment/locale/ar.js +0 -0
  519. /data/{node_modules → vendor}/moment/locale/az.js +0 -0
  520. /data/{node_modules → vendor}/moment/locale/be.js +0 -0
  521. /data/{node_modules → vendor}/moment/locale/bg.js +0 -0
  522. /data/{node_modules → vendor}/moment/locale/bm.js +0 -0
  523. /data/{node_modules → vendor}/moment/locale/bn.js +0 -0
  524. /data/{node_modules → vendor}/moment/locale/bo.js +0 -0
  525. /data/{node_modules → vendor}/moment/locale/br.js +0 -0
  526. /data/{node_modules → vendor}/moment/locale/bs.js +0 -0
  527. /data/{node_modules → vendor}/moment/locale/ca.js +0 -0
  528. /data/{node_modules → vendor}/moment/locale/cs.js +0 -0
  529. /data/{node_modules → vendor}/moment/locale/cv.js +0 -0
  530. /data/{node_modules → vendor}/moment/locale/cy.js +0 -0
  531. /data/{node_modules → vendor}/moment/locale/da.js +0 -0
  532. /data/{node_modules → vendor}/moment/locale/de-at.js +0 -0
  533. /data/{node_modules → vendor}/moment/locale/de-ch.js +0 -0
  534. /data/{node_modules → vendor}/moment/locale/de.js +0 -0
  535. /data/{node_modules → vendor}/moment/locale/dv.js +0 -0
  536. /data/{node_modules → vendor}/moment/locale/el.js +0 -0
  537. /data/{node_modules → vendor}/moment/locale/en-au.js +0 -0
  538. /data/{node_modules → vendor}/moment/locale/en-ca.js +0 -0
  539. /data/{node_modules → vendor}/moment/locale/en-gb.js +0 -0
  540. /data/{node_modules → vendor}/moment/locale/en-ie.js +0 -0
  541. /data/{node_modules → vendor}/moment/locale/en-nz.js +0 -0
  542. /data/{node_modules → vendor}/moment/locale/eo.js +0 -0
  543. /data/{node_modules → vendor}/moment/locale/es-do.js +0 -0
  544. /data/{node_modules → vendor}/moment/locale/es-us.js +0 -0
  545. /data/{node_modules → vendor}/moment/locale/es.js +0 -0
  546. /data/{node_modules → vendor}/moment/locale/et.js +0 -0
  547. /data/{node_modules → vendor}/moment/locale/eu.js +0 -0
  548. /data/{node_modules → vendor}/moment/locale/fa.js +0 -0
  549. /data/{node_modules → vendor}/moment/locale/fi.js +0 -0
  550. /data/{node_modules → vendor}/moment/locale/fo.js +0 -0
  551. /data/{node_modules → vendor}/moment/locale/fr-ca.js +0 -0
  552. /data/{node_modules → vendor}/moment/locale/fr-ch.js +0 -0
  553. /data/{node_modules → vendor}/moment/locale/fr.js +0 -0
  554. /data/{node_modules → vendor}/moment/locale/fy.js +0 -0
  555. /data/{node_modules → vendor}/moment/locale/gd.js +0 -0
  556. /data/{node_modules → vendor}/moment/locale/gl.js +0 -0
  557. /data/{node_modules → vendor}/moment/locale/gom-latn.js +0 -0
  558. /data/{node_modules → vendor}/moment/locale/gu.js +0 -0
  559. /data/{node_modules → vendor}/moment/locale/he.js +0 -0
  560. /data/{node_modules → vendor}/moment/locale/hi.js +0 -0
  561. /data/{node_modules → vendor}/moment/locale/hr.js +0 -0
  562. /data/{node_modules → vendor}/moment/locale/hu.js +0 -0
  563. /data/{node_modules → vendor}/moment/locale/hy-am.js +0 -0
  564. /data/{node_modules → vendor}/moment/locale/id.js +0 -0
  565. /data/{node_modules → vendor}/moment/locale/is.js +0 -0
  566. /data/{node_modules → vendor}/moment/locale/it.js +0 -0
  567. /data/{node_modules → vendor}/moment/locale/ja.js +0 -0
  568. /data/{node_modules → vendor}/moment/locale/jv.js +0 -0
  569. /data/{node_modules → vendor}/moment/locale/ka.js +0 -0
  570. /data/{node_modules → vendor}/moment/locale/kk.js +0 -0
  571. /data/{node_modules → vendor}/moment/locale/km.js +0 -0
  572. /data/{node_modules → vendor}/moment/locale/kn.js +0 -0
  573. /data/{node_modules → vendor}/moment/locale/ko.js +0 -0
  574. /data/{node_modules → vendor}/moment/locale/ky.js +0 -0
  575. /data/{node_modules → vendor}/moment/locale/lb.js +0 -0
  576. /data/{node_modules → vendor}/moment/locale/lo.js +0 -0
  577. /data/{node_modules → vendor}/moment/locale/lt.js +0 -0
  578. /data/{node_modules → vendor}/moment/locale/lv.js +0 -0
  579. /data/{node_modules → vendor}/moment/locale/me.js +0 -0
  580. /data/{node_modules → vendor}/moment/locale/mi.js +0 -0
  581. /data/{node_modules → vendor}/moment/locale/mk.js +0 -0
  582. /data/{node_modules → vendor}/moment/locale/ml.js +0 -0
  583. /data/{node_modules → vendor}/moment/locale/mr.js +0 -0
  584. /data/{node_modules → vendor}/moment/locale/ms-my.js +0 -0
  585. /data/{node_modules → vendor}/moment/locale/ms.js +0 -0
  586. /data/{node_modules → vendor}/moment/locale/mt.js +0 -0
  587. /data/{node_modules → vendor}/moment/locale/my.js +0 -0
  588. /data/{node_modules → vendor}/moment/locale/nb.js +0 -0
  589. /data/{node_modules → vendor}/moment/locale/ne.js +0 -0
  590. /data/{node_modules → vendor}/moment/locale/nl-be.js +0 -0
  591. /data/{node_modules → vendor}/moment/locale/nl.js +0 -0
  592. /data/{node_modules → vendor}/moment/locale/nn.js +0 -0
  593. /data/{node_modules → vendor}/moment/locale/pa-in.js +0 -0
  594. /data/{node_modules → vendor}/moment/locale/pl.js +0 -0
  595. /data/{node_modules → vendor}/moment/locale/pt-br.js +0 -0
  596. /data/{node_modules → vendor}/moment/locale/pt.js +0 -0
  597. /data/{node_modules → vendor}/moment/locale/ro.js +0 -0
  598. /data/{node_modules → vendor}/moment/locale/ru.js +0 -0
  599. /data/{node_modules → vendor}/moment/locale/sd.js +0 -0
  600. /data/{node_modules → vendor}/moment/locale/se.js +0 -0
  601. /data/{node_modules → vendor}/moment/locale/si.js +0 -0
  602. /data/{node_modules → vendor}/moment/locale/sk.js +0 -0
  603. /data/{node_modules → vendor}/moment/locale/sl.js +0 -0
  604. /data/{node_modules → vendor}/moment/locale/sq.js +0 -0
  605. /data/{node_modules → vendor}/moment/locale/sr-cyrl.js +0 -0
  606. /data/{node_modules → vendor}/moment/locale/sr.js +0 -0
  607. /data/{node_modules → vendor}/moment/locale/ss.js +0 -0
  608. /data/{node_modules → vendor}/moment/locale/sv.js +0 -0
  609. /data/{node_modules → vendor}/moment/locale/sw.js +0 -0
  610. /data/{node_modules → vendor}/moment/locale/ta.js +0 -0
  611. /data/{node_modules → vendor}/moment/locale/te.js +0 -0
  612. /data/{node_modules → vendor}/moment/locale/tet.js +0 -0
  613. /data/{node_modules → vendor}/moment/locale/th.js +0 -0
  614. /data/{node_modules → vendor}/moment/locale/tl-ph.js +0 -0
  615. /data/{node_modules → vendor}/moment/locale/tlh.js +0 -0
  616. /data/{node_modules → vendor}/moment/locale/tr.js +0 -0
  617. /data/{node_modules → vendor}/moment/locale/tzl.js +0 -0
  618. /data/{node_modules → vendor}/moment/locale/tzm-latn.js +0 -0
  619. /data/{node_modules → vendor}/moment/locale/tzm.js +0 -0
  620. /data/{node_modules → vendor}/moment/locale/uk.js +0 -0
  621. /data/{node_modules → vendor}/moment/locale/ur.js +0 -0
  622. /data/{node_modules → vendor}/moment/locale/uz-latn.js +0 -0
  623. /data/{node_modules → vendor}/moment/locale/uz.js +0 -0
  624. /data/{node_modules → vendor}/moment/locale/vi.js +0 -0
  625. /data/{node_modules → vendor}/moment/locale/x-pseudo.js +0 -0
  626. /data/{node_modules → vendor}/moment/locale/yo.js +0 -0
  627. /data/{node_modules → vendor}/moment/locale/zh-cn.js +0 -0
  628. /data/{node_modules → vendor}/moment/locale/zh-hk.js +0 -0
  629. /data/{node_modules → vendor}/moment/locale/zh-tw.js +0 -0
  630. /data/{node_modules → vendor}/moment/min/locales.js +0 -0
  631. /data/{node_modules → vendor}/moment/min/moment-with-locales.js +0 -0
  632. /data/{node_modules → vendor}/moment/moment.js +0 -0
  633. /data/{node_modules → vendor}/moment/package.json +0 -0
  634. /data/{node_modules → vendor}/moment-timezone/builds/moment-timezone-with-data-2012-2022.js +0 -0
  635. /data/{node_modules → vendor}/moment-timezone/builds/moment-timezone-with-data.js +0 -0
  636. /data/{node_modules → vendor}/moment-timezone/moment-timezone-utils.js +0 -0
  637. /data/{node_modules → vendor}/moment-timezone/moment-timezone.js +0 -0
  638. /data/{node_modules → vendor}/moment-timezone/package.json +0 -0
  639. /data/{node_modules → vendor}/nprogress/License.md +0 -0
  640. /data/{node_modules → vendor}/nprogress/nprogress.css +0 -0
  641. /data/{node_modules → vendor}/nprogress/nprogress.js +0 -0
  642. /data/{node_modules → vendor}/nprogress/package.json +0 -0
  643. /data/{node_modules → vendor}/nprogress/support/extras.css +0 -0
  644. /data/{node_modules → vendor}/roboto-fontface/LICENSE +0 -0
  645. /data/{node_modules → vendor}/roboto-fontface/css/mixins.scss +0 -0
  646. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-black-italic.scss +0 -0
  647. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-black.scss +0 -0
  648. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-bold-italic.scss +0 -0
  649. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-bold.scss +0 -0
  650. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-light-italic.scss +0 -0
  651. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-light.scss +0 -0
  652. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-medium-italic.scss +0 -0
  653. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-medium.scss +0 -0
  654. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-regular-italic.scss +0 -0
  655. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-regular.scss +0 -0
  656. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-thin-italic.scss +0 -0
  657. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface-thin.scss +0 -0
  658. /data/{node_modules → vendor}/roboto-fontface/css/roboto/sass/roboto-fontface.scss +0 -0
  659. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface-bold-italic.scss +0 -0
  660. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface-bold.scss +0 -0
  661. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface-light-italic.scss +0 -0
  662. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface-light.scss +0 -0
  663. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface-regular-italic.scss +0 -0
  664. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface-regular.scss +0 -0
  665. /data/{node_modules → vendor}/roboto-fontface/css/roboto-condensed/sass/roboto-condensed-fontface.scss +0 -0
  666. /data/{node_modules → vendor}/roboto-fontface/css/roboto-slab/sass/roboto-slab-fontface-bold.scss +0 -0
  667. /data/{node_modules → vendor}/roboto-fontface/css/roboto-slab/sass/roboto-slab-fontface-light.scss +0 -0
  668. /data/{node_modules → vendor}/roboto-fontface/css/roboto-slab/sass/roboto-slab-fontface-regular.scss +0 -0
  669. /data/{node_modules → vendor}/roboto-fontface/css/roboto-slab/sass/roboto-slab-fontface-thin.scss +0 -0
  670. /data/{node_modules → vendor}/roboto-fontface/css/roboto-slab/sass/roboto-slab-fontface.scss +0 -0
  671. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Black.eot +0 -0
  672. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Black.svg +0 -0
  673. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Black.ttf +0 -0
  674. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Black.woff +0 -0
  675. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Black.woff2 +0 -0
  676. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BlackItalic.eot +0 -0
  677. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BlackItalic.svg +0 -0
  678. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BlackItalic.ttf +0 -0
  679. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BlackItalic.woff +0 -0
  680. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BlackItalic.woff2 +0 -0
  681. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Bold.eot +0 -0
  682. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Bold.svg +0 -0
  683. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Bold.ttf +0 -0
  684. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Bold.woff +0 -0
  685. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Bold.woff2 +0 -0
  686. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BoldItalic.eot +0 -0
  687. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BoldItalic.svg +0 -0
  688. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BoldItalic.ttf +0 -0
  689. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BoldItalic.woff +0 -0
  690. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-BoldItalic.woff2 +0 -0
  691. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Light.eot +0 -0
  692. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Light.svg +0 -0
  693. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Light.ttf +0 -0
  694. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Light.woff +0 -0
  695. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Light.woff2 +0 -0
  696. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-LightItalic.eot +0 -0
  697. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-LightItalic.svg +0 -0
  698. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-LightItalic.ttf +0 -0
  699. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-LightItalic.woff +0 -0
  700. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-LightItalic.woff2 +0 -0
  701. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Medium.eot +0 -0
  702. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Medium.svg +0 -0
  703. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Medium.ttf +0 -0
  704. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Medium.woff +0 -0
  705. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Medium.woff2 +0 -0
  706. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-MediumItalic.eot +0 -0
  707. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-MediumItalic.svg +0 -0
  708. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-MediumItalic.ttf +0 -0
  709. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-MediumItalic.woff +0 -0
  710. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-MediumItalic.woff2 +0 -0
  711. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Regular.eot +0 -0
  712. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Regular.svg +0 -0
  713. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Regular.ttf +0 -0
  714. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Regular.woff +0 -0
  715. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Regular.woff2 +0 -0
  716. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-RegularItalic.eot +0 -0
  717. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-RegularItalic.svg +0 -0
  718. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-RegularItalic.ttf +0 -0
  719. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-RegularItalic.woff +0 -0
  720. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-RegularItalic.woff2 +0 -0
  721. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Thin.eot +0 -0
  722. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Thin.svg +0 -0
  723. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Thin.ttf +0 -0
  724. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Thin.woff +0 -0
  725. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-Thin.woff2 +0 -0
  726. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-ThinItalic.eot +0 -0
  727. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-ThinItalic.svg +0 -0
  728. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-ThinItalic.ttf +0 -0
  729. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-ThinItalic.woff +0 -0
  730. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto/Roboto-ThinItalic.woff2 +0 -0
  731. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.eot +0 -0
  732. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.svg +0 -0
  733. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.ttf +0 -0
  734. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff +0 -0
  735. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Bold.woff2 +0 -0
  736. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-BoldItalic.eot +0 -0
  737. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-BoldItalic.svg +0 -0
  738. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-BoldItalic.ttf +0 -0
  739. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-BoldItalic.woff +0 -0
  740. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-BoldItalic.woff2 +0 -0
  741. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.eot +0 -0
  742. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.svg +0 -0
  743. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.ttf +0 -0
  744. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff +0 -0
  745. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Light.woff2 +0 -0
  746. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-LightItalic.eot +0 -0
  747. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-LightItalic.svg +0 -0
  748. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-LightItalic.ttf +0 -0
  749. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-LightItalic.woff +0 -0
  750. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-LightItalic.woff2 +0 -0
  751. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.eot +0 -0
  752. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.svg +0 -0
  753. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.ttf +0 -0
  754. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff +0 -0
  755. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-Regular.woff2 +0 -0
  756. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-RegularItalic.eot +0 -0
  757. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-RegularItalic.svg +0 -0
  758. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-RegularItalic.ttf +0 -0
  759. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-RegularItalic.woff +0 -0
  760. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-condensed/Roboto-Condensed-RegularItalic.woff2 +0 -0
  761. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Bold.eot +0 -0
  762. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Bold.svg +0 -0
  763. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Bold.ttf +0 -0
  764. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Bold.woff +0 -0
  765. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Bold.woff2 +0 -0
  766. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Light.eot +0 -0
  767. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Light.svg +0 -0
  768. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Light.ttf +0 -0
  769. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Light.woff +0 -0
  770. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Light.woff2 +0 -0
  771. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Regular.eot +0 -0
  772. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Regular.svg +0 -0
  773. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Regular.ttf +0 -0
  774. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Regular.woff +0 -0
  775. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Regular.woff2 +0 -0
  776. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Thin.eot +0 -0
  777. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Thin.svg +0 -0
  778. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Thin.ttf +0 -0
  779. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Thin.woff +0 -0
  780. /data/{node_modules → vendor}/roboto-fontface/fonts/roboto-slab/Roboto-Slab-Thin.woff2 +0 -0
  781. /data/{node_modules → vendor}/roboto-fontface/package.json +0 -0
  782. /data/{node_modules → vendor}/signature_pad/dist/signature_pad.js +0 -0
  783. /data/{node_modules → vendor}/signature_pad/package.json +0 -0
@@ -174,7 +174,7 @@
174
174
 
175
175
  function runNext() {
176
176
  if (runningRequests < maxRequests) {
177
- var request = pendingRequests.shift()
177
+ var request = pendingRequests.shift();
178
178
  if (request) {
179
179
  runningRequests++;
180
180
  getJSON(request[0], request[1], request[2]);
@@ -369,1116 +369,1135 @@
369
369
  }
370
370
 
371
371
  function loadAdapters() {
372
- if (!HighchartsAdapter && "Highcharts" in window) {
373
- HighchartsAdapter = new function () {
374
- var Highcharts = window.Highcharts;
372
+ if (!ChartjsAdapter && "Chart" in window) {
373
+ ChartjsAdapter = (function () {
374
+ var Chart = window.Chart;
375
375
 
376
- this.name = "highcharts";
376
+ var baseOptions = {
377
+ maintainAspectRatio: false,
378
+ animation: false,
379
+ tooltips: {
380
+ displayColors: false
381
+ },
382
+ legend: {},
383
+ title: {fontSize: 20, fontColor: "#333"}
384
+ };
377
385
 
378
386
  var defaultOptions = {
379
- chart: {},
380
- xAxis: {
381
- title: {
382
- text: null
383
- },
384
- labels: {
385
- style: {
386
- fontSize: "12px"
387
+ scales: {
388
+ yAxes: [
389
+ {
390
+ ticks: {
391
+ maxTicksLimit: 4
392
+ },
393
+ scaleLabel: {
394
+ fontSize: 16,
395
+ // fontStyle: "bold",
396
+ fontColor: "#333"
397
+ }
387
398
  }
388
- }
389
- },
390
- yAxis: {
391
- title: {
392
- text: null
393
- },
394
- labels: {
395
- style: {
396
- fontSize: "12px"
399
+ ],
400
+ xAxes: [
401
+ {
402
+ gridLines: {
403
+ drawOnChartArea: false
404
+ },
405
+ scaleLabel: {
406
+ fontSize: 16,
407
+ // fontStyle: "bold",
408
+ fontColor: "#333"
409
+ },
410
+ time: {},
411
+ ticks: {}
397
412
  }
398
- }
399
- },
400
- title: {
401
- text: null
402
- },
403
- credits: {
404
- enabled: false
405
- },
406
- legend: {
407
- borderWidth: 0
408
- },
409
- tooltip: {
410
- style: {
411
- fontSize: "12px"
412
- }
413
- },
414
- plotOptions: {
415
- areaspline: {},
416
- series: {
417
- marker: {}
418
- }
413
+ ]
419
414
  }
420
415
  };
421
416
 
417
+ // http://there4.io/2012/05/02/google-chart-color-list/
418
+ var defaultColors = [
419
+ "#3366CC", "#DC3912", "#FF9900", "#109618", "#990099", "#3B3EAC", "#0099C6",
420
+ "#DD4477", "#66AA00", "#B82E2E", "#316395", "#994499", "#22AA99", "#AAAA11",
421
+ "#6633CC", "#E67300", "#8B0707", "#329262", "#5574A6", "#651067"
422
+ ];
423
+
422
424
  var hideLegend = function (options, legend, hideLegend) {
423
425
  if (legend !== undefined) {
424
- options.legend.enabled = !!legend;
426
+ options.legend.display = !!legend;
425
427
  if (legend && legend !== true) {
426
- if (legend === "top" || legend === "bottom") {
427
- options.legend.verticalAlign = legend;
428
- } else {
429
- options.legend.layout = "vertical";
430
- options.legend.verticalAlign = "middle";
431
- options.legend.align = legend;
432
- }
428
+ options.legend.position = legend;
433
429
  }
434
430
  } else if (hideLegend) {
435
- options.legend.enabled = false;
431
+ options.legend.display = false;
436
432
  }
437
433
  };
438
434
 
439
435
  var setTitle = function (options, title) {
436
+ options.title.display = true;
440
437
  options.title.text = title;
441
438
  };
442
439
 
443
440
  var setMin = function (options, min) {
444
- options.yAxis.min = min;
441
+ if (min !== null) {
442
+ options.scales.yAxes[0].ticks.min = toFloat(min);
443
+ }
445
444
  };
446
445
 
447
446
  var setMax = function (options, max) {
448
- options.yAxis.max = max;
447
+ options.scales.yAxes[0].ticks.max = toFloat(max);
448
+ };
449
+
450
+ var setBarMin = function (options, min) {
451
+ if (min !== null) {
452
+ options.scales.xAxes[0].ticks.min = toFloat(min);
453
+ }
454
+ };
455
+
456
+ var setBarMax = function (options, max) {
457
+ options.scales.xAxes[0].ticks.max = toFloat(max);
449
458
  };
450
459
 
451
460
  var setStacked = function (options, stacked) {
452
- options.plotOptions.series.stacking = stacked ? "normal" : null;
461
+ options.scales.xAxes[0].stacked = !!stacked;
462
+ options.scales.yAxes[0].stacked = !!stacked;
453
463
  };
454
464
 
455
465
  var setXtitle = function (options, title) {
456
- options.xAxis.title.text = title;
466
+ options.scales.xAxes[0].scaleLabel.display = true;
467
+ options.scales.xAxes[0].scaleLabel.labelString = title;
457
468
  };
458
469
 
459
470
  var setYtitle = function (options, title) {
460
- options.yAxis.title.text = title;
471
+ options.scales.yAxes[0].scaleLabel.display = true;
472
+ options.scales.yAxes[0].scaleLabel.labelString = title;
461
473
  };
462
474
 
463
- var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);
464
-
465
- this.renderLineChart = function (chart, chartType) {
466
- chartType = chartType || "spline";
467
- var chartOptions = {};
468
- if (chartType === "areaspline") {
469
- chartOptions = {
470
- plotOptions: {
471
- areaspline: {
472
- stacking: "normal"
473
- },
474
- area: {
475
- stacking: "normal"
476
- },
477
- series: {
478
- marker: {
479
- enabled: false
480
- }
481
- }
482
- }
483
- };
484
- }
485
-
486
- if (chart.options.curve === false) {
487
- if (chartType === "areaspline") {
488
- chartType = "area";
489
- } else if (chartType === "spline") {
490
- chartType = "line";
491
- }
492
- }
493
-
494
- var options = jsOptions(chart, chart.options, chartOptions), data, i, j;
495
- options.xAxis.type = chart.discrete ? "category" : "datetime";
496
- if (!options.chart.type) {
497
- options.chart.type = chartType;
475
+ var drawChart = function(chart, type, data, options) {
476
+ if (chart.chart) {
477
+ chart.chart.destroy();
478
+ } else {
479
+ chart.element.innerHTML = "<canvas></canvas>";
498
480
  }
499
- options.chart.renderTo = chart.element.id;
500
481
 
501
- var series = chart.data;
502
- for (i = 0; i < series.length; i++) {
503
- data = series[i].data;
504
- if (!chart.discrete) {
505
- for (j = 0; j < data.length; j++) {
506
- data[j][0] = data[j][0].getTime();
507
- }
508
- }
509
- series[i].marker = {symbol: "circle"};
510
- if (chart.options.points === false) {
511
- series[i].marker.enabled = false;
512
- }
513
- }
514
- options.series = series;
515
- chart.chart = new Highcharts.Chart(options);
482
+ var ctx = chart.element.getElementsByTagName("CANVAS")[0];
483
+ chart.chart = new Chart(ctx, {
484
+ type: type,
485
+ data: data,
486
+ options: options
487
+ });
516
488
  };
517
489
 
518
- this.renderScatterChart = function (chart) {
519
- var chartOptions = {};
520
- var options = jsOptions(chart, chart.options, chartOptions);
521
- options.chart.type = "scatter";
522
- options.chart.renderTo = chart.element.id;
523
- options.series = chart.data;
524
- chart.chart = new Highcharts.Chart(options);
490
+ // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
491
+ var addOpacity = function(hex, opacity) {
492
+ var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
493
+ return result ? "rgba(" + parseInt(result[1], 16) + ", " + parseInt(result[2], 16) + ", " + parseInt(result[3], 16) + ", " + opacity + ")" : hex;
525
494
  };
526
495
 
527
- this.renderPieChart = function (chart) {
528
- var chartOptions = merge(defaultOptions, {});
529
-
530
- if (chart.options.colors) {
531
- chartOptions.colors = chart.options.colors;
532
- }
533
- if (chart.options.donut) {
534
- chartOptions.plotOptions = {pie: {innerSize: "50%"}};
496
+ var setLabelSize = function (chart, data, options) {
497
+ var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);
498
+ if (maxLabelSize > 25) {
499
+ maxLabelSize = 25;
535
500
  }
501
+ options.scales.xAxes[0].ticks.callback = function (value) {
502
+ value = toStr(value);
503
+ if (value.length > maxLabelSize) {
504
+ return value.substring(0, maxLabelSize - 2) + "...";
505
+ } else {
506
+ return value;
507
+ }
508
+ };
509
+ };
536
510
 
537
- if ("legend" in chart.options) {
538
- hideLegend(chartOptions, chart.options.legend);
539
- }
511
+ var jsOptions = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);
540
512
 
541
- if (chart.options.title) {
542
- setTitle(chartOptions, chart.options.title);
543
- }
513
+ var createDataTable = function (chart, options, chartType) {
514
+ var datasets = [];
515
+ var labels = [];
544
516
 
545
- var options = merge(chartOptions, chart.options.library || {});
546
- options.chart.renderTo = chart.element.id;
547
- options.series = [{
548
- type: "pie",
549
- name: chart.options.label || "Value",
550
- data: chart.data
551
- }];
552
- chart.chart = new Highcharts.Chart(options);
553
- };
517
+ var colors = chart.options.colors || defaultColors;
518
+
519
+ var day = true;
520
+ var week = true;
521
+ var dayOfWeek;
522
+ var month = true;
523
+ var year = true;
524
+ var hour = true;
525
+ var minute = true;
526
+ var detectType = (chartType === "line" || chartType === "area") && !chart.discrete;
554
527
 
555
- this.renderColumnChart = function (chart, chartType) {
556
- chartType = chartType || "column";
557
528
  var series = chart.data;
558
- var options = jsOptions(chart, chart.options), i, j, s, d, rows = [], categories = [];
559
- options.chart.type = chartType;
560
- options.chart.renderTo = chart.element.id;
561
529
 
530
+ var sortedLabels = [];
531
+
532
+ var i, j, s, d, key, rows = [];
562
533
  for (i = 0; i < series.length; i++) {
563
534
  s = series[i];
564
535
 
565
536
  for (j = 0; j < s.data.length; j++) {
566
537
  d = s.data[j];
567
- if (!rows[d[0]]) {
568
- rows[d[0]] = new Array(series.length);
569
- categories.push(d[0]);
538
+ key = detectType ? d[0].getTime() : d[0];
539
+ if (!rows[key]) {
540
+ rows[key] = new Array(series.length);
541
+ }
542
+ rows[key][i] = toFloat(d[1]);
543
+ if (sortedLabels.indexOf(key) === -1) {
544
+ sortedLabels.push(key);
570
545
  }
571
- rows[d[0]][i] = d[1];
572
546
  }
573
547
  }
574
548
 
575
- if (chart.options.xtype === "number") {
576
- categories.sort(sortByNumber);
549
+ if (detectType || chart.options.xtype === "number") {
550
+ sortedLabels.sort(sortByNumber);
577
551
  }
578
552
 
579
- options.xAxis.categories = categories;
553
+ var rows2 = [];
554
+ for (j = 0; j < series.length; j++) {
555
+ rows2.push([]);
556
+ }
557
+
558
+ var value;
559
+ var k;
560
+ for (k = 0; k < sortedLabels.length; k++) {
561
+ i = sortedLabels[k];
562
+ if (detectType) {
563
+ value = new Date(toFloat(i));
564
+ // TODO make this efficient
565
+ day = day && isDay(value);
566
+ if (!dayOfWeek) {
567
+ dayOfWeek = value.getDay();
568
+ }
569
+ week = week && isWeek(value, dayOfWeek);
570
+ month = month && isMonth(value);
571
+ year = year && isYear(value);
572
+ hour = hour && isHour(value);
573
+ minute = minute && isMinute(value);
574
+ } else {
575
+ value = i;
576
+ }
577
+ labels.push(value);
578
+ for (j = 0; j < series.length; j++) {
579
+ // Chart.js doesn't like undefined
580
+ rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);
581
+ }
582
+ }
580
583
 
581
- var newSeries = [], d2;
582
584
  for (i = 0; i < series.length; i++) {
583
- d = [];
584
- for (j = 0; j < categories.length; j++) {
585
- d.push(rows[categories[j]][i] || 0);
585
+ s = series[i];
586
+
587
+ var color = s.color || colors[i];
588
+ var backgroundColor = chartType !== "line" ? addOpacity(color, 0.5) : color;
589
+
590
+ var dataset = {
591
+ label: s.name,
592
+ data: rows2[i],
593
+ fill: chartType === "area",
594
+ borderColor: color,
595
+ backgroundColor: backgroundColor,
596
+ pointBackgroundColor: color,
597
+ borderWidth: 2
598
+ };
599
+
600
+ if (s.stack) {
601
+ dataset.stack = s.stack;
586
602
  }
587
603
 
588
- d2 = {
589
- name: series[i].name,
590
- data: d
604
+ // PATCH_BEGIN
605
+ if (chart.options.y2 === true) {
606
+ dataset.yAxisID = (s.y2 === true) ? 'y-axis-right' : 'y-axis-left';
607
+ options.scales.yAxes = [
608
+ { id: 'y-axis-left', position: 'left' },
609
+ { id: 'y-axis-right', position: 'right' }
610
+ ];
591
611
  }
592
- if (series[i].stack) {
593
- d2.stack = series[i].stack;
612
+ // PATCH_END
613
+
614
+ if (chart.options.curve === false) {
615
+ dataset.lineTension = 0;
594
616
  }
595
617
 
596
- newSeries.push(d2);
618
+ if (chart.options.points === false) {
619
+ dataset.pointRadius = 0;
620
+ dataset.pointHitRadius = 5;
621
+ }
622
+
623
+ datasets.push(merge(dataset, s.library || {}));
597
624
  }
598
- options.series = newSeries;
599
625
 
600
- chart.chart = new Highcharts.Chart(options);
601
- };
626
+ if (detectType && labels.length > 0) {
627
+ var minTime = labels[0].getTime();
628
+ var maxTime = labels[0].getTime();
629
+ for (i = 1; i < labels.length; i++) {
630
+ value = labels[i].getTime();
631
+ if (value < minTime) {
632
+ minTime = value;
633
+ }
634
+ if (value > maxTime) {
635
+ maxTime = value;
636
+ }
637
+ }
602
638
 
603
- var self = this;
639
+ var timeDiff = (maxTime - minTime) / (86400 * 1000.0);
604
640
 
605
- this.renderBarChart = function (chart) {
606
- self.renderColumnChart(chart, "bar");
641
+ if (!options.scales.xAxes[0].time.unit) {
642
+ var step;
643
+ if (year || timeDiff > 365 * 10) {
644
+ options.scales.xAxes[0].time.unit = "year";
645
+ step = 365;
646
+ } else if (month || timeDiff > 30 * 10) {
647
+ options.scales.xAxes[0].time.unit = "month";
648
+ step = 30;
649
+ } else if (day || timeDiff > 10) {
650
+ options.scales.xAxes[0].time.unit = "day";
651
+ step = 1;
652
+ } else if (hour || timeDiff > 0.5) {
653
+ options.scales.xAxes[0].time.displayFormats = {hour: "MMM D, h a"};
654
+ options.scales.xAxes[0].time.unit = "hour";
655
+ step = 1 / 24.0;
656
+ } else if (minute) {
657
+ options.scales.xAxes[0].time.displayFormats = {minute: "h:mm a"};
658
+ options.scales.xAxes[0].time.unit = "minute";
659
+ step = 1 / 24.0 / 60.0;
660
+ }
661
+
662
+ if (step && timeDiff > 0) {
663
+ var unitStepSize = Math.ceil(timeDiff / step / (chart.element.offsetWidth / 100.0));
664
+ if (week && step === 1) {
665
+ unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;
666
+ }
667
+ options.scales.xAxes[0].time.unitStepSize = unitStepSize;
668
+ }
669
+ }
670
+
671
+ if (!options.scales.xAxes[0].time.tooltipFormat) {
672
+ if (day) {
673
+ options.scales.xAxes[0].time.tooltipFormat = "ll";
674
+ } else if (hour) {
675
+ options.scales.xAxes[0].time.tooltipFormat = "MMM D, h a";
676
+ } else if (minute) {
677
+ options.scales.xAxes[0].time.tooltipFormat = "h:mm a";
678
+ }
679
+ }
680
+ }
681
+
682
+ var data = {
683
+ labels: labels,
684
+ datasets: datasets
685
+ };
686
+
687
+ return data;
607
688
  };
608
689
 
609
- this.renderAreaChart = function (chart) {
610
- self.renderLineChart(chart, "areaspline");
690
+ var renderLineChart = function (chart, chartType) {
691
+ if (chart.options.xtype === "number") {
692
+ return renderScatterChart(chart, chartType, true);
693
+ }
694
+
695
+ var chartOptions = {};
696
+ if (chartType === "area") {
697
+ // TODO fix area stacked
698
+ // chartOptions.stacked = true;
699
+ }
700
+ // fix for https://github.com/chartjs/Chart.js/issues/2441
701
+ if (!chart.options.max && allZeros(chart.data)) {
702
+ chartOptions.max = 1;
703
+ }
704
+
705
+ var options = jsOptions(chart, merge(chartOptions, chart.options));
706
+
707
+ var data = createDataTable(chart, options, chartType || "line");
708
+
709
+ options.scales.xAxes[0].type = chart.discrete ? "category" : "time";
710
+
711
+ drawChart(chart, "line", data, options);
611
712
  };
612
- };
613
- adapters.push(HighchartsAdapter);
614
- }
615
- if (!GoogleChartsAdapter && window.google && (window.google.setOnLoadCallback || window.google.charts)) {
616
- GoogleChartsAdapter = new function () {
617
- var google = window.google;
618
713
 
619
- this.name = "google";
714
+ var renderPieChart = function (chart) {
715
+ var options = merge({}, baseOptions);
716
+ if (chart.options.donut) {
717
+ options.cutoutPercentage = 50;
718
+ }
620
719
 
621
- var loaded = {};
622
- var callbacks = [];
720
+ if ("legend" in chart.options) {
721
+ hideLegend(options, chart.options.legend);
722
+ }
623
723
 
624
- var runCallbacks = function () {
625
- var cb, call;
626
- for (var i = 0; i < callbacks.length; i++) {
627
- cb = callbacks[i];
628
- call = google.visualization && ((cb.pack === "corechart" && google.visualization.LineChart) || (cb.pack === "timeline" && google.visualization.Timeline));
629
- if (call) {
630
- cb.callback();
631
- callbacks.splice(i, 1);
632
- i--;
633
- }
724
+ if (chart.options.title) {
725
+ setTitle(options, chart.options.title);
634
726
  }
635
- };
636
727
 
637
- var waitForLoaded = function (pack, callback) {
638
- if (!callback) {
639
- callback = pack;
640
- pack = "corechart";
728
+ options = merge(options, chart.options.library || {});
729
+
730
+ var labels = [];
731
+ var values = [];
732
+ for (var i = 0; i < chart.data.length; i++) {
733
+ var point = chart.data[i];
734
+ labels.push(point[0]);
735
+ values.push(point[1]);
641
736
  }
642
737
 
643
- callbacks.push({pack: pack, callback: callback});
738
+ var data = {
739
+ labels: labels,
740
+ datasets: [
741
+ {
742
+ data: values,
743
+ backgroundColor: chart.options.colors || defaultColors
744
+ }
745
+ ]
746
+ };
644
747
 
645
- if (loaded[pack]) {
646
- runCallbacks();
748
+ drawChart(chart, "pie", data, options);
749
+ };
750
+
751
+ var renderColumnChart = function (chart, chartType) {
752
+ var options;
753
+ if (chartType === "bar") {
754
+ options = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options);
647
755
  } else {
648
- loaded[pack] = true;
756
+ options = jsOptions(chart, chart.options);
757
+ }
758
+ var data = createDataTable(chart, options, "column");
759
+ setLabelSize(chart, data, options);
760
+ drawChart(chart, (chartType === "bar" ? "horizontalBar" : "bar"), data, options);
761
+ };
649
762
 
650
- // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI
651
- var loadOptions = {
652
- packages: [pack],
653
- callback: runCallbacks
654
- };
655
- if (config.language) {
656
- loadOptions.language = config.language;
657
- }
658
- if (pack === "corechart" && config.mapsApiKey) {
659
- loadOptions.mapsApiKey = config.mapsApiKey;
660
- }
763
+ var renderAreaChart = function (chart) {
764
+ renderLineChart(chart, "area");
765
+ };
661
766
 
662
- if (window.google.setOnLoadCallback) {
663
- google.load("visualization", "1", loadOptions);
664
- } else {
665
- google.charts.load("current", loadOptions);
767
+ var renderBarChart = function (chart) {
768
+ renderColumnChart(chart, "bar");
769
+ };
770
+
771
+ var renderScatterChart = function (chart, chartType, lineChart) {
772
+ chartType = chartType || "line";
773
+
774
+ var options = jsOptions(chart, chart.options);
775
+
776
+ var colors = chart.options.colors || defaultColors;
777
+
778
+ var datasets = [];
779
+ var series = chart.data;
780
+ for (var i = 0; i < series.length; i++) {
781
+ var s = series[i];
782
+ var d = [];
783
+ for (var j = 0; j < s.data.length; j++) {
784
+ var point = {
785
+ x: toFloat(s.data[j][0]),
786
+ y: toFloat(s.data[j][1])
787
+ };
788
+ if (chartType === "bubble") {
789
+ point.r = toFloat(s.data[j][2]);
790
+ }
791
+ d.push(point);
666
792
  }
793
+
794
+ var color = s.color || colors[i];
795
+ var backgroundColor = chartType === "area" ? addOpacity(color, 0.5) : color;
796
+
797
+ datasets.push({
798
+ label: s.name,
799
+ showLine: lineChart || false,
800
+ data: d,
801
+ borderColor: color,
802
+ backgroundColor: backgroundColor,
803
+ pointBackgroundColor: color,
804
+ fill: chartType === "area"
805
+ });
667
806
  }
807
+
808
+ if (chartType === "area") {
809
+ chartType = "line";
810
+ }
811
+
812
+ var data = {datasets: datasets};
813
+
814
+ options.scales.xAxes[0].type = "linear";
815
+ options.scales.xAxes[0].position = "bottom";
816
+
817
+ drawChart(chart, chartType, data, options);
668
818
  };
669
819
 
670
- // Set chart options
820
+ var renderBubbleChart = function (chart) {
821
+ renderScatterChart(chart, "bubble");
822
+ };
823
+
824
+ return {
825
+ name: "chartjs",
826
+ renderLineChart: renderLineChart,
827
+ renderPieChart: renderPieChart,
828
+ renderColumnChart: renderColumnChart,
829
+ renderBarChart: renderBarChart,
830
+ renderAreaChart: renderAreaChart,
831
+ renderScatterChart: renderScatterChart,
832
+ renderBubbleChart: renderBubbleChart
833
+ };
834
+ })();
835
+
836
+ adapters.push(ChartjsAdapter);
837
+ }
838
+
839
+ if (!HighchartsAdapter && "Highcharts" in window) {
840
+ HighchartsAdapter = (function () {
841
+ var Highcharts = window.Highcharts;
842
+
671
843
  var defaultOptions = {
672
- chartArea: {},
673
- fontName: "'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif",
674
- pointSize: 6,
675
- legend: {
676
- textStyle: {
677
- fontSize: 12,
678
- color: "#444"
844
+ chart: {},
845
+ xAxis: {
846
+ title: {
847
+ text: null
679
848
  },
680
- alignment: "center",
681
- position: "right"
849
+ labels: {
850
+ style: {
851
+ fontSize: "12px"
852
+ }
853
+ }
682
854
  },
683
- curveType: "function",
684
- hAxis: {
685
- textStyle: {
686
- color: "#666",
687
- fontSize: 12
688
- },
689
- titleTextStyle: {},
690
- gridlines: {
691
- color: "transparent"
855
+ yAxis: {
856
+ title: {
857
+ text: null
692
858
  },
693
- baselineColor: "#ccc",
694
- viewWindow: {}
859
+ labels: {
860
+ style: {
861
+ fontSize: "12px"
862
+ }
863
+ }
695
864
  },
696
- vAxis: {
697
- textStyle: {
698
- color: "#666",
699
- fontSize: 12
700
- },
701
- titleTextStyle: {},
702
- baselineColor: "#ccc",
703
- viewWindow: {}
865
+ title: {
866
+ text: null
867
+ },
868
+ credits: {
869
+ enabled: false
870
+ },
871
+ legend: {
872
+ borderWidth: 0
704
873
  },
705
874
  tooltip: {
706
- textStyle: {
707
- color: "#666",
708
- fontSize: 12
875
+ style: {
876
+ fontSize: "12px"
877
+ }
878
+ },
879
+ plotOptions: {
880
+ areaspline: {},
881
+ series: {
882
+ marker: {}
709
883
  }
710
884
  }
711
885
  };
712
886
 
713
887
  var hideLegend = function (options, legend, hideLegend) {
714
888
  if (legend !== undefined) {
715
- var position;
716
- if (!legend) {
717
- position = "none";
718
- } else if (legend === true) {
719
- position = "right";
720
- } else {
721
- position = legend;
889
+ options.legend.enabled = !!legend;
890
+ if (legend && legend !== true) {
891
+ if (legend === "top" || legend === "bottom") {
892
+ options.legend.verticalAlign = legend;
893
+ } else {
894
+ options.legend.layout = "vertical";
895
+ options.legend.verticalAlign = "middle";
896
+ options.legend.align = legend;
897
+ }
722
898
  }
723
- options.legend.position = position;
724
899
  } else if (hideLegend) {
725
- options.legend.position = "none";
900
+ options.legend.enabled = false;
726
901
  }
727
902
  };
728
903
 
729
904
  var setTitle = function (options, title) {
730
- options.title = title;
731
- options.titleTextStyle = {color: "#333", fontSize: "20px"};
905
+ options.title.text = title;
732
906
  };
733
907
 
734
908
  var setMin = function (options, min) {
735
- options.vAxis.viewWindow.min = min;
909
+ options.yAxis.min = min;
736
910
  };
737
911
 
738
912
  var setMax = function (options, max) {
739
- options.vAxis.viewWindow.max = max;
740
- };
741
-
742
- var setBarMin = function (options, min) {
743
- options.hAxis.viewWindow.min = min;
744
- };
745
-
746
- var setBarMax = function (options, max) {
747
- options.hAxis.viewWindow.max = max;
913
+ options.yAxis.max = max;
748
914
  };
749
915
 
750
916
  var setStacked = function (options, stacked) {
751
- options.isStacked = !!stacked;
917
+ options.plotOptions.series.stacking = stacked ? "normal" : null;
752
918
  };
753
919
 
754
920
  var setXtitle = function (options, title) {
755
- options.hAxis.title = title;
756
- options.hAxis.titleTextStyle.italic = false;
921
+ options.xAxis.title.text = title;
757
922
  };
758
923
 
759
924
  var setYtitle = function (options, title) {
760
- options.vAxis.title = title;
761
- options.vAxis.titleTextStyle.italic = false;
925
+ options.yAxis.title.text = title;
762
926
  };
763
927
 
764
928
  var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);
765
929
 
766
- // cant use object as key
767
- var createDataTable = function (series, columnType, xtype) {
768
- var i, j, s, d, key, rows = [], sortedLabels = [];
769
- for (i = 0; i < series.length; i++) {
770
- s = series[i];
930
+ var drawChart = function(chart, data, options) {
931
+ if (chart.chart) {
932
+ chart.chart.destroy();
933
+ }
771
934
 
772
- for (j = 0; j < s.data.length; j++) {
773
- d = s.data[j];
774
- key = (columnType === "datetime") ? d[0].getTime() : d[0];
775
- if (!rows[key]) {
776
- rows[key] = new Array(series.length);
777
- sortedLabels.push(key);
935
+ options.chart.renderTo = chart.element.id;
936
+ options.series = data;
937
+ chart.chart = new Highcharts.Chart(options);
938
+ };
939
+
940
+ var renderLineChart = function (chart, chartType) {
941
+ chartType = chartType || "spline";
942
+ var chartOptions = {};
943
+ if (chartType === "areaspline") {
944
+ chartOptions = {
945
+ plotOptions: {
946
+ areaspline: {
947
+ stacking: "normal"
948
+ },
949
+ area: {
950
+ stacking: "normal"
951
+ },
952
+ series: {
953
+ marker: {
954
+ enabled: false
955
+ }
956
+ }
778
957
  }
779
- rows[key][i] = toFloat(d[1]);
780
- }
958
+ };
781
959
  }
782
960
 
783
- var rows2 = [];
784
- var day = true;
785
- var value;
786
- for (var j = 0; j < sortedLabels.length; j++) {
787
- var i = sortedLabels[j];
788
- if (columnType === "datetime") {
789
- value = new Date(toFloat(i));
790
- day = day && isDay(value);
791
- } else if (columnType === "number") {
792
- value = toFloat(i);
793
- } else {
794
- value = i;
961
+ if (chart.options.curve === false) {
962
+ if (chartType === "areaspline") {
963
+ chartType = "area";
964
+ } else if (chartType === "spline") {
965
+ chartType = "line";
795
966
  }
796
- rows2.push([value].concat(rows[i]));
797
- }
798
- if (columnType === "datetime") {
799
- rows2.sort(sortByTime);
800
- } else if (columnType === "number") {
801
- rows2.sort(sortByNumberSeries);
802
967
  }
803
968
 
804
- if (xtype === "number") {
805
- rows2.sort(sortByNumberSeries);
806
-
807
- for (var i = 0; i < rows2.length; i++) {
808
- rows2[i][0] = toStr(rows2[i][0]);
809
- }
969
+ var options = jsOptions(chart, chart.options, chartOptions), data, i, j;
970
+ options.xAxis.type = chart.discrete ? "category" : "datetime";
971
+ if (!options.chart.type) {
972
+ options.chart.type = chartType;
810
973
  }
811
974
 
812
- // create datatable
813
- var data = new google.visualization.DataTable();
814
- columnType = columnType === "datetime" && day ? "date" : columnType;
815
- data.addColumn(columnType, "");
975
+ var series = chart.data;
816
976
  for (i = 0; i < series.length; i++) {
817
- data.addColumn("number", series[i].name);
818
- }
819
- data.addRows(rows2);
820
-
821
- return data;
822
- };
823
-
824
- var resize = function (callback) {
825
- if (window.attachEvent) {
826
- window.attachEvent("onresize", callback);
827
- } else if (window.addEventListener) {
828
- window.addEventListener("resize", callback, true);
829
- }
830
- callback();
831
- };
832
-
833
- this.renderLineChart = function (chart) {
834
- waitForLoaded(function () {
835
- var chartOptions = {};
836
-
837
- if (chart.options.curve === false) {
838
- chartOptions.curveType = "none";
839
- }
840
-
841
- if (chart.options.points === false) {
842
- chartOptions.pointSize = 0;
843
- }
844
-
845
- var options = jsOptions(chart, chart.options, chartOptions);
846
- var columnType = chart.discrete ? "string" : "datetime";
847
- if (chart.options.xtype === "number") {
848
- columnType = "number";
849
- }
850
- var data = createDataTable(chart.data, columnType);
851
- chart.chart = new google.visualization.LineChart(chart.element);
852
- resize(function () {
853
- chart.chart.draw(data, options);
854
- });
855
- });
856
- };
857
-
858
- this.renderPieChart = function (chart) {
859
- waitForLoaded(function () {
860
- var chartOptions = {
861
- chartArea: {
862
- top: "10%",
863
- height: "80%"
864
- },
865
- legend: {}
866
- };
867
- if (chart.options.colors) {
868
- chartOptions.colors = chart.options.colors;
869
- }
870
- if (chart.options.donut) {
871
- chartOptions.pieHole = 0.5;
872
- }
873
- if ("legend" in chart.options) {
874
- hideLegend(chartOptions, chart.options.legend);
977
+ data = series[i].data;
978
+ if (!chart.discrete) {
979
+ for (j = 0; j < data.length; j++) {
980
+ data[j][0] = data[j][0].getTime();
981
+ }
875
982
  }
876
- if (chart.options.title) {
877
- setTitle(chartOptions, chart.options.title);
983
+ series[i].marker = {symbol: "circle"};
984
+ if (chart.options.points === false) {
985
+ series[i].marker.enabled = false;
878
986
  }
879
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
880
-
881
- var data = new google.visualization.DataTable();
882
- data.addColumn("string", "");
883
- data.addColumn("number", "Value");
884
- data.addRows(chart.data);
987
+ }
885
988
 
886
- chart.chart = new google.visualization.PieChart(chart.element);
887
- resize(function () {
888
- chart.chart.draw(data, options);
889
- });
890
- });
989
+ drawChart(chart, series, options);
891
990
  };
892
991
 
893
- this.renderColumnChart = function (chart) {
894
- waitForLoaded(function () {
895
- var options = jsOptions(chart, chart.options);
896
- var data = createDataTable(chart.data, "string", chart.options.xtype);
897
- chart.chart = new google.visualization.ColumnChart(chart.element);
898
- resize(function () {
899
- chart.chart.draw(data, options);
900
- });
901
- });
992
+ var renderScatterChart = function (chart) {
993
+ var options = jsOptions(chart, chart.options, {});
994
+ options.chart.type = "scatter";
995
+ drawChart(chart, chart.data, options);
902
996
  };
903
997
 
904
- this.renderBarChart = function (chart) {
905
- waitForLoaded(function () {
906
- var chartOptions = {
907
- hAxis: {
908
- gridlines: {
909
- color: "#ccc"
910
- }
911
- }
912
- };
913
- var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);
914
- var data = createDataTable(chart.data, "string", chart.options.xtype);
915
- chart.chart = new google.visualization.BarChart(chart.element);
916
- resize(function () {
917
- chart.chart.draw(data, options);
918
- });
919
- });
920
- };
998
+ var renderPieChart = function (chart) {
999
+ var chartOptions = merge(defaultOptions, {});
921
1000
 
922
- this.renderAreaChart = function (chart) {
923
- waitForLoaded(function () {
924
- var chartOptions = {
925
- isStacked: true,
926
- pointSize: 0,
927
- areaOpacity: 0.5
928
- };
1001
+ if (chart.options.colors) {
1002
+ chartOptions.colors = chart.options.colors;
1003
+ }
1004
+ if (chart.options.donut) {
1005
+ chartOptions.plotOptions = {pie: {innerSize: "50%"}};
1006
+ }
929
1007
 
930
- var options = jsOptions(chart, chart.options, chartOptions);
931
- var columnType = chart.discrete ? "string" : "datetime";
932
- if (chart.options.xtype === "number") {
933
- columnType = "number";
934
- }
935
- var data = createDataTable(chart.data, columnType);
936
- chart.chart = new google.visualization.AreaChart(chart.element);
937
- resize(function () {
938
- chart.chart.draw(data, options);
939
- });
940
- });
941
- };
1008
+ if ("legend" in chart.options) {
1009
+ hideLegend(chartOptions, chart.options.legend);
1010
+ }
942
1011
 
943
- this.renderGeoChart = function (chart) {
944
- waitForLoaded(function () {
945
- var chartOptions = {
946
- legend: "none",
947
- colorAxis: {
948
- colors: chart.options.colors || ["#f6c7b6", "#ce502d"]
949
- }
950
- };
951
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
1012
+ if (chart.options.title) {
1013
+ setTitle(chartOptions, chart.options.title);
1014
+ }
952
1015
 
953
- var data = new google.visualization.DataTable();
954
- data.addColumn("string", "");
955
- data.addColumn("number", chart.options.label || "Value");
956
- data.addRows(chart.data);
1016
+ var options = merge(chartOptions, chart.options.library || {});
1017
+ var series = [{
1018
+ type: "pie",
1019
+ name: chart.options.label || "Value",
1020
+ data: chart.data
1021
+ }];
957
1022
 
958
- chart.chart = new google.visualization.GeoChart(chart.element);
959
- resize(function () {
960
- chart.chart.draw(data, options);
961
- });
962
- });
1023
+ drawChart(chart, series, options);
963
1024
  };
964
1025
 
965
- this.renderScatterChart = function (chart) {
966
- waitForLoaded(function () {
967
- var chartOptions = {};
968
- var options = jsOptions(chart, chart.options, chartOptions);
1026
+ var renderColumnChart = function (chart, chartType) {
1027
+ chartType = chartType || "column";
1028
+ var series = chart.data;
1029
+ var options = jsOptions(chart, chart.options), i, j, s, d, rows = [], categories = [];
1030
+ options.chart.type = chartType;
969
1031
 
970
- var series = chart.data, rows2 = [], i, j, data, d;
971
- for (i = 0; i < series.length; i++) {
972
- d = series[i].data;
973
- for (j = 0; j < d.length; j++) {
974
- var row = new Array(series.length + 1);
975
- row[0] = d[j][0];
976
- row[i + 1] = d[j][1];
977
- rows2.push(row);
1032
+ for (i = 0; i < series.length; i++) {
1033
+ s = series[i];
1034
+
1035
+ for (j = 0; j < s.data.length; j++) {
1036
+ d = s.data[j];
1037
+ if (!rows[d[0]]) {
1038
+ rows[d[0]] = new Array(series.length);
1039
+ categories.push(d[0]);
978
1040
  }
1041
+ rows[d[0]][i] = d[1];
979
1042
  }
1043
+ }
980
1044
 
981
- var data = new google.visualization.DataTable();
982
- data.addColumn("number", "");
983
- for (i = 0; i < series.length; i++) {
984
- data.addColumn("number", series[i].name);
985
- }
986
- data.addRows(rows2);
1045
+ if (chart.options.xtype === "number") {
1046
+ categories.sort(sortByNumber);
1047
+ }
987
1048
 
988
- chart.chart = new google.visualization.ScatterChart(chart.element);
989
- resize(function () {
990
- chart.chart.draw(data, options);
991
- });
992
- });
993
- };
1049
+ options.xAxis.categories = categories;
994
1050
 
995
- this.renderTimeline = function (chart) {
996
- waitForLoaded("timeline", function () {
997
- var chartOptions = {
998
- legend: "none"
999
- };
1051
+ var newSeries = [], d2;
1052
+ for (i = 0; i < series.length; i++) {
1053
+ d = [];
1054
+ for (j = 0; j < categories.length; j++) {
1055
+ d.push(rows[categories[j]][i] || 0);
1056
+ }
1000
1057
 
1001
- if (chart.options.colors) {
1002
- chartOptions.colors = chart.options.colors;
1058
+ d2 = {
1059
+ name: series[i].name,
1060
+ data: d
1061
+ };
1062
+ if (series[i].stack) {
1063
+ d2.stack = series[i].stack;
1003
1064
  }
1004
- var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
1005
1065
 
1006
- var data = new google.visualization.DataTable();
1007
- data.addColumn({type: "string", id: "Name"});
1008
- data.addColumn({type: "date", id: "Start"});
1009
- data.addColumn({type: "date", id: "End"});
1010
- data.addRows(chart.data);
1066
+ newSeries.push(d2);
1067
+ }
1011
1068
 
1012
- chart.element.style.lineHeight = "normal";
1013
- chart.chart = new google.visualization.Timeline(chart.element);
1069
+ drawChart(chart, newSeries, options);
1070
+ };
1014
1071
 
1015
- resize(function () {
1016
- chart.chart.draw(data, options);
1017
- });
1018
- });
1072
+ var renderBarChart = function (chart) {
1073
+ renderColumnChart(chart, "bar");
1019
1074
  };
1020
- };
1021
1075
 
1022
- adapters.push(GoogleChartsAdapter);
1076
+ var renderAreaChart = function (chart) {
1077
+ renderLineChart(chart, "areaspline");
1078
+ };
1079
+
1080
+ return {
1081
+ name: "highcharts",
1082
+ renderLineChart: renderLineChart,
1083
+ renderPieChart: renderPieChart,
1084
+ renderColumnChart: renderColumnChart,
1085
+ renderBarChart: renderBarChart,
1086
+ renderAreaChart: renderAreaChart,
1087
+ renderScatterChart: renderScatterChart
1088
+ };
1089
+ })();
1090
+ adapters.push(HighchartsAdapter);
1023
1091
  }
1024
- if (!ChartjsAdapter && "Chart" in window) {
1025
- ChartjsAdapter = new function () {
1026
- var Chart = window.Chart;
1092
+ if (!GoogleChartsAdapter && window.google && (window.google.setOnLoadCallback || window.google.charts)) {
1093
+ GoogleChartsAdapter = (function () {
1094
+ var google = window.google;
1095
+
1096
+ var loaded = {};
1097
+ var callbacks = [];
1027
1098
 
1028
- this.name = "chartjs";
1099
+ var runCallbacks = function () {
1100
+ var cb, call;
1101
+ for (var i = 0; i < callbacks.length; i++) {
1102
+ cb = callbacks[i];
1103
+ call = google.visualization && ((cb.pack === "corechart" && google.visualization.LineChart) || (cb.pack === "timeline" && google.visualization.Timeline));
1104
+ if (call) {
1105
+ cb.callback();
1106
+ callbacks.splice(i, 1);
1107
+ i--;
1108
+ }
1109
+ }
1110
+ };
1029
1111
 
1030
- var baseOptions = {
1031
- maintainAspectRatio: false,
1032
- animation: false,
1033
- tooltips: {
1034
- displayColors: false
1035
- },
1036
- legend: {},
1037
- title: {fontSize: 20, fontColor: "#333"}
1112
+ var waitForLoaded = function (pack, callback) {
1113
+ if (!callback) {
1114
+ callback = pack;
1115
+ pack = "corechart";
1116
+ }
1117
+
1118
+ callbacks.push({pack: pack, callback: callback});
1119
+
1120
+ if (loaded[pack]) {
1121
+ runCallbacks();
1122
+ } else {
1123
+ loaded[pack] = true;
1124
+
1125
+ // https://groups.google.com/forum/#!topic/google-visualization-api/fMKJcyA2yyI
1126
+ var loadOptions = {
1127
+ packages: [pack],
1128
+ callback: runCallbacks
1129
+ };
1130
+ if (config.language) {
1131
+ loadOptions.language = config.language;
1132
+ }
1133
+ if (pack === "corechart" && config.mapsApiKey) {
1134
+ loadOptions.mapsApiKey = config.mapsApiKey;
1135
+ }
1136
+
1137
+ if (window.google.setOnLoadCallback) {
1138
+ google.load("visualization", "1", loadOptions);
1139
+ } else {
1140
+ google.charts.load("current", loadOptions);
1141
+ }
1142
+ }
1038
1143
  };
1039
1144
 
1145
+ // Set chart options
1040
1146
  var defaultOptions = {
1041
- scales: {
1042
- yAxes: [
1043
- {
1044
- ticks: {
1045
- maxTicksLimit: 4
1046
- },
1047
- scaleLabel: {
1048
- fontSize: 16,
1049
- // fontStyle: "bold",
1050
- fontColor: "#333"
1051
- }
1052
- }
1053
- ],
1054
- xAxes: [
1055
- {
1056
- gridLines: {
1057
- drawOnChartArea: false
1058
- },
1059
- scaleLabel: {
1060
- fontSize: 16,
1061
- // fontStyle: "bold",
1062
- fontColor: "#333"
1063
- },
1064
- time: {},
1065
- ticks: {}
1066
- }
1067
- ]
1147
+ chartArea: {},
1148
+ fontName: "'Lucida Grande', 'Lucida Sans Unicode', Verdana, Arial, Helvetica, sans-serif",
1149
+ pointSize: 6,
1150
+ legend: {
1151
+ textStyle: {
1152
+ fontSize: 12,
1153
+ color: "#444"
1154
+ },
1155
+ alignment: "center",
1156
+ position: "right"
1157
+ },
1158
+ curveType: "function",
1159
+ hAxis: {
1160
+ textStyle: {
1161
+ color: "#666",
1162
+ fontSize: 12
1163
+ },
1164
+ titleTextStyle: {},
1165
+ gridlines: {
1166
+ color: "transparent"
1167
+ },
1168
+ baselineColor: "#ccc",
1169
+ viewWindow: {}
1170
+ },
1171
+ vAxis: {
1172
+ textStyle: {
1173
+ color: "#666",
1174
+ fontSize: 12
1175
+ },
1176
+ titleTextStyle: {},
1177
+ baselineColor: "#ccc",
1178
+ viewWindow: {}
1179
+ },
1180
+ tooltip: {
1181
+ textStyle: {
1182
+ color: "#666",
1183
+ fontSize: 12
1184
+ }
1068
1185
  }
1069
1186
  };
1070
1187
 
1071
- // http://there4.io/2012/05/02/google-chart-color-list/
1072
- var defaultColors = [
1073
- "#3366CC", "#DC3912", "#FF9900", "#109618", "#990099", "#3B3EAC", "#0099C6",
1074
- "#DD4477", "#66AA00", "#B82E2E", "#316395", "#994499", "#22AA99", "#AAAA11",
1075
- "#6633CC", "#E67300", "#8B0707", "#329262", "#5574A6", "#651067"
1076
- ];
1077
-
1078
1188
  var hideLegend = function (options, legend, hideLegend) {
1079
1189
  if (legend !== undefined) {
1080
- options.legend.display = !!legend;
1081
- if (legend && legend !== true) {
1082
- options.legend.position = legend;
1190
+ var position;
1191
+ if (!legend) {
1192
+ position = "none";
1193
+ } else if (legend === true) {
1194
+ position = "right";
1195
+ } else {
1196
+ position = legend;
1083
1197
  }
1198
+ options.legend.position = position;
1084
1199
  } else if (hideLegend) {
1085
- options.legend.display = false;
1200
+ options.legend.position = "none";
1086
1201
  }
1087
1202
  };
1088
1203
 
1089
1204
  var setTitle = function (options, title) {
1090
- options.title.display = true;
1091
- options.title.text = title;
1205
+ options.title = title;
1206
+ options.titleTextStyle = {color: "#333", fontSize: "20px"};
1092
1207
  };
1093
1208
 
1094
1209
  var setMin = function (options, min) {
1095
- if (min !== null) {
1096
- options.scales.yAxes[0].ticks.min = toFloat(min);
1097
- }
1210
+ options.vAxis.viewWindow.min = min;
1098
1211
  };
1099
1212
 
1100
1213
  var setMax = function (options, max) {
1101
- options.scales.yAxes[0].ticks.max = toFloat(max);
1214
+ options.vAxis.viewWindow.max = max;
1102
1215
  };
1103
1216
 
1104
1217
  var setBarMin = function (options, min) {
1105
- if (min !== null) {
1106
- options.scales.xAxes[0].ticks.min = toFloat(min);
1107
- }
1218
+ options.hAxis.viewWindow.min = min;
1108
1219
  };
1109
1220
 
1110
1221
  var setBarMax = function (options, max) {
1111
- options.scales.xAxes[0].ticks.max = toFloat(max);
1222
+ options.hAxis.viewWindow.max = max;
1112
1223
  };
1113
1224
 
1114
1225
  var setStacked = function (options, stacked) {
1115
- options.scales.xAxes[0].stacked = !!stacked;
1116
- options.scales.yAxes[0].stacked = !!stacked;
1226
+ options.isStacked = !!stacked;
1117
1227
  };
1118
1228
 
1119
1229
  var setXtitle = function (options, title) {
1120
- options.scales.xAxes[0].scaleLabel.display = true;
1121
- options.scales.xAxes[0].scaleLabel.labelString = title;
1230
+ options.hAxis.title = title;
1231
+ options.hAxis.titleTextStyle.italic = false;
1122
1232
  };
1123
1233
 
1124
1234
  var setYtitle = function (options, title) {
1125
- options.scales.yAxes[0].scaleLabel.display = true;
1126
- options.scales.yAxes[0].scaleLabel.labelString = title;
1127
- };
1128
-
1129
- var drawChart = function(chart, type, data, options) {
1130
- if (chart.chart) {
1131
- chart.chart.destroy();
1132
- } else {
1133
- chart.element.innerHTML = "<canvas></canvas>";
1134
- }
1135
-
1136
- var ctx = chart.element.getElementsByTagName("CANVAS")[0];
1137
- chart.chart = new Chart(ctx, {
1138
- type: type,
1139
- data: data,
1140
- options: options
1141
- });
1142
- };
1143
-
1144
- // http://stackoverflow.com/questions/5623838/rgb-to-hex-and-hex-to-rgb
1145
- var addOpacity = function(hex, opacity) {
1146
- var result = /^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);
1147
- return result ? "rgba(" + parseInt(result[1], 16) + ", " + parseInt(result[2], 16) + ", " + parseInt(result[3], 16) + ", " + opacity + ")" : hex;
1148
- };
1149
-
1150
- var setLabelSize = function (chart, data, options) {
1151
- var maxLabelSize = Math.ceil(chart.element.offsetWidth / 4.0 / data.labels.length);
1152
- if (maxLabelSize > 25) {
1153
- maxLabelSize = 25;
1154
- }
1155
- options.scales.xAxes[0].ticks.callback = function (value) {
1156
- value = toStr(value);
1157
- if (value.length > maxLabelSize) {
1158
- return value.substring(0, maxLabelSize - 2) + "...";
1159
- } else {
1160
- return value;
1161
- }
1162
- };
1235
+ options.vAxis.title = title;
1236
+ options.vAxis.titleTextStyle.italic = false;
1163
1237
  };
1164
1238
 
1165
- var jsOptions = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);
1166
-
1167
- var createDataTable = function (chart, options, chartType) {
1168
- var datasets = [];
1169
- var labels = [];
1170
-
1171
- var colors = chart.options.colors || defaultColors;
1172
-
1173
- var day = true;
1174
- var week = true;
1175
- var dayOfWeek;
1176
- var month = true;
1177
- var year = true;
1178
- var hour = true;
1179
- var minute = true;
1180
- var detectType = (chartType === "line" || chartType === "area") && !chart.discrete;
1181
-
1182
- var series = chart.data;
1183
-
1184
- var sortedLabels = [];
1239
+ var jsOptions = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setMin, setMax, setStacked, setXtitle, setYtitle);
1185
1240
 
1186
- var i, j, s, d, key, rows = [];
1241
+ // cant use object as key
1242
+ var createDataTable = function (series, columnType, xtype) {
1243
+ var i, j, s, d, key, rows = [], sortedLabels = [];
1187
1244
  for (i = 0; i < series.length; i++) {
1188
1245
  s = series[i];
1189
1246
 
1190
1247
  for (j = 0; j < s.data.length; j++) {
1191
1248
  d = s.data[j];
1192
- key = detectType ? d[0].getTime() : d[0];
1249
+ key = (columnType === "datetime") ? d[0].getTime() : d[0];
1193
1250
  if (!rows[key]) {
1194
1251
  rows[key] = new Array(series.length);
1195
- }
1196
- rows[key][i] = toFloat(d[1]);
1197
- if (sortedLabels.indexOf(key) === -1) {
1198
1252
  sortedLabels.push(key);
1199
1253
  }
1254
+ rows[key][i] = toFloat(d[1]);
1200
1255
  }
1201
1256
  }
1202
1257
 
1203
- if (detectType || chart.options.xtype === "number") {
1204
- sortedLabels.sort(sortByNumber);
1205
- }
1206
-
1207
1258
  var rows2 = [];
1208
- for (j = 0; j < series.length; j++) {
1209
- rows2.push([]);
1210
- }
1211
-
1259
+ var day = true;
1212
1260
  var value;
1213
- var k;
1214
- for (k = 0; k < sortedLabels.length; k++) {
1215
- i = sortedLabels[k];
1216
- if (detectType) {
1261
+ for (j = 0; j < sortedLabels.length; j++) {
1262
+ i = sortedLabels[j];
1263
+ if (columnType === "datetime") {
1217
1264
  value = new Date(toFloat(i));
1218
- // TODO make this efficient
1219
1265
  day = day && isDay(value);
1220
- if (!dayOfWeek) {
1221
- dayOfWeek = value.getDay();
1222
- }
1223
- week = week && isWeek(value, dayOfWeek);
1224
- month = month && isMonth(value);
1225
- year = year && isYear(value);
1226
- hour = hour && isHour(value);
1227
- minute = minute && isMinute(value);
1228
- } else {
1229
- value = i;
1230
- }
1231
- labels.push(value);
1232
- for (j = 0; j < series.length; j++) {
1233
- // Chart.js doesn't like undefined
1234
- rows2[j].push(rows[i][j] === undefined ? null : rows[i][j]);
1235
- }
1236
- }
1237
-
1238
- for (i = 0; i < series.length; i++) {
1239
- s = series[i];
1240
-
1241
- var color = s.color || colors[i];
1242
- var backgroundColor = chartType !== "line" ? addOpacity(color, 0.5) : color;
1243
-
1244
- var dataset = {
1245
- label: s.name,
1246
- data: rows2[i],
1247
- fill: chartType === "area",
1248
- borderColor: color,
1249
- backgroundColor: backgroundColor,
1250
- pointBackgroundColor: color,
1251
- borderWidth: 2
1252
- };
1253
-
1254
- if (s.stack) {
1255
- dataset.stack = s.stack;
1256
- }
1257
-
1258
- // PATCH_BEGIN
1259
- if (chart.options.y2 === true) {
1260
- dataset.yAxisID = (s.y2 === true) ? 'y-axis-right' : 'y-axis-left';
1261
- options.scales.yAxes = [
1262
- { id: 'y-axis-left', position: 'left' },
1263
- { id: 'y-axis-right', position: 'right' }
1264
- ];
1265
- }
1266
- // PATCH_END
1267
-
1268
- if (chart.options.curve === false) {
1269
- dataset.lineTension = 0;
1270
- }
1271
-
1272
- if (chart.options.points === false) {
1273
- dataset.pointRadius = 0;
1274
- dataset.pointHitRadius = 5;
1275
- }
1276
-
1277
- datasets.push(merge(dataset, s.library || {}));
1278
- }
1279
-
1280
- if (detectType && labels.length > 0) {
1281
- var minTime = labels[0].getTime();
1282
- var maxTime = labels[0].getTime();
1283
- for (i = 1; i < labels.length; i++) {
1284
- value = labels[i].getTime();
1285
- if (value < minTime) {
1286
- minTime = value;
1287
- }
1288
- if (value > maxTime) {
1289
- maxTime = value;
1290
- }
1291
- }
1292
-
1293
- var timeDiff = (maxTime - minTime) / (86400 * 1000.0);
1294
-
1295
- if (!options.scales.xAxes[0].time.unit) {
1296
- var step;
1297
- if (year || timeDiff > 365 * 10) {
1298
- options.scales.xAxes[0].time.unit = "year";
1299
- step = 365;
1300
- } else if (month || timeDiff > 30 * 10) {
1301
- options.scales.xAxes[0].time.unit = "month";
1302
- step = 30;
1303
- } else if (day || timeDiff > 10) {
1304
- options.scales.xAxes[0].time.unit = "day";
1305
- step = 1;
1306
- } else if (hour || timeDiff > 0.5) {
1307
- options.scales.xAxes[0].time.displayFormats = {hour: "MMM D, h a"};
1308
- options.scales.xAxes[0].time.unit = "hour";
1309
- step = 1 / 24.0;
1310
- } else if (minute) {
1311
- options.scales.xAxes[0].time.displayFormats = {minute: "h:mm a"};
1312
- options.scales.xAxes[0].time.unit = "minute";
1313
- step = 1 / 24.0 / 60.0;
1314
- }
1315
-
1316
- if (step && timeDiff > 0) {
1317
- var unitStepSize = Math.ceil(timeDiff / step / (chart.element.offsetWidth / 100.0));
1318
- if (week && step === 1) {
1319
- unitStepSize = Math.ceil(unitStepSize / 7.0) * 7;
1320
- }
1321
- options.scales.xAxes[0].time.unitStepSize = unitStepSize;
1322
- }
1266
+ } else if (columnType === "number") {
1267
+ value = toFloat(i);
1268
+ } else {
1269
+ value = i;
1323
1270
  }
1271
+ rows2.push([value].concat(rows[i]));
1272
+ }
1273
+ if (columnType === "datetime") {
1274
+ rows2.sort(sortByTime);
1275
+ } else if (columnType === "number") {
1276
+ rows2.sort(sortByNumberSeries);
1277
+ }
1324
1278
 
1325
- if (!options.scales.xAxes[0].time.tooltipFormat) {
1326
- if (day) {
1327
- options.scales.xAxes[0].time.tooltipFormat = "ll";
1328
- } else if (hour) {
1329
- options.scales.xAxes[0].time.tooltipFormat = "MMM D, h a";
1330
- } else if (minute) {
1331
- options.scales.xAxes[0].time.tooltipFormat = "h:mm a";
1332
- }
1279
+ if (xtype === "number") {
1280
+ rows2.sort(sortByNumberSeries);
1281
+
1282
+ for (i = 0; i < rows2.length; i++) {
1283
+ rows2[i][0] = toStr(rows2[i][0]);
1333
1284
  }
1334
1285
  }
1335
1286
 
1336
- var data = {
1337
- labels: labels,
1338
- datasets: datasets
1339
- };
1287
+ // create datatable
1288
+ var data = new google.visualization.DataTable();
1289
+ columnType = columnType === "datetime" && day ? "date" : columnType;
1290
+ data.addColumn(columnType, "");
1291
+ for (i = 0; i < series.length; i++) {
1292
+ data.addColumn("number", series[i].name);
1293
+ }
1294
+ data.addRows(rows2);
1340
1295
 
1341
1296
  return data;
1342
1297
  };
1343
1298
 
1344
- this.renderLineChart = function (chart, chartType) {
1345
- if (chart.options.xtype === "number") {
1346
- return self.renderScatterChart(chart, chartType, true);
1299
+ var resize = function (callback) {
1300
+ if (window.attachEvent) {
1301
+ window.attachEvent("onresize", callback);
1302
+ } else if (window.addEventListener) {
1303
+ window.addEventListener("resize", callback, true);
1347
1304
  }
1305
+ callback();
1306
+ };
1348
1307
 
1349
- var chartOptions = {};
1350
- if (chartType === "area") {
1351
- // TODO fix area stacked
1352
- // chartOptions.stacked = true;
1353
- }
1354
- // fix for https://github.com/chartjs/Chart.js/issues/2441
1355
- if (!chart.options.max && allZeros(chart.data)) {
1356
- chartOptions.max = 1;
1308
+ var drawChart = function(chart, type, data, options) {
1309
+ if (chart.chart) {
1310
+ chart.chart.clearChart();
1357
1311
  }
1358
1312
 
1359
- var options = jsOptions(chart, merge(chartOptions, chart.options));
1313
+ chart.chart = new type(chart.element);
1314
+ resize(function () {
1315
+ chart.chart.draw(data, options);
1316
+ });
1317
+ };
1360
1318
 
1361
- var data = createDataTable(chart, options, chartType || "line");
1319
+ var renderLineChart = function (chart) {
1320
+ waitForLoaded(function () {
1321
+ var chartOptions = {};
1362
1322
 
1363
- options.scales.xAxes[0].type = chart.discrete ? "category" : "time";
1323
+ if (chart.options.curve === false) {
1324
+ chartOptions.curveType = "none";
1325
+ }
1364
1326
 
1365
- drawChart(chart, "line", data, options);
1327
+ if (chart.options.points === false) {
1328
+ chartOptions.pointSize = 0;
1329
+ }
1330
+
1331
+ var options = jsOptions(chart, chart.options, chartOptions);
1332
+ var columnType = chart.discrete ? "string" : "datetime";
1333
+ if (chart.options.xtype === "number") {
1334
+ columnType = "number";
1335
+ }
1336
+ var data = createDataTable(chart.data, columnType);
1337
+
1338
+ drawChart(chart, google.visualization.LineChart, data, options);
1339
+ });
1366
1340
  };
1367
1341
 
1368
- this.renderPieChart = function (chart) {
1369
- var options = merge({}, baseOptions);
1370
- if (chart.options.donut) {
1371
- options.cutoutPercentage = 50;
1372
- }
1342
+ var renderPieChart = function (chart) {
1343
+ waitForLoaded(function () {
1344
+ var chartOptions = {
1345
+ chartArea: {
1346
+ top: "10%",
1347
+ height: "80%"
1348
+ },
1349
+ legend: {}
1350
+ };
1351
+ if (chart.options.colors) {
1352
+ chartOptions.colors = chart.options.colors;
1353
+ }
1354
+ if (chart.options.donut) {
1355
+ chartOptions.pieHole = 0.5;
1356
+ }
1357
+ if ("legend" in chart.options) {
1358
+ hideLegend(chartOptions, chart.options.legend);
1359
+ }
1360
+ if (chart.options.title) {
1361
+ setTitle(chartOptions, chart.options.title);
1362
+ }
1363
+ var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
1373
1364
 
1374
- if ("legend" in chart.options) {
1375
- hideLegend(options, chart.options.legend);
1376
- }
1365
+ var data = new google.visualization.DataTable();
1366
+ data.addColumn("string", "");
1367
+ data.addColumn("number", "Value");
1368
+ data.addRows(chart.data);
1377
1369
 
1378
- if (chart.options.title) {
1379
- setTitle(options, chart.options.title);
1380
- }
1370
+ drawChart(chart, google.visualization.PieChart, data, options);
1371
+ });
1372
+ };
1381
1373
 
1382
- options = merge(options, chart.options.library || {});
1374
+ var renderColumnChart = function (chart) {
1375
+ waitForLoaded(function () {
1376
+ var options = jsOptions(chart, chart.options);
1377
+ var data = createDataTable(chart.data, "string", chart.options.xtype);
1383
1378
 
1384
- var labels = [];
1385
- var values = [];
1386
- for (var i = 0; i < chart.data.length; i++) {
1387
- var point = chart.data[i];
1388
- labels.push(point[0]);
1389
- values.push(point[1]);
1390
- }
1379
+ drawChart(chart, google.visualization.ColumnChart, data, options);
1380
+ });
1381
+ };
1391
1382
 
1392
- var data = {
1393
- labels: labels,
1394
- datasets: [
1395
- {
1396
- data: values,
1397
- backgroundColor: chart.options.colors || defaultColors
1383
+ var renderBarChart = function (chart) {
1384
+ waitForLoaded(function () {
1385
+ var chartOptions = {
1386
+ hAxis: {
1387
+ gridlines: {
1388
+ color: "#ccc"
1389
+ }
1398
1390
  }
1399
- ]
1400
- };
1391
+ };
1392
+ var options = jsOptionsFunc(defaultOptions, hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options, chartOptions);
1393
+ var data = createDataTable(chart.data, "string", chart.options.xtype);
1401
1394
 
1402
- drawChart(chart, "pie", data, options);
1395
+ drawChart(chart, google.visualization.BarChart, data, options);
1396
+ });
1403
1397
  };
1404
1398
 
1405
- this.renderColumnChart = function (chart, chartType) {
1406
- var options;
1407
- if (chartType === "bar") {
1408
- options = jsOptionsFunc(merge(baseOptions, defaultOptions), hideLegend, setTitle, setBarMin, setBarMax, setStacked, setXtitle, setYtitle)(chart, chart.options);
1409
- } else {
1410
- options = jsOptions(chart, chart.options);
1411
- }
1412
- var data = createDataTable(chart, options, "column");
1413
- setLabelSize(chart, data, options);
1414
- drawChart(chart, (chartType === "bar" ? "horizontalBar" : "bar"), data, options);
1415
- };
1399
+ var renderAreaChart = function (chart) {
1400
+ waitForLoaded(function () {
1401
+ var chartOptions = {
1402
+ isStacked: true,
1403
+ pointSize: 0,
1404
+ areaOpacity: 0.5
1405
+ };
1416
1406
 
1417
- var self = this;
1407
+ var options = jsOptions(chart, chart.options, chartOptions);
1408
+ var columnType = chart.discrete ? "string" : "datetime";
1409
+ if (chart.options.xtype === "number") {
1410
+ columnType = "number";
1411
+ }
1412
+ var data = createDataTable(chart.data, columnType);
1418
1413
 
1419
- this.renderAreaChart = function (chart) {
1420
- self.renderLineChart(chart, "area");
1414
+ drawChart(chart, google.visualization.AreaChart, data, options);
1415
+ });
1421
1416
  };
1422
1417
 
1423
- this.renderBarChart = function (chart) {
1424
- self.renderColumnChart(chart, "bar");
1425
- };
1418
+ var renderGeoChart = function (chart) {
1419
+ waitForLoaded(function () {
1420
+ var chartOptions = {
1421
+ legend: "none",
1422
+ colorAxis: {
1423
+ colors: chart.options.colors || ["#f6c7b6", "#ce502d"]
1424
+ }
1425
+ };
1426
+ var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
1426
1427
 
1427
- this.renderScatterChart = function (chart, chartType, lineChart) {
1428
- chartType = chartType || "line";
1428
+ var data = new google.visualization.DataTable();
1429
+ data.addColumn("string", "");
1430
+ data.addColumn("number", chart.options.label || "Value");
1431
+ data.addRows(chart.data);
1429
1432
 
1430
- var options = jsOptions(chart, chart.options);
1433
+ drawChart(chart, google.visualization.GeoChart, data, options);
1434
+ });
1435
+ };
1431
1436
 
1432
- var colors = chart.options.colors || defaultColors;
1437
+ var renderScatterChart = function (chart) {
1438
+ waitForLoaded(function () {
1439
+ var chartOptions = {};
1440
+ var options = jsOptions(chart, chart.options, chartOptions);
1433
1441
 
1434
- var datasets = [];
1435
- var series = chart.data;
1436
- for (var i = 0; i < series.length; i++) {
1437
- var s = series[i];
1438
- var d = [];
1439
- for (var j = 0; j < s.data.length; j++) {
1440
- var point = {
1441
- x: toFloat(s.data[j][0]),
1442
- y: toFloat(s.data[j][1])
1443
- };
1444
- if (chartType === "bubble") {
1445
- point.r = toFloat(s.data[j][2]);
1442
+ var series = chart.data, rows2 = [], i, j, data, d;
1443
+ for (i = 0; i < series.length; i++) {
1444
+ d = series[i].data;
1445
+ for (j = 0; j < d.length; j++) {
1446
+ var row = new Array(series.length + 1);
1447
+ row[0] = d[j][0];
1448
+ row[i + 1] = d[j][1];
1449
+ rows2.push(row);
1446
1450
  }
1447
- d.push(point);
1448
1451
  }
1449
1452
 
1450
- var color = s.color || colors[i];
1451
- var backgroundColor = chartType === "area" ? addOpacity(color, 0.5) : color;
1453
+ data = new google.visualization.DataTable();
1454
+ data.addColumn("number", "");
1455
+ for (i = 0; i < series.length; i++) {
1456
+ data.addColumn("number", series[i].name);
1457
+ }
1458
+ data.addRows(rows2);
1452
1459
 
1453
- datasets.push({
1454
- label: s.name,
1455
- showLine: lineChart || false,
1456
- data: d,
1457
- borderColor: color,
1458
- backgroundColor: backgroundColor,
1459
- pointBackgroundColor: color,
1460
- fill: chartType === "area"
1461
- })
1462
- }
1460
+ drawChart(chart, google.visualization.ScatterChart, data, options);
1461
+ });
1462
+ };
1463
1463
 
1464
- if (chartType === "area") {
1465
- chartType = "line";
1466
- }
1464
+ var renderTimeline = function (chart) {
1465
+ waitForLoaded("timeline", function () {
1466
+ var chartOptions = {
1467
+ legend: "none"
1468
+ };
1467
1469
 
1468
- var data = {datasets: datasets};
1470
+ if (chart.options.colors) {
1471
+ chartOptions.colors = chart.options.colors;
1472
+ }
1473
+ var options = merge(merge(defaultOptions, chartOptions), chart.options.library || {});
1469
1474
 
1470
- options.scales.xAxes[0].type = "linear";
1471
- options.scales.xAxes[0].position = "bottom";
1475
+ var data = new google.visualization.DataTable();
1476
+ data.addColumn({type: "string", id: "Name"});
1477
+ data.addColumn({type: "date", id: "Start"});
1478
+ data.addColumn({type: "date", id: "End"});
1479
+ data.addRows(chart.data);
1472
1480
 
1473
- drawChart(chart, chartType, data, options);
1481
+ chart.element.style.lineHeight = "normal";
1482
+
1483
+ drawChart(chart, google.visualization.Timeline, data, options);
1484
+ });
1474
1485
  };
1475
1486
 
1476
- this.renderBubbleChart = function (chart) {
1477
- this.renderScatterChart(chart, "bubble");
1487
+ return {
1488
+ name: "google",
1489
+ renderLineChart: renderLineChart,
1490
+ renderPieChart: renderPieChart,
1491
+ renderColumnChart: renderColumnChart,
1492
+ renderBarChart: renderBarChart,
1493
+ renderAreaChart: renderAreaChart,
1494
+ renderScatterChart: renderScatterChart,
1495
+ renderGeoChart: renderGeoChart,
1496
+ renderTimeline: renderTimeline
1478
1497
  };
1479
- };
1498
+ })();
1480
1499
 
1481
- adapters.unshift(ChartjsAdapter);
1500
+ adapters.push(GoogleChartsAdapter);
1482
1501
  }
1483
1502
  }
1484
1503
 
@@ -1615,13 +1634,13 @@
1615
1634
  function copySeries(series) {
1616
1635
  var newSeries = [], i, j;
1617
1636
  for (i = 0; i < series.length; i++) {
1618
- var copy = {}
1637
+ var copy = {};
1619
1638
  for (j in series[i]) {
1620
1639
  if (series[i].hasOwnProperty(j)) {
1621
1640
  copy[j] = series[i][j];
1622
1641
  }
1623
1642
  }
1624
- newSeries.push(copy)
1643
+ newSeries.push(copy);
1625
1644
  }
1626
1645
  return newSeries;
1627
1646
  }
@@ -1720,7 +1739,7 @@
1720
1739
  if (!processData) {
1721
1740
  processData = function (chart) {
1722
1741
  return chart.rawData;
1723
- }
1742
+ };
1724
1743
  }
1725
1744
 
1726
1745
  // getters
@@ -1782,7 +1801,7 @@
1782
1801
  } else {
1783
1802
  return null;
1784
1803
  }
1785
- }
1804
+ };
1786
1805
 
1787
1806
  Chartkick.charts[element.id] = chart;
1788
1807