ezii-os 1.1.0 → 2.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (621) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +11 -3
  3. data/Gemfile.lock +34 -17
  4. data/Procfile +1 -0
  5. data/app/assets/stylesheets/address_searches.scss +3 -0
  6. data/app/assets/stylesheets/application.css +6 -0
  7. data/app/assets/stylesheets/banal/documents.scss +3 -0
  8. data/app/assets/stylesheets/banal/employees.scss +3 -0
  9. data/app/assets/stylesheets/banal/links.scss +3 -0
  10. data/app/assets/stylesheets/banal/metadata.scss +3 -0
  11. data/app/assets/stylesheets/banal/related_objects.scss +3 -0
  12. data/app/assets/stylesheets/banal_complexes.scss +3 -0
  13. data/app/assets/stylesheets/comments.scss +3 -0
  14. data/app/assets/stylesheets/employees.scss +3 -0
  15. data/app/controllers/address_searches_controller.rb +76 -0
  16. data/app/controllers/banal/brainstorms_controller.rb +22 -2
  17. data/app/controllers/banal/documents_controller.rb +90 -0
  18. data/app/controllers/banal/employees_controller.rb +74 -0
  19. data/app/controllers/banal/links_controller.rb +82 -0
  20. data/app/controllers/banal/metadata_controller.rb +74 -0
  21. data/app/controllers/banal/projects_controller.rb +1 -1
  22. data/app/controllers/banal/related_objects_controller.rb +74 -0
  23. data/app/controllers/banal_complexes_controller.rb +74 -0
  24. data/app/controllers/comments_controller.rb +90 -0
  25. data/app/controllers/concerns/banal/related_object_creation_and_linking.rb +11 -0
  26. data/app/controllers/employees_controller.rb +74 -0
  27. data/app/helpers/address_searches_helper.rb +2 -0
  28. data/app/helpers/banal/documents_helper.rb +2 -0
  29. data/app/helpers/banal/employees_helper.rb +2 -0
  30. data/app/helpers/banal/links_helper.rb +2 -0
  31. data/app/helpers/banal/metadata_helper.rb +2 -0
  32. data/app/helpers/banal/related_objects_helper.rb +2 -0
  33. data/app/helpers/banal_complexes_helper.rb +2 -0
  34. data/app/helpers/comments_helper.rb +2 -0
  35. data/app/helpers/employees_helper.rb +2 -0
  36. data/app/javascript/packs/application.js +5 -0
  37. data/app/models/address_search.rb +2 -0
  38. data/app/models/banal/brainstorm.rb +3 -0
  39. data/app/models/banal/document.rb +4 -0
  40. data/app/models/banal/employee.rb +2 -0
  41. data/app/models/banal/link.rb +4 -0
  42. data/app/models/banal/metadatum.rb +2 -0
  43. data/app/models/banal/project.rb +5 -3
  44. data/app/models/banal/related_object.rb +5 -0
  45. data/app/models/banal_complex.rb +3 -0
  46. data/app/models/banal_dropbox_api.rb +8 -0
  47. data/app/models/comment.rb +4 -0
  48. data/app/models/employee.rb +2 -0
  49. data/app/models/ezii_os_path.rb +8 -0
  50. data/app/views/address_searches/_address_search.json.jbuilder +2 -0
  51. data/app/views/address_searches/_form.html.erb +27 -0
  52. data/app/views/address_searches/edit.html.erb +6 -0
  53. data/app/views/address_searches/index.html.erb +29 -0
  54. data/app/views/address_searches/index.json.jbuilder +1 -0
  55. data/app/views/address_searches/new.html.erb +5 -0
  56. data/app/views/address_searches/show.html.erb +18 -0
  57. data/app/views/address_searches/show.json.jbuilder +1 -0
  58. data/app/views/application/_navbar.html.erb +10 -0
  59. data/app/views/banal/brainstorms/_comment.html.erb +35 -0
  60. data/app/views/banal/brainstorms/_comments.html.erb +3 -0
  61. data/app/views/banal/brainstorms/_form.html.erb +0 -5
  62. data/app/views/banal/brainstorms/index.html.erb +29 -6
  63. data/app/views/banal/documents/_banal_document.json.jbuilder +2 -0
  64. data/app/views/banal/documents/_form.html.erb +61 -0
  65. data/app/views/banal/documents/edit.html.erb +6 -0
  66. data/app/views/banal/documents/index.html.erb +31 -0
  67. data/app/views/banal/documents/index.json.jbuilder +1 -0
  68. data/app/views/banal/documents/new.html.erb +32 -0
  69. data/app/views/banal/documents/show.html.erb +19 -0
  70. data/app/views/banal/documents/show.json.jbuilder +1 -0
  71. data/app/views/banal/employees/_banal_employee.json.jbuilder +2 -0
  72. data/app/views/banal/employees/_form.html.erb +77 -0
  73. data/app/views/banal/employees/edit.html.erb +6 -0
  74. data/app/views/banal/employees/index.html.erb +49 -0
  75. data/app/views/banal/employees/index.json.jbuilder +1 -0
  76. data/app/views/banal/employees/new.html.erb +5 -0
  77. data/app/views/banal/employees/show.html.erb +64 -0
  78. data/app/views/banal/employees/show.json.jbuilder +1 -0
  79. data/app/views/banal/links/_banal_link.json.jbuilder +2 -0
  80. data/app/views/banal/links/_form.html.erb +47 -0
  81. data/app/views/banal/links/edit.html.erb +6 -0
  82. data/app/views/banal/links/index.html.erb +31 -0
  83. data/app/views/banal/links/index.json.jbuilder +1 -0
  84. data/app/views/banal/links/new.html.erb +5 -0
  85. data/app/views/banal/links/show.html.erb +19 -0
  86. data/app/views/banal/links/show.json.jbuilder +1 -0
  87. data/app/views/banal/metadata/_banal_metadatum.json.jbuilder +2 -0
  88. data/app/views/banal/metadata/_form.html.erb +32 -0
  89. data/app/views/banal/metadata/edit.html.erb +6 -0
  90. data/app/views/banal/metadata/index.html.erb +31 -0
  91. data/app/views/banal/metadata/index.json.jbuilder +1 -0
  92. data/app/views/banal/metadata/new.html.erb +5 -0
  93. data/app/views/banal/metadata/show.html.erb +19 -0
  94. data/app/views/banal/metadata/show.json.jbuilder +1 -0
  95. data/app/views/banal/projects/_banal_project.json.jbuilder +1 -1
  96. data/app/views/banal/projects/_form.html.erb +40 -0
  97. data/app/views/banal/projects/index.html.erb +18 -4
  98. data/app/views/banal/projects/show.html.erb +65 -3
  99. data/app/views/banal/related_objects/_banal_related_object.json.jbuilder +2 -0
  100. data/app/views/banal/related_objects/_form.html.erb +27 -0
  101. data/app/views/banal/related_objects/_hidden_fields.html.erb +2 -0
  102. data/app/views/banal/related_objects/edit.html.erb +6 -0
  103. data/app/views/banal/related_objects/index.html.erb +29 -0
  104. data/app/views/banal/related_objects/index.json.jbuilder +1 -0
  105. data/app/views/banal/related_objects/new.html.erb +5 -0
  106. data/app/views/banal/related_objects/show.html.erb +14 -0
  107. data/app/views/banal/related_objects/show.json.jbuilder +1 -0
  108. data/app/views/banal_complexes/_banal_complex.json.jbuilder +2 -0
  109. data/app/views/banal_complexes/_form.html.erb +27 -0
  110. data/app/views/banal_complexes/edit.html.erb +6 -0
  111. data/app/views/banal_complexes/index.html.erb +42 -0
  112. data/app/views/banal_complexes/index.json.jbuilder +1 -0
  113. data/app/views/banal_complexes/new.html.erb +5 -0
  114. data/app/views/banal_complexes/show.html.erb +14 -0
  115. data/app/views/banal_complexes/show.json.jbuilder +1 -0
  116. data/app/views/comments/_comment.json.jbuilder +2 -0
  117. data/app/views/comments/_form.html.erb +32 -0
  118. data/app/views/comments/edit.html.erb +6 -0
  119. data/app/views/comments/index.html.erb +31 -0
  120. data/app/views/comments/index.json.jbuilder +1 -0
  121. data/app/views/comments/new.html.erb +5 -0
  122. data/app/views/comments/show.html.erb +19 -0
  123. data/app/views/comments/show.json.jbuilder +1 -0
  124. data/app/views/directories/show.html.erb +17 -3
  125. data/app/views/employees/_employee.json.jbuilder +2 -0
  126. data/app/views/employees/_form.html.erb +77 -0
  127. data/app/views/employees/edit.html.erb +6 -0
  128. data/app/views/employees/index.html.erb +49 -0
  129. data/app/views/employees/index.json.jbuilder +1 -0
  130. data/app/views/employees/new.html.erb +5 -0
  131. data/app/views/employees/show.html.erb +64 -0
  132. data/app/views/employees/show.json.jbuilder +1 -0
  133. data/app/views/layouts/application.html.erb +87 -5
  134. data/banal-data-science.bash +4 -0
  135. data/config/database.yml +3 -24
  136. data/config/routes.rb +24 -1
  137. data/db/development.sqlite3 +0 -0
  138. data/db/migrate/20190913073109_create_banal_projects.rb +17 -0
  139. data/db/migrate/20190913073110_create_banal_metadata.rb +11 -0
  140. data/db/migrate/20190913073111_create_banal_related_objects.rb +10 -0
  141. data/db/migrate/20190913143313_create_banal_documents.rb +11 -0
  142. data/db/migrate/20190913143326_create_banal_links.rb +11 -0
  143. data/db/migrate/20190915110713_add_dropbox_file_id_to_banal_documents.rb +5 -0
  144. data/db/migrate/20190915195312_add_deleted_at_to_banal_brainstorms.rb +6 -0
  145. data/db/migrate/20190915205450_create_employees.rb +20 -0
  146. data/db/migrate/20190915205629_create_banal_employees.rb +20 -0
  147. data/db/migrate/20190916094440_create_address_searches.rb +10 -0
  148. data/db/migrate/20190918222028_create_comments.rb +12 -0
  149. data/db/migrate/20190919164900_create_banal_complexes.rb +11 -0
  150. data/db/schema.rb +137 -7
  151. data/ezii-os-2.0.0.gem +0 -0
  152. data/ezii-os.gemspec +3 -4
  153. data/latest.dump +0 -0
  154. data/log/development.log +22199 -0
  155. data/node_modules/chart.js/LICENSE.md +9 -0
  156. data/node_modules/chart.js/README.md +32 -0
  157. data/node_modules/chart.js/bower.json +16 -0
  158. data/node_modules/chart.js/composer.json +26 -0
  159. data/node_modules/chart.js/dist/Chart.bundle.js +19288 -0
  160. data/node_modules/chart.js/dist/Chart.bundle.min.js +7 -0
  161. data/node_modules/chart.js/dist/Chart.css +47 -0
  162. data/node_modules/chart.js/dist/Chart.js +14680 -0
  163. data/node_modules/chart.js/dist/Chart.min.css +1 -0
  164. data/node_modules/chart.js/dist/Chart.min.js +7 -0
  165. data/node_modules/chart.js/package.json +69 -0
  166. data/node_modules/chartjs-color/CHANGELOG.md +35 -0
  167. data/node_modules/chartjs-color/LICENSE +21 -0
  168. data/node_modules/chartjs-color/README.md +126 -0
  169. data/node_modules/chartjs-color/index.js +485 -0
  170. data/node_modules/chartjs-color/node_modules/color-convert/CHANGELOG.md +4 -0
  171. data/node_modules/chartjs-color/node_modules/color-convert/LICENSE +21 -0
  172. data/node_modules/chartjs-color/node_modules/color-convert/README.md +57 -0
  173. data/node_modules/chartjs-color/node_modules/color-convert/component.json +9 -0
  174. data/node_modules/chartjs-color/node_modules/color-convert/conversions.js +698 -0
  175. data/node_modules/chartjs-color/node_modules/color-convert/index.js +92 -0
  176. data/node_modules/chartjs-color/node_modules/color-convert/package.json +20 -0
  177. data/node_modules/chartjs-color/node_modules/color-convert/test/basic.js +187 -0
  178. data/node_modules/chartjs-color/node_modules/color-convert/test/speed.js +23 -0
  179. data/node_modules/chartjs-color/package.json +49 -0
  180. data/node_modules/chartjs-color-string/CHANGELOG.md +11 -0
  181. data/node_modules/chartjs-color-string/LICENSE +21 -0
  182. data/node_modules/chartjs-color-string/README.md +46 -0
  183. data/node_modules/chartjs-color-string/color-string.js +237 -0
  184. data/node_modules/chartjs-color-string/package.json +24 -0
  185. data/node_modules/chartjs-color-string/test/basic.js +110 -0
  186. data/node_modules/chartkick/CHANGELOG.md +215 -0
  187. data/node_modules/chartkick/LICENSE.txt +22 -0
  188. data/node_modules/chartkick/README.md +537 -0
  189. data/node_modules/chartkick/dist/chartkick.esm.js +2286 -0
  190. data/node_modules/chartkick/dist/chartkick.js +2294 -0
  191. data/node_modules/chartkick/dist/chartkick.min.js +1 -0
  192. data/node_modules/chartkick/package.json +34 -0
  193. data/node_modules/{color-string → color-convert}/node_modules/color-name/LICENSE +0 -0
  194. data/node_modules/{color-string → color-convert}/node_modules/color-name/README.md +0 -0
  195. data/node_modules/{color-string → color-convert}/node_modules/color-name/index.js +0 -0
  196. data/node_modules/{color-string → color-convert}/node_modules/color-name/package.json +25 -28
  197. data/node_modules/{color-name → color-convert/node_modules/color-name}/test.js +0 -0
  198. data/node_modules/color-name/package.json +28 -25
  199. data/node_modules/moment/CHANGELOG.md +895 -0
  200. data/node_modules/moment/LICENSE +22 -0
  201. data/node_modules/moment/README.md +65 -0
  202. data/node_modules/moment/ender.js +1 -0
  203. data/node_modules/moment/locale/af.js +72 -0
  204. data/node_modules/moment/locale/ar-dz.js +58 -0
  205. data/node_modules/moment/locale/ar-kw.js +58 -0
  206. data/node_modules/moment/locale/ar-ly.js +121 -0
  207. data/node_modules/moment/locale/ar-ma.js +58 -0
  208. data/node_modules/moment/locale/ar-sa.js +103 -0
  209. data/node_modules/moment/locale/ar-tn.js +58 -0
  210. data/node_modules/moment/locale/ar.js +134 -0
  211. data/node_modules/moment/locale/az.js +104 -0
  212. data/node_modules/moment/locale/be.js +131 -0
  213. data/node_modules/moment/locale/bg.js +89 -0
  214. data/node_modules/moment/locale/bm.js +57 -0
  215. data/node_modules/moment/locale/bn.js +118 -0
  216. data/node_modules/moment/locale/bo.js +118 -0
  217. data/node_modules/moment/locale/br.js +107 -0
  218. data/node_modules/moment/locale/bs.js +150 -0
  219. data/node_modules/moment/locale/ca.js +87 -0
  220. data/node_modules/moment/locale/cs.js +171 -0
  221. data/node_modules/moment/locale/cv.js +62 -0
  222. data/node_modules/moment/locale/cy.js +79 -0
  223. data/node_modules/moment/locale/da.js +59 -0
  224. data/node_modules/moment/locale/de-at.js +75 -0
  225. data/node_modules/moment/locale/de-ch.js +75 -0
  226. data/node_modules/moment/locale/de.js +75 -0
  227. data/node_modules/moment/locale/dv.js +98 -0
  228. data/node_modules/moment/locale/el.js +99 -0
  229. data/node_modules/moment/locale/en-SG.js +66 -0
  230. data/node_modules/moment/locale/en-au.js +66 -0
  231. data/node_modules/moment/locale/en-ca.js +62 -0
  232. data/node_modules/moment/locale/en-gb.js +66 -0
  233. data/node_modules/moment/locale/en-ie.js +66 -0
  234. data/node_modules/moment/locale/en-il.js +61 -0
  235. data/node_modules/moment/locale/en-nz.js +66 -0
  236. data/node_modules/moment/locale/eo.js +70 -0
  237. data/node_modules/moment/locale/es-do.js +91 -0
  238. data/node_modules/moment/locale/es-us.js +91 -0
  239. data/node_modules/moment/locale/es.js +91 -0
  240. data/node_modules/moment/locale/et.js +79 -0
  241. data/node_modules/moment/locale/eu.js +65 -0
  242. data/node_modules/moment/locale/fa.js +105 -0
  243. data/node_modules/moment/locale/fi.js +108 -0
  244. data/node_modules/moment/locale/fo.js +59 -0
  245. data/node_modules/moment/locale/fr-ca.js +73 -0
  246. data/node_modules/moment/locale/fr-ch.js +77 -0
  247. data/node_modules/moment/locale/fr.js +82 -0
  248. data/node_modules/moment/locale/fy.js +74 -0
  249. data/node_modules/moment/locale/ga.js +76 -0
  250. data/node_modules/moment/locale/gd.js +75 -0
  251. data/node_modules/moment/locale/gl.js +76 -0
  252. data/node_modules/moment/locale/gom-latn.js +122 -0
  253. data/node_modules/moment/locale/gu.js +123 -0
  254. data/node_modules/moment/locale/he.js +96 -0
  255. data/node_modules/moment/locale/hi.js +123 -0
  256. data/node_modules/moment/locale/hr.js +153 -0
  257. data/node_modules/moment/locale/hu.js +109 -0
  258. data/node_modules/moment/locale/hy-am.js +94 -0
  259. data/node_modules/moment/locale/id.js +81 -0
  260. data/node_modules/moment/locale/is.js +131 -0
  261. data/node_modules/moment/locale/it-ch.js +68 -0
  262. data/node_modules/moment/locale/it.js +68 -0
  263. data/node_modules/moment/locale/ja.js +91 -0
  264. data/node_modules/moment/locale/jv.js +81 -0
  265. data/node_modules/moment/locale/ka.js +88 -0
  266. data/node_modules/moment/locale/kk.js +86 -0
  267. data/node_modules/moment/locale/km.js +109 -0
  268. data/node_modules/moment/locale/kn.js +125 -0
  269. data/node_modules/moment/locale/ko.js +80 -0
  270. data/node_modules/moment/locale/ku.js +118 -0
  271. data/node_modules/moment/locale/ky.js +86 -0
  272. data/node_modules/moment/locale/lb.js +135 -0
  273. data/node_modules/moment/locale/lo.js +69 -0
  274. data/node_modules/moment/locale/lt.js +117 -0
  275. data/node_modules/moment/locale/lv.js +96 -0
  276. data/node_modules/moment/locale/me.js +111 -0
  277. data/node_modules/moment/locale/mi.js +63 -0
  278. data/node_modules/moment/locale/mk.js +89 -0
  279. data/node_modules/moment/locale/ml.js +80 -0
  280. data/node_modules/moment/locale/mn.js +103 -0
  281. data/node_modules/moment/locale/mr.js +159 -0
  282. data/node_modules/moment/locale/ms-my.js +81 -0
  283. data/node_modules/moment/locale/ms.js +81 -0
  284. data/node_modules/moment/locale/mt.js +59 -0
  285. data/node_modules/moment/locale/my.js +92 -0
  286. data/node_modules/moment/locale/nb.js +61 -0
  287. data/node_modules/moment/locale/ne.js +122 -0
  288. data/node_modules/moment/locale/nl-be.js +86 -0
  289. data/node_modules/moment/locale/nl.js +86 -0
  290. data/node_modules/moment/locale/nn.js +59 -0
  291. data/node_modules/moment/locale/pa-in.js +123 -0
  292. data/node_modules/moment/locale/pl.js +125 -0
  293. data/node_modules/moment/locale/pt-br.js +60 -0
  294. data/node_modules/moment/locale/pt.js +64 -0
  295. data/node_modules/moment/locale/ro.js +74 -0
  296. data/node_modules/moment/locale/ru.js +181 -0
  297. data/node_modules/moment/locale/sd.js +97 -0
  298. data/node_modules/moment/locale/se.js +59 -0
  299. data/node_modules/moment/locale/si.js +70 -0
  300. data/node_modules/moment/locale/sk.js +155 -0
  301. data/node_modules/moment/locale/sl.js +172 -0
  302. data/node_modules/moment/locale/sq.js +67 -0
  303. data/node_modules/moment/locale/sr-cyrl.js +110 -0
  304. data/node_modules/moment/locale/sr.js +110 -0
  305. data/node_modules/moment/locale/ss.js +87 -0
  306. data/node_modules/moment/locale/sv.js +68 -0
  307. data/node_modules/moment/locale/sw.js +58 -0
  308. data/node_modules/moment/locale/ta.js +128 -0
  309. data/node_modules/moment/locale/te.js +88 -0
  310. data/node_modules/moment/locale/tet.js +66 -0
  311. data/node_modules/moment/locale/tg.js +115 -0
  312. data/node_modules/moment/locale/th.js +66 -0
  313. data/node_modules/moment/locale/tl-ph.js +61 -0
  314. data/node_modules/moment/locale/tlh.js +121 -0
  315. data/node_modules/moment/locale/tr.js +93 -0
  316. data/node_modules/moment/locale/tzl.js +90 -0
  317. data/node_modules/moment/locale/tzm-latn.js +57 -0
  318. data/node_modules/moment/locale/tzm.js +57 -0
  319. data/node_modules/moment/locale/ug-cn.js +118 -0
  320. data/node_modules/moment/locale/uk.js +153 -0
  321. data/node_modules/moment/locale/ur.js +97 -0
  322. data/node_modules/moment/locale/uz-latn.js +57 -0
  323. data/node_modules/moment/locale/uz.js +57 -0
  324. data/node_modules/moment/locale/vi.js +78 -0
  325. data/node_modules/moment/locale/x-pseudo.js +67 -0
  326. data/node_modules/moment/locale/yo.js +59 -0
  327. data/node_modules/moment/locale/zh-cn.js +109 -0
  328. data/node_modules/moment/locale/zh-hk.js +102 -0
  329. data/node_modules/moment/locale/zh-tw.js +102 -0
  330. data/node_modules/moment/min/locales.js +10178 -0
  331. data/node_modules/moment/min/locales.min.js +1 -0
  332. data/node_modules/moment/min/moment-with-locales.js +14765 -0
  333. data/node_modules/moment/min/moment-with-locales.min.js +1 -0
  334. data/node_modules/moment/min/moment.min.js +1 -0
  335. data/node_modules/moment/moment.d.ts +736 -0
  336. data/node_modules/moment/moment.js +4602 -0
  337. data/node_modules/moment/package.js +11 -0
  338. data/node_modules/moment/package.json +99 -0
  339. data/node_modules/moment/src/lib/create/check-overflow.js +34 -0
  340. data/node_modules/moment/src/lib/create/date-from-array.js +35 -0
  341. data/node_modules/moment/src/lib/create/from-anything.js +110 -0
  342. data/node_modules/moment/src/lib/create/from-array.js +147 -0
  343. data/node_modules/moment/src/lib/create/from-object.js +16 -0
  344. data/node_modules/moment/src/lib/create/from-string-and-array.js +50 -0
  345. data/node_modules/moment/src/lib/create/from-string-and-format.js +113 -0
  346. data/node_modules/moment/src/lib/create/from-string.js +230 -0
  347. data/node_modules/moment/src/lib/create/local.js +5 -0
  348. data/node_modules/moment/src/lib/create/parsing-flags.js +26 -0
  349. data/node_modules/moment/src/lib/create/utc.js +5 -0
  350. data/node_modules/moment/src/lib/create/valid.js +50 -0
  351. data/node_modules/moment/src/lib/duration/abs.js +18 -0
  352. data/node_modules/moment/src/lib/duration/add-subtract.js +21 -0
  353. data/node_modules/moment/src/lib/duration/as.js +66 -0
  354. data/node_modules/moment/src/lib/duration/bubble.js +61 -0
  355. data/node_modules/moment/src/lib/duration/clone.js +6 -0
  356. data/node_modules/moment/src/lib/duration/constructor.js +44 -0
  357. data/node_modules/moment/src/lib/duration/create.js +122 -0
  358. data/node_modules/moment/src/lib/duration/duration.js +16 -0
  359. data/node_modules/moment/src/lib/duration/get.js +25 -0
  360. data/node_modules/moment/src/lib/duration/humanize.js +85 -0
  361. data/node_modules/moment/src/lib/duration/iso-string.js +64 -0
  362. data/node_modules/moment/src/lib/duration/prototype.js +53 -0
  363. data/node_modules/moment/src/lib/duration/valid.js +36 -0
  364. data/node_modules/moment/src/lib/format/format.js +92 -0
  365. data/node_modules/moment/src/lib/locale/base-config.js +44 -0
  366. data/node_modules/moment/src/lib/locale/calendar.js +15 -0
  367. data/node_modules/moment/src/lib/locale/constructor.js +5 -0
  368. data/node_modules/moment/src/lib/locale/en.js +15 -0
  369. data/node_modules/moment/src/lib/locale/formats.js +23 -0
  370. data/node_modules/moment/src/lib/locale/invalid.js +5 -0
  371. data/node_modules/moment/src/lib/locale/lists.js +93 -0
  372. data/node_modules/moment/src/lib/locale/locale.js +39 -0
  373. data/node_modules/moment/src/lib/locale/locales.js +197 -0
  374. data/node_modules/moment/src/lib/locale/ordinal.js +7 -0
  375. data/node_modules/moment/src/lib/locale/pre-post-format.js +3 -0
  376. data/node_modules/moment/src/lib/locale/prototype.js +69 -0
  377. data/node_modules/moment/src/lib/locale/relative.js +30 -0
  378. data/node_modules/moment/src/lib/locale/set.js +49 -0
  379. data/node_modules/moment/src/lib/moment/add-subtract.js +55 -0
  380. data/node_modules/moment/src/lib/moment/calendar.js +26 -0
  381. data/node_modules/moment/src/lib/moment/clone.js +5 -0
  382. data/node_modules/moment/src/lib/moment/compare.js +63 -0
  383. data/node_modules/moment/src/lib/moment/constructor.js +77 -0
  384. data/node_modules/moment/src/lib/moment/creation-data.js +9 -0
  385. data/node_modules/moment/src/lib/moment/diff.js +58 -0
  386. data/node_modules/moment/src/lib/moment/format.js +62 -0
  387. data/node_modules/moment/src/lib/moment/from.js +17 -0
  388. data/node_modules/moment/src/lib/moment/get-set.js +61 -0
  389. data/node_modules/moment/src/lib/moment/locale.js +34 -0
  390. data/node_modules/moment/src/lib/moment/min-max.js +63 -0
  391. data/node_modules/moment/src/lib/moment/moment.js +28 -0
  392. data/node_modules/moment/src/lib/moment/now.js +3 -0
  393. data/node_modules/moment/src/lib/moment/prototype.js +150 -0
  394. data/node_modules/moment/src/lib/moment/start-end-of.js +128 -0
  395. data/node_modules/moment/src/lib/moment/to-type.js +34 -0
  396. data/node_modules/moment/src/lib/moment/to.js +17 -0
  397. data/node_modules/moment/src/lib/moment/valid.js +15 -0
  398. data/node_modules/moment/src/lib/parse/regex.js +54 -0
  399. data/node_modules/moment/src/lib/parse/token.js +33 -0
  400. data/node_modules/moment/src/lib/units/aliases.js +30 -0
  401. data/node_modules/moment/src/lib/units/constants.js +9 -0
  402. data/node_modules/moment/src/lib/units/day-of-month.js +39 -0
  403. data/node_modules/moment/src/lib/units/day-of-week.js +367 -0
  404. data/node_modules/moment/src/lib/units/day-of-year.js +36 -0
  405. data/node_modules/moment/src/lib/units/hour.js +144 -0
  406. data/node_modules/moment/src/lib/units/millisecond.js +69 -0
  407. data/node_modules/moment/src/lib/units/minute.js +29 -0
  408. data/node_modules/moment/src/lib/units/month.js +290 -0
  409. data/node_modules/moment/src/lib/units/offset.js +235 -0
  410. data/node_modules/moment/src/lib/units/priorities.js +16 -0
  411. data/node_modules/moment/src/lib/units/quarter.js +32 -0
  412. data/node_modules/moment/src/lib/units/second.js +29 -0
  413. data/node_modules/moment/src/lib/units/timestamp.js +20 -0
  414. data/node_modules/moment/src/lib/units/timezone.js +16 -0
  415. data/node_modules/moment/src/lib/units/units.js +20 -0
  416. data/node_modules/moment/src/lib/units/week-calendar-utils.js +65 -0
  417. data/node_modules/moment/src/lib/units/week-year.js +107 -0
  418. data/node_modules/moment/src/lib/units/week.js +67 -0
  419. data/node_modules/moment/src/lib/units/year.js +75 -0
  420. data/node_modules/moment/src/lib/utils/abs-ceil.js +7 -0
  421. data/node_modules/moment/src/lib/utils/abs-floor.js +8 -0
  422. data/node_modules/moment/src/lib/utils/abs-round.js +7 -0
  423. data/node_modules/moment/src/lib/utils/compare-arrays.js +16 -0
  424. data/node_modules/moment/src/lib/utils/defaults.js +10 -0
  425. data/node_modules/moment/src/lib/utils/deprecate.js +55 -0
  426. data/node_modules/moment/src/lib/utils/extend.js +19 -0
  427. data/node_modules/moment/src/lib/utils/has-own-prop.js +3 -0
  428. data/node_modules/moment/src/lib/utils/hooks.js +13 -0
  429. data/node_modules/moment/src/lib/utils/index-of.js +18 -0
  430. data/node_modules/moment/src/lib/utils/is-array.js +3 -0
  431. data/node_modules/moment/src/lib/utils/is-date.js +3 -0
  432. data/node_modules/moment/src/lib/utils/is-function.js +3 -0
  433. data/node_modules/moment/src/lib/utils/is-number.js +3 -0
  434. data/node_modules/moment/src/lib/utils/is-object-empty.js +13 -0
  435. data/node_modules/moment/src/lib/utils/is-object.js +5 -0
  436. data/node_modules/moment/src/lib/utils/is-undefined.js +3 -0
  437. data/node_modules/moment/src/lib/utils/keys.js +19 -0
  438. data/node_modules/moment/src/lib/utils/map.js +7 -0
  439. data/node_modules/moment/src/lib/utils/mod.js +3 -0
  440. data/node_modules/moment/src/lib/utils/some.js +19 -0
  441. data/node_modules/moment/src/lib/utils/to-int.js +12 -0
  442. data/node_modules/moment/src/lib/utils/zero-fill.js +7 -0
  443. data/node_modules/moment/src/locale/af.js +64 -0
  444. data/node_modules/moment/src/locale/ar-dz.js +51 -0
  445. data/node_modules/moment/src/locale/ar-kw.js +50 -0
  446. data/node_modules/moment/src/locale/ar-ly.js +113 -0
  447. data/node_modules/moment/src/locale/ar-ma.js +52 -0
  448. data/node_modules/moment/src/locale/ar-sa.js +96 -0
  449. data/node_modules/moment/src/locale/ar-tn.js +51 -0
  450. data/node_modules/moment/src/locale/ar.js +128 -0
  451. data/node_modules/moment/src/locale/az.js +97 -0
  452. data/node_modules/moment/src/locale/be.js +126 -0
  453. data/node_modules/moment/src/locale/bg.js +82 -0
  454. data/node_modules/moment/src/locale/bm.js +50 -0
  455. data/node_modules/moment/src/locale/bn.js +110 -0
  456. data/node_modules/moment/src/locale/bo.js +111 -0
  457. data/node_modules/moment/src/locale/br.js +100 -0
  458. data/node_modules/moment/src/locale/bs.js +143 -0
  459. data/node_modules/moment/src/locale/ca.js +80 -0
  460. data/node_modules/moment/src/locale/cs.js +164 -0
  461. data/node_modules/moment/src/locale/cv.js +54 -0
  462. data/node_modules/moment/src/locale/cy.js +73 -0
  463. data/node_modules/moment/src/locale/da.js +51 -0
  464. data/node_modules/moment/src/locale/de-at.js +70 -0
  465. data/node_modules/moment/src/locale/de-ch.js +69 -0
  466. data/node_modules/moment/src/locale/de.js +69 -0
  467. data/node_modules/moment/src/locale/dv.js +90 -0
  468. data/node_modules/moment/src/locale/el.js +89 -0
  469. data/node_modules/moment/src/locale/en-SG.js +59 -0
  470. data/node_modules/moment/src/locale/en-au.js +58 -0
  471. data/node_modules/moment/src/locale/en-ca.js +54 -0
  472. data/node_modules/moment/src/locale/en-gb.js +59 -0
  473. data/node_modules/moment/src/locale/en-ie.js +59 -0
  474. data/node_modules/moment/src/locale/en-il.js +54 -0
  475. data/node_modules/moment/src/locale/en-nz.js +58 -0
  476. data/node_modules/moment/src/locale/eo.js +65 -0
  477. data/node_modules/moment/src/locale/es-do.js +83 -0
  478. data/node_modules/moment/src/locale/es-us.js +84 -0
  479. data/node_modules/moment/src/locale/es.js +83 -0
  480. data/node_modules/moment/src/locale/et.js +73 -0
  481. data/node_modules/moment/src/locale/eu.js +58 -0
  482. data/node_modules/moment/src/locale/fa.js +98 -0
  483. data/node_modules/moment/src/locale/fi.js +101 -0
  484. data/node_modules/moment/src/locale/fo.js +53 -0
  485. data/node_modules/moment/src/locale/fr-ca.js +66 -0
  486. data/node_modules/moment/src/locale/fr-ch.js +70 -0
  487. data/node_modules/moment/src/locale/fr.js +75 -0
  488. data/node_modules/moment/src/locale/fy.js +67 -0
  489. data/node_modules/moment/src/locale/ga.js +68 -0
  490. data/node_modules/moment/src/locale/gd.js +68 -0
  491. data/node_modules/moment/src/locale/gl.js +69 -0
  492. data/node_modules/moment/src/locale/gom-latn.js +114 -0
  493. data/node_modules/moment/src/locale/gu.js +115 -0
  494. data/node_modules/moment/src/locale/he.js +91 -0
  495. data/node_modules/moment/src/locale/hi.js +116 -0
  496. data/node_modules/moment/src/locale/hr.js +145 -0
  497. data/node_modules/moment/src/locale/hu.js +103 -0
  498. data/node_modules/moment/src/locale/hy-am.js +87 -0
  499. data/node_modules/moment/src/locale/id.js +74 -0
  500. data/node_modules/moment/src/locale/is.js +124 -0
  501. data/node_modules/moment/src/locale/it-ch.js +61 -0
  502. data/node_modules/moment/src/locale/it.js +62 -0
  503. data/node_modules/moment/src/locale/ja.js +84 -0
  504. data/node_modules/moment/src/locale/jv.js +74 -0
  505. data/node_modules/moment/src/locale/ka.js +81 -0
  506. data/node_modules/moment/src/locale/kk.js +78 -0
  507. data/node_modules/moment/src/locale/km.js +101 -0
  508. data/node_modules/moment/src/locale/kn.js +117 -0
  509. data/node_modules/moment/src/locale/ko.js +74 -0
  510. data/node_modules/moment/src/locale/ku.js +110 -0
  511. data/node_modules/moment/src/locale/ky.js +79 -0
  512. data/node_modules/moment/src/locale/lb.js +129 -0
  513. data/node_modules/moment/src/locale/lo.js +62 -0
  514. data/node_modules/moment/src/locale/lt.js +110 -0
  515. data/node_modules/moment/src/locale/lv.js +90 -0
  516. data/node_modules/moment/src/locale/me.js +103 -0
  517. data/node_modules/moment/src/locale/mi.js +55 -0
  518. data/node_modules/moment/src/locale/mk.js +82 -0
  519. data/node_modules/moment/src/locale/ml.js +73 -0
  520. data/node_modules/moment/src/locale/mn.js +96 -0
  521. data/node_modules/moment/src/locale/mr.js +153 -0
  522. data/node_modules/moment/src/locale/ms-my.js +75 -0
  523. data/node_modules/moment/src/locale/ms.js +74 -0
  524. data/node_modules/moment/src/locale/mt.js +51 -0
  525. data/node_modules/moment/src/locale/my.js +87 -0
  526. data/node_modules/moment/src/locale/nb.js +55 -0
  527. data/node_modules/moment/src/locale/ne.js +115 -0
  528. data/node_modules/moment/src/locale/nl-be.js +80 -0
  529. data/node_modules/moment/src/locale/nl.js +80 -0
  530. data/node_modules/moment/src/locale/nn.js +52 -0
  531. data/node_modules/moment/src/locale/pa-in.js +116 -0
  532. data/node_modules/moment/src/locale/pl.js +117 -0
  533. data/node_modules/moment/src/locale/pt-br.js +53 -0
  534. data/node_modules/moment/src/locale/pt.js +57 -0
  535. data/node_modules/moment/src/locale/ro.js +68 -0
  536. data/node_modules/moment/src/locale/ru.js +175 -0
  537. data/node_modules/moment/src/locale/sd.js +89 -0
  538. data/node_modules/moment/src/locale/se.js +52 -0
  539. data/node_modules/moment/src/locale/si.js +62 -0
  540. data/node_modules/moment/src/locale/sk.js +149 -0
  541. data/node_modules/moment/src/locale/sl.js +164 -0
  542. data/node_modules/moment/src/locale/sq.js +62 -0
  543. data/node_modules/moment/src/locale/sr-cyrl.js +102 -0
  544. data/node_modules/moment/src/locale/sr.js +102 -0
  545. data/node_modules/moment/src/locale/ss.js +81 -0
  546. data/node_modules/moment/src/locale/sv.js +61 -0
  547. data/node_modules/moment/src/locale/sw.js +51 -0
  548. data/node_modules/moment/src/locale/ta.js +121 -0
  549. data/node_modules/moment/src/locale/te.js +80 -0
  550. data/node_modules/moment/src/locale/tet.js +60 -0
  551. data/node_modules/moment/src/locale/tg.js +107 -0
  552. data/node_modules/moment/src/locale/th.js +58 -0
  553. data/node_modules/moment/src/locale/tl-ph.js +54 -0
  554. data/node_modules/moment/src/locale/tlh.js +113 -0
  555. data/node_modules/moment/src/locale/tr.js +90 -0
  556. data/node_modules/moment/src/locale/tzl.js +84 -0
  557. data/node_modules/moment/src/locale/tzm-latn.js +50 -0
  558. data/node_modules/moment/src/locale/tzm.js +50 -0
  559. data/node_modules/moment/src/locale/ug-cn.js +110 -0
  560. data/node_modules/moment/src/locale/uk.js +146 -0
  561. data/node_modules/moment/src/locale/ur.js +90 -0
  562. data/node_modules/moment/src/locale/uz-latn.js +50 -0
  563. data/node_modules/moment/src/locale/uz.js +50 -0
  564. data/node_modules/moment/src/locale/vi.js +71 -0
  565. data/node_modules/moment/src/locale/x-pseudo.js +59 -0
  566. data/node_modules/moment/src/locale/yo.js +51 -0
  567. data/node_modules/moment/src/locale/zh-cn.js +102 -0
  568. data/node_modules/moment/src/locale/zh-hk.js +96 -0
  569. data/node_modules/moment/src/locale/zh-tw.js +95 -0
  570. data/node_modules/moment/src/moment.js +95 -0
  571. data/package.json +2 -0
  572. data/public/packs/js/application-0619dab0850a6efc7438.js +38148 -0
  573. data/public/packs/js/application-0619dab0850a6efc7438.js.map +1 -0
  574. data/public/packs/js/application-20352c48a8043c0951ac.js +38148 -0
  575. data/public/packs/js/application-20352c48a8043c0951ac.js.map +1 -0
  576. data/public/packs/js/application-c5495aaaa9c6e6b908e8.js +38148 -0
  577. data/public/packs/js/application-c5495aaaa9c6e6b908e8.js.map +1 -0
  578. data/public/packs/manifest.json +4 -4
  579. data/random.rb +1 -0
  580. data/test/controllers/address_searches_controller_test.rb +48 -0
  581. data/test/controllers/banal/documents_controller_test.rb +48 -0
  582. data/test/controllers/banal/employees_controller_test.rb +48 -0
  583. data/test/controllers/banal/links_controller_test.rb +48 -0
  584. data/test/controllers/banal/metadata_controller_test.rb +48 -0
  585. data/test/controllers/banal/projects_controller_test.rb +2 -2
  586. data/test/controllers/banal/related_objects_controller_test.rb +48 -0
  587. data/test/controllers/banal_complexes_controller_test.rb +48 -0
  588. data/test/controllers/comments_controller_test.rb +48 -0
  589. data/test/controllers/employees_controller_test.rb +48 -0
  590. data/test/fixtures/address_searches.yml +9 -0
  591. data/test/fixtures/banal/documents.yml +11 -0
  592. data/test/fixtures/banal/employees.yml +29 -0
  593. data/test/fixtures/banal/links.yml +11 -0
  594. data/test/fixtures/banal/metadata.yml +11 -0
  595. data/test/fixtures/banal/projects.yml +16 -0
  596. data/test/fixtures/banal/related_objects.yml +9 -0
  597. data/test/fixtures/banal_complexes.yml +9 -0
  598. data/test/fixtures/comments.yml +11 -0
  599. data/test/fixtures/employees.yml +29 -0
  600. data/test/models/address_search_test.rb +7 -0
  601. data/test/models/banal/document_test.rb +7 -0
  602. data/test/models/banal/employee_test.rb +7 -0
  603. data/test/models/banal/link_test.rb +7 -0
  604. data/test/models/banal/metadatum_test.rb +7 -0
  605. data/test/models/banal/related_object_test.rb +7 -0
  606. data/test/models/banal_complex_test.rb +7 -0
  607. data/test/models/comment_test.rb +7 -0
  608. data/test/models/employee_test.rb +7 -0
  609. data/test/system/address_searches_test.rb +45 -0
  610. data/test/system/banal/documents_test.rb +47 -0
  611. data/test/system/banal/employees_test.rb +65 -0
  612. data/test/system/banal/links_test.rb +47 -0
  613. data/test/system/banal/metadata_test.rb +47 -0
  614. data/test/system/banal/projects_test.rb +16 -0
  615. data/test/system/banal/related_objects_test.rb +45 -0
  616. data/test/system/banal_complexes_test.rb +45 -0
  617. data/test/system/comments_test.rb +47 -0
  618. data/test/system/employees_test.rb +65 -0
  619. data/yarn.lock +38 -0
  620. metadata +587 -8
  621. data/db/migrate/20190912173649_create_banal_projects.rb +0 -9
@@ -0,0 +1,92 @@
1
+ var conversions = require("./conversions");
2
+
3
+ var convert = function() {
4
+ return new Converter();
5
+ }
6
+
7
+ for (var func in conversions) {
8
+ // export Raw versions
9
+ convert[func + "Raw"] = (function(func) {
10
+ // accept array or plain args
11
+ return function(arg) {
12
+ if (typeof arg == "number")
13
+ arg = Array.prototype.slice.call(arguments);
14
+ return conversions[func](arg);
15
+ }
16
+ })(func);
17
+
18
+ var pair = /(\w+)2(\w+)/.exec(func),
19
+ from = pair[1],
20
+ to = pair[2];
21
+
22
+ // export rgb2hsl and ["rgb"]["hsl"]
23
+ convert[from] = convert[from] || {};
24
+
25
+ convert[from][to] = convert[func] = (function(func) {
26
+ return function(arg) {
27
+ if (typeof arg == "number")
28
+ arg = Array.prototype.slice.call(arguments);
29
+
30
+ var val = conversions[func](arg);
31
+ if (typeof val == "string" || val === undefined)
32
+ return val; // keyword
33
+
34
+ for (var i = 0; i < val.length; i++)
35
+ val[i] = Math.round(val[i]);
36
+ return val;
37
+ }
38
+ })(func);
39
+ }
40
+
41
+
42
+ /* Converter does lazy conversion and caching */
43
+ var Converter = function() {
44
+ this.convs = {};
45
+ };
46
+
47
+ /* Either get the values for a space or
48
+ set the values for a space, depending on args */
49
+ Converter.prototype.routeSpace = function(space, args) {
50
+ var values = args[0];
51
+ if (values === undefined) {
52
+ // color.rgb()
53
+ return this.getValues(space);
54
+ }
55
+ // color.rgb(10, 10, 10)
56
+ if (typeof values == "number") {
57
+ values = Array.prototype.slice.call(args);
58
+ }
59
+
60
+ return this.setValues(space, values);
61
+ };
62
+
63
+ /* Set the values for a space, invalidating cache */
64
+ Converter.prototype.setValues = function(space, values) {
65
+ this.space = space;
66
+ this.convs = {};
67
+ this.convs[space] = values;
68
+ return this;
69
+ };
70
+
71
+ /* Get the values for a space. If there's already
72
+ a conversion for the space, fetch it, otherwise
73
+ compute it */
74
+ Converter.prototype.getValues = function(space) {
75
+ var vals = this.convs[space];
76
+ if (!vals) {
77
+ var fspace = this.space,
78
+ from = this.convs[fspace];
79
+ vals = convert[fspace][space](from);
80
+
81
+ this.convs[space] = vals;
82
+ }
83
+ return vals;
84
+ };
85
+
86
+ ["rgb", "hsl", "hsv", "cmyk", "keyword"].forEach(function(space) {
87
+ Converter.prototype[space] = function(vals) {
88
+ return this.routeSpace(space, arguments);
89
+ }
90
+ });
91
+
92
+ module.exports = convert;
@@ -0,0 +1,20 @@
1
+ {
2
+ "name": "color-convert",
3
+ "description": "Plain color conversion functions",
4
+ "version": "0.5.3",
5
+ "author": "Heather Arthur <fayearthur@gmail.com>",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "http://github.com/harthur/color-convert.git"
9
+ },
10
+ "devDependencies": {
11
+ },
12
+ "scripts": {
13
+ "test": "node test/basic.js"
14
+ },
15
+ "keywords": [
16
+ "color",
17
+ "colour",
18
+ "rgb"
19
+ ]
20
+ }
@@ -0,0 +1,187 @@
1
+ var convert = require("../index"),
2
+ assert = require("assert");
3
+
4
+ assert.deepEqual(convert.rgb2hsl([140, 200, 100]), [96, 48, 59]);
5
+ assert.deepEqual(convert.rgb2hsv([140, 200, 100]), [96, 50, 78]);
6
+ assert.deepEqual(convert.rgb2hwb([140, 200, 100]), [96, 39, 22]);
7
+ assert.deepEqual(convert.rgb2cmyk([140, 200, 100]), [30, 0, 50, 22]);
8
+ assert.deepEqual(convert.rgb2cmyk([0,0,0,1]), [0,0,0,100]);
9
+ assert.deepEqual(convert.rgb2keyword([255, 228, 196]), "bisque");
10
+ assert.deepEqual(convert.rgb2xyz([92, 191, 84]), [25, 40, 15]);
11
+ assert.deepEqual(convert.rgb2lab([92, 191, 84]), [70, -50, 45]);
12
+ assert.deepEqual(convert.rgb2lch([92, 191, 84]), [70, 67, 138]);
13
+
14
+ assert.deepEqual(convert.hsl2rgb([96, 48, 59]), [140, 201, 100]);
15
+ assert.deepEqual(convert.hsl2hsv([96, 48, 59]), [96, 50, 79]); // colorpicker says [96,50,79]
16
+ assert.deepEqual(convert.hsl2hwb([96, 48, 59]), [96, 39, 21]); // computer round to 21, should be 22
17
+ assert.deepEqual(convert.hsl2cmyk([96, 48, 59]), [30, 0, 50, 21]);
18
+ assert.deepEqual(convert.hsl2keyword([240, 100, 50]), "blue");
19
+
20
+ assert.deepEqual(convert.hsv2rgb([96, 50, 78]), [139, 199, 99]);
21
+ assert.deepEqual(convert.hsv2hsl([96, 50, 78]), [96, 47, 59]);
22
+ assert.deepEqual(convert.hsv2hsl([0,0,0]), [0,0,0]);
23
+ assert.deepEqual(convert.hsv2hwb([96, 50, 78]), [96, 39, 22]);
24
+ assert.deepEqual(convert.hsv2cmyk([96, 50, 78]), [30, 0, 50, 22]);
25
+ assert.deepEqual(convert.hsv2keyword([240, 100, 100]), "blue");
26
+
27
+ assert.deepEqual(convert.cmyk2rgb([30, 0, 50, 22]), [139, 199, 99]);
28
+ assert.deepEqual(convert.cmyk2hsl([30, 0, 50, 22]), [96, 47, 59]);
29
+ assert.deepEqual(convert.cmyk2hsv([30, 0, 50, 22]), [96, 50, 78]);
30
+ assert.deepEqual(convert.cmyk2hwb([30, 0, 50, 22]), [96, 39, 22]);
31
+ assert.deepEqual(convert.cmyk2keyword([100, 100, 0, 0]), "blue");
32
+
33
+ assert.deepEqual(convert.keyword2rgb("blue"), [0, 0, 255]);
34
+ assert.deepEqual(convert.keyword2hsl("blue"), [240, 100, 50]);
35
+ assert.deepEqual(convert.keyword2hsv("blue"), [240, 100, 100]);
36
+ assert.deepEqual(convert.keyword2hwb("blue"), [240, 0, 0]);
37
+ assert.deepEqual(convert.keyword2cmyk("blue"), [100, 100, 0, 0]);
38
+ assert.deepEqual(convert.keyword2lab("blue"), [32, 79, -108]);
39
+ assert.deepEqual(convert.keyword2xyz("blue"), [18, 7, 95]);
40
+
41
+ assert.deepEqual(convert.xyz2rgb([25, 40, 15]), [97, 190, 85]);
42
+ assert.deepEqual(convert.xyz2rgb([50, 100, 100]), [0, 255, 241]);
43
+ assert.deepEqual(convert.xyz2lab([25, 40, 15]), [69, -48, 44]);
44
+ assert.deepEqual(convert.xyz2lch([25, 40, 15]), [69, 65, 137]);
45
+
46
+ assert.deepEqual(convert.lab2xyz([69, -48, 44]), [25, 39, 15]);
47
+ assert.deepEqual(convert.lab2rgb([75, 20, -30]), [194, 175, 240]);
48
+ assert.deepEqual(convert.lab2lch([69, -48, 44]), [69, 65, 137]);
49
+
50
+ assert.deepEqual(convert.lch2lab([69, 65, 137]), [69, -48, 44]);
51
+ assert.deepEqual(convert.lch2xyz([69, 65, 137]), [25, 39, 15]);
52
+ assert.deepEqual(convert.lch2rgb([69, 65, 137]), [98, 188, 83]);
53
+
54
+ // non-array arguments
55
+ assert.deepEqual(convert.hsl2rgb(96, 48, 59), [140, 201, 100]);
56
+
57
+ // raw functions
58
+ function round(vals) {
59
+ for (var i = 0; i < vals.length; i++)
60
+ vals[i] = vals[i].toFixed(1);
61
+ return vals;
62
+ }
63
+
64
+ assert.deepEqual(round(convert.hsl2rgbRaw([96, 48, 59])), [140.4, 200.6, 100.3]);
65
+ assert.deepEqual(round(convert.rgb2hslRaw([140, 200, 100])), [96, 47.6, 58.8]);
66
+
67
+ assert.deepEqual(round(convert.hsv2rgbRaw([96, 50, 78])), [139.2, 198.9, 99.5]);
68
+ assert.deepEqual(round(convert.rgb2hsvRaw([140, 200, 100])), [96, 50, 78.4]);
69
+
70
+ assert.deepEqual(round(convert.hwb2rgbRaw([96, 39, 22])), [139.2, 198.9, 99.5]);
71
+ assert.deepEqual(round(convert.rgb2hwbRaw([140, 200, 100])), [96, 39.2, 21.6]);
72
+
73
+ assert.deepEqual(round(convert.cmyk2rgbRaw([30, 0, 50, 22])), [139.2, 198.9, 99.5]);
74
+ assert.deepEqual(round(convert.rgb2cmykRaw([140, 200, 100])), [30, 0, 50, 21.6]);
75
+
76
+ assert.deepEqual(round(convert.keyword2rgbRaw("blue")), [0, 0, 255]);
77
+ assert.deepEqual(convert.rgb2keywordRaw([255, 228, 196]), "bisque");
78
+
79
+ assert.deepEqual(round(convert.hsv2hslRaw([96, 50, 78])), [96, 47, 58.5]);
80
+ assert.deepEqual(round(convert.hsl2hsvRaw([96, 48, 59])), [96, 50, 78.7]);
81
+
82
+ assert.deepEqual(round(convert.hsl2hsvRaw([96, 48, 59])), [96, 50, 78.7]);
83
+
84
+ assert.deepEqual(round(convert.xyz2rgbRaw([25, 40, 15])), [97.4, 189.9, 85]);
85
+ assert.deepEqual(round(convert.rgb2xyzRaw([92, 191, 84])), [24.6, 40.2, 14.8]);
86
+
87
+ assert.deepEqual(round(convert.rgb2labRaw([92, 191, 84])), [69.6, -50.1, 44.6]);
88
+
89
+ // hashed
90
+ var val = [140, 200, 100];
91
+ assert.deepEqual(convert["rgb"]["hsl"](val), convert.rgb2hsl(val));
92
+ assert.deepEqual(convert["rgb"]["hsv"](val), convert.rgb2hsv(val));
93
+ assert.deepEqual(convert["rgb"]["hwb"](val), convert.rgb2hwb(val));
94
+ assert.deepEqual(convert["rgb"]["cmyk"](val), convert.rgb2cmyk(val));
95
+ assert.deepEqual(convert["rgb"]["xyz"](val), convert.rgb2xyz(val));
96
+ assert.deepEqual(convert["rgb"]["lab"](val), convert.rgb2lab(val));
97
+ assert.deepEqual(convert["rgb"]["keyword"]([255, 228, 196]), "bisque");
98
+
99
+ val = [96, 48, 59];
100
+ assert.deepEqual(convert["hsl"]["rgb"](val), convert.hsl2rgb(val));
101
+ assert.deepEqual(convert["hsl"]["hsv"](val), convert.hsl2hsv(val));
102
+ assert.deepEqual(convert["hsl"]["hwb"](val), convert.hsl2hwb(val));
103
+ assert.deepEqual(convert["hsl"]["cmyk"](val), convert.hsl2cmyk(val));
104
+ assert.deepEqual(convert["hsl"]["keyword"](val), convert.hsl2keyword(val ));
105
+
106
+ val = [96, 50, 78];
107
+ assert.deepEqual(convert["hsv"]["rgb"](val), convert.hsv2rgb(val));
108
+ assert.deepEqual(convert["hsv"]["hsl"](val), convert.hsv2hsl(val));
109
+ assert.deepEqual(convert["hsv"]["hwb"](val), convert.hsv2hwb(val));
110
+ assert.deepEqual(convert["hsv"]["cmyk"](val), convert.hsv2cmyk(val));
111
+ assert.deepEqual(convert["hsv"]["keyword"](val), convert.hsv2keyword(val));
112
+
113
+ val = [30, 0, 50, 22];
114
+ assert.deepEqual(convert["cmyk"]["rgb"](val), convert.cmyk2rgb(val));
115
+ assert.deepEqual(convert["cmyk"]["hsl"](val), convert.cmyk2hsl(val));
116
+ assert.deepEqual(convert["cmyk"]["hsv"](val), convert.cmyk2hsv(val));
117
+ assert.deepEqual(convert["cmyk"]["hwb"](val), convert.cmyk2hwb(val));
118
+ assert.deepEqual(convert["cmyk"]["keyword"](val), convert.cmyk2keyword(val));
119
+
120
+ val = "blue";
121
+ assert.deepEqual(convert["keyword"]["rgb"](val), convert.keyword2rgb(val));
122
+ assert.deepEqual(convert["keyword"]["hsl"](val), convert.keyword2hsl(val));
123
+ assert.deepEqual(convert["keyword"]["hsv"](val), convert.keyword2hsv(val));
124
+ assert.deepEqual(convert["keyword"]["hwb"](val), convert.keyword2hwb(val));
125
+ assert.deepEqual(convert["keyword"]["cmyk"](val), convert.keyword2cmyk(val));
126
+ assert.deepEqual(convert["keyword"]["lab"](val), convert.keyword2lab(val));
127
+ assert.deepEqual(convert["keyword"]["xyz"](val), convert.keyword2xyz(val));
128
+
129
+ val = [25, 40, 15]
130
+ assert.deepEqual(convert["xyz"]["rgb"](val), convert.xyz2rgb(val));
131
+ assert.deepEqual(convert["xyz"]["lab"](val), convert.xyz2lab(val));
132
+
133
+ val = [69, -48, 44];
134
+ assert.deepEqual(convert["lab"]["xyz"](val), [25, 39, 15]);
135
+
136
+
137
+ // converter
138
+ var converter = convert();
139
+
140
+ var vals = [140, 200, 100];
141
+ converter.rgb(140, 200, 100);
142
+
143
+ assert.deepEqual(converter.hsl(), convert.rgb2hsl(vals));
144
+ assert.deepEqual(converter.hsv(), convert.rgb2hsv(vals));
145
+ assert.deepEqual(converter.cmyk(), convert.rgb2cmyk(vals));
146
+ assert.deepEqual(converter.rgb(), vals);
147
+ assert.deepEqual(converter.rgb([255, 228, 196]).keyword(), "bisque");
148
+
149
+ vals = [96, 48, 59];
150
+ converter.hsl(vals);
151
+ assert.deepEqual(converter.rgb(), convert.hsl2rgb(vals));
152
+ assert.deepEqual(converter.hsv(), convert.hsl2hsv(vals));
153
+ assert.deepEqual(converter.cmyk(), convert.hsl2cmyk(vals));
154
+ assert.deepEqual(converter.keyword(), convert.hsl2keyword(vals));
155
+
156
+ // hwb
157
+ // http://dev.w3.org/csswg/css-color/#hwb-examples
158
+
159
+ // all extrem value should give black, white or grey
160
+ for(var angle = 0; angle <= 360; angle ++) {
161
+ assert.deepEqual(convert.hwb2rgb([angle, 0, 100]), [0, 0, 0]);
162
+ assert.deepEqual(convert.hwb2rgb([angle, 100, 0]), [255, 255, 255]);
163
+ assert.deepEqual(convert.hwb2rgb([angle, 100, 100]), [128, 128, 128]);
164
+ }
165
+
166
+ assert.deepEqual(convert.hwb2rgb([0, 0, 0]), [255,0,0]);
167
+ assert.deepEqual(convert.hwb2rgb([0, 20, 40]), [153, 51, 51]);
168
+ assert.deepEqual(convert.hwb2rgb([0, 40, 40]), [153, 102, 102]);
169
+ assert.deepEqual(convert.hwb2rgb([0, 40, 20]), [204, 102, 102]);
170
+
171
+ assert.deepEqual(convert.hwb2rgb([120, 0, 0]), [0,255,0]);
172
+ assert.deepEqual(convert.hwb2rgb([120, 20, 40]), [51, 153, 51]);
173
+ assert.deepEqual(convert.hwb2rgb([120, 40, 40]), [102, 153, 102]);
174
+ assert.deepEqual(convert.hwb2rgb([120, 40, 20]), [102, 204, 102]);
175
+
176
+ assert.deepEqual(convert.hwb2rgb([240, 0, 0]), [0,0,255]);
177
+ assert.deepEqual(convert.hwb2rgb([240, 20, 40]), [51, 51, 153]);
178
+ assert.deepEqual(convert.hwb2rgb([240, 40, 40]), [102, 102, 153]);
179
+ assert.deepEqual(convert.hwb2rgb([240, 40, 20]), [102, 102, 204]);
180
+
181
+
182
+ // black should always stay black
183
+ val = [0, 0, 0];
184
+ assert.deepEqual(convert.hsl2hsv(val), val);
185
+ assert.deepEqual(convert.hsl2rgb(val), val);
186
+ assert.deepEqual(convert.hsl2hwb(val), [0, 0, 100]);
187
+ assert.deepEqual(convert.hsl2cmyk(val), [0, 0, 0, 100]);
@@ -0,0 +1,23 @@
1
+ var convert = require("../index");
2
+
3
+ var converter = convert();
4
+
5
+ var times = 10000;
6
+
7
+ console.time("cached");
8
+ converter.rgb(10, 2, 30);
9
+ for(var i = 0; i < times; i++) {
10
+ converter.hsv();
11
+ converter.hsl();
12
+ converter.cmyk();
13
+ }
14
+ console.timeEnd("cached");
15
+
16
+ console.time("uncached");
17
+ for(var i = 0; i < times; i++) {
18
+ convert.rgb2hsl(10, 2, 30);
19
+ convert.rgb2hsv(10, 2, 30);
20
+ convert.rgb2cmyk(10, 2, 30);
21
+ }
22
+ console.timeEnd("uncached");
23
+
@@ -0,0 +1,49 @@
1
+ {
2
+ "name": "chartjs-color",
3
+ "version": "2.3.0",
4
+ "description": "Color conversion and manipulation with CSS string support",
5
+ "keywords": [
6
+ "color",
7
+ "colour",
8
+ "css"
9
+ ],
10
+ "authors": [
11
+ "Heather Arthur <fayearthur@gmail.com>",
12
+ "Maxime Thirouin",
13
+ "Josh Junon"
14
+ ],
15
+ "license": "MIT",
16
+ "repository": "chartjs/chartjs-color",
17
+ "xo": {
18
+ "envs": ["browser", "node"],
19
+ "rules": {
20
+ "one-var": [2, { "initialized": "never" }],
21
+ "linebreak-style": 0,
22
+ "no-cond-assign": 0,
23
+ "new-cap": 0
24
+ }
25
+ },
26
+ "files": [
27
+ "CHANGELOG.md",
28
+ "LICENSE",
29
+ "index.js"
30
+ ],
31
+ "scripts": {
32
+ "pretest": "xo",
33
+ "test": "mocha"
34
+ },
35
+ "dependencies": {
36
+ "color-convert": "^0.5.3",
37
+ "chartjs-color-string": "^0.6.0"
38
+ },
39
+ "devDependencies": {
40
+ "browserify": "^10.1.3",
41
+ "gulp": "^3.8.11",
42
+ "gulp-rename": "^1.2.2",
43
+ "gulp-uglify": "^1.2.0",
44
+ "gulp-streamify": "^1.0.2",
45
+ "mocha": "^2.2.5",
46
+ "vinyl-source-stream": "^1.1.0",
47
+ "xo": "^0.12.1"
48
+ }
49
+ }
@@ -0,0 +1,11 @@
1
+ # 0.3.0
2
+
3
+ - Fixed: HSL alpha channel ([#16](https://github.com/harthur/color-string/pull/16))
4
+ - Fixed: ability to parse signed number ([#15](https://github.com/harthur/color-string/pull/15))
5
+ - Removed: component.json
6
+ - Removed: browser build
7
+ - Added: license field to package.json ([#17](https://github.com/harthur/color-string/pull/17))
8
+
9
+ ---
10
+
11
+ Check out commit logs for earlier releases
@@ -0,0 +1,21 @@
1
+ Copyright (c) 2011 Heather Arthur <fayearthur@gmail.com>
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21
+
@@ -0,0 +1,46 @@
1
+ # chartjs-color-string
2
+
3
+ [![npm](https://img.shields.io/npm/v/chartjs-color-string.svg?style=flat-square&maxAge=600)](https://npmjs.com/package/chartjs-color-string) [![Travis](https://img.shields.io/travis/chartjs/chartjs-color-string.svg?style=flat-square&maxAge=600)](https://travis-ci.org/chartjs/chartjs-color-string)
4
+
5
+ > library for parsing and generating CSS color strings.
6
+
7
+ ## Install
8
+
9
+ With [npm](http://npmjs.org/):
10
+
11
+ ```console
12
+ $ npm install color-string
13
+ ```
14
+
15
+ ## Usage
16
+
17
+ ### Parsing
18
+
19
+ ```js
20
+ colorString.getRgb("blue") // [0, 0, 255]
21
+ colorString.getRgb("#FFF") // [255, 255, 255]
22
+ colorString.getRgba("#FFFA") //[255, 255, 255, 0.67]}
23
+ colorString.getRgba("#FFFFFFAA") // [255, 255, 255, 0.67]}
24
+
25
+ colorString.getRgba("rgba(200, 60, 60, 0.3)") // [200, 60, 60, 0.3]
26
+ colorString.getRgba("rgb(200, 200, 200)") // [200, 200, 200, 1]
27
+
28
+ colorString.getHsl("hsl(360, 100%, 50%)") // [360, 100, 50]
29
+ colorString.getHsla("hsla(360, 60%, 50%, 0.4)") // [360, 60, 50, 0.4]
30
+
31
+ colorString.getAlpha("rgba(200, 0, 12, 0.6)") // 0.6
32
+ ```
33
+
34
+ ### Generation
35
+
36
+ ```js
37
+ colorString.hexString([255, 255, 255]) // "#FFFFFF"
38
+ colorString.hexString([0, 0, 255, 0.4]) // "#0000FF66"
39
+ colorString.hexString([0, 0, 255], 0.4) // "#0000FF66"
40
+ colorString.rgbString([255, 255, 255]) // "rgb(255, 255, 255)"
41
+ colorString.rgbString([0, 0, 255, 0.4]) // "rgba(0, 0, 255, 0.4)"
42
+ colorString.rgbString([0, 0, 255], 0.4) // "rgba(0, 0, 255, 0.4)"
43
+ colorString.percentString([0, 0, 255]) // "rgb(0%, 0%, 100%)"
44
+ colorString.keyword([255, 255, 0]) // "yellow"
45
+ colorString.hslString([360, 100, 100]) // "hsl(360, 100%, 100%)"
46
+ ```
@@ -0,0 +1,237 @@
1
+ /* MIT license */
2
+ var colorNames = require('color-name');
3
+
4
+ module.exports = {
5
+ getRgba: getRgba,
6
+ getHsla: getHsla,
7
+ getRgb: getRgb,
8
+ getHsl: getHsl,
9
+ getHwb: getHwb,
10
+ getAlpha: getAlpha,
11
+
12
+ hexString: hexString,
13
+ rgbString: rgbString,
14
+ rgbaString: rgbaString,
15
+ percentString: percentString,
16
+ percentaString: percentaString,
17
+ hslString: hslString,
18
+ hslaString: hslaString,
19
+ hwbString: hwbString,
20
+ keyword: keyword
21
+ }
22
+
23
+ function getRgba(string) {
24
+ if (!string) {
25
+ return;
26
+ }
27
+ var abbr = /^#([a-fA-F0-9]{3,4})$/i,
28
+ hex = /^#([a-fA-F0-9]{6}([a-fA-F0-9]{2})?)$/i,
29
+ rgba = /^rgba?\(\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*,\s*([+-]?\d+)\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
30
+ per = /^rgba?\(\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*,\s*([+-]?[\d\.]+)\%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)$/i,
31
+ keyword = /(\w+)/;
32
+
33
+ var rgb = [0, 0, 0],
34
+ a = 1,
35
+ match = string.match(abbr),
36
+ hexAlpha = "";
37
+ if (match) {
38
+ match = match[1];
39
+ hexAlpha = match[3];
40
+ for (var i = 0; i < rgb.length; i++) {
41
+ rgb[i] = parseInt(match[i] + match[i], 16);
42
+ }
43
+ if (hexAlpha) {
44
+ a = Math.round((parseInt(hexAlpha + hexAlpha, 16) / 255) * 100) / 100;
45
+ }
46
+ }
47
+ else if (match = string.match(hex)) {
48
+ hexAlpha = match[2];
49
+ match = match[1];
50
+ for (var i = 0; i < rgb.length; i++) {
51
+ rgb[i] = parseInt(match.slice(i * 2, i * 2 + 2), 16);
52
+ }
53
+ if (hexAlpha) {
54
+ a = Math.round((parseInt(hexAlpha, 16) / 255) * 100) / 100;
55
+ }
56
+ }
57
+ else if (match = string.match(rgba)) {
58
+ for (var i = 0; i < rgb.length; i++) {
59
+ rgb[i] = parseInt(match[i + 1]);
60
+ }
61
+ a = parseFloat(match[4]);
62
+ }
63
+ else if (match = string.match(per)) {
64
+ for (var i = 0; i < rgb.length; i++) {
65
+ rgb[i] = Math.round(parseFloat(match[i + 1]) * 2.55);
66
+ }
67
+ a = parseFloat(match[4]);
68
+ }
69
+ else if (match = string.match(keyword)) {
70
+ if (match[1] == "transparent") {
71
+ return [0, 0, 0, 0];
72
+ }
73
+ rgb = colorNames[match[1]];
74
+ if (!rgb) {
75
+ return;
76
+ }
77
+ }
78
+
79
+ for (var i = 0; i < rgb.length; i++) {
80
+ rgb[i] = scale(rgb[i], 0, 255);
81
+ }
82
+ if (!a && a != 0) {
83
+ a = 1;
84
+ }
85
+ else {
86
+ a = scale(a, 0, 1);
87
+ }
88
+ rgb[3] = a;
89
+ return rgb;
90
+ }
91
+
92
+ function getHsla(string) {
93
+ if (!string) {
94
+ return;
95
+ }
96
+ var hsl = /^hsla?\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
97
+ var match = string.match(hsl);
98
+ if (match) {
99
+ var alpha = parseFloat(match[4]);
100
+ var h = scale(parseInt(match[1]), 0, 360),
101
+ s = scale(parseFloat(match[2]), 0, 100),
102
+ l = scale(parseFloat(match[3]), 0, 100),
103
+ a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
104
+ return [h, s, l, a];
105
+ }
106
+ }
107
+
108
+ function getHwb(string) {
109
+ if (!string) {
110
+ return;
111
+ }
112
+ var hwb = /^hwb\(\s*([+-]?\d+)(?:deg)?\s*,\s*([+-]?[\d\.]+)%\s*,\s*([+-]?[\d\.]+)%\s*(?:,\s*([+-]?[\d\.]+)\s*)?\)/;
113
+ var match = string.match(hwb);
114
+ if (match) {
115
+ var alpha = parseFloat(match[4]);
116
+ var h = scale(parseInt(match[1]), 0, 360),
117
+ w = scale(parseFloat(match[2]), 0, 100),
118
+ b = scale(parseFloat(match[3]), 0, 100),
119
+ a = scale(isNaN(alpha) ? 1 : alpha, 0, 1);
120
+ return [h, w, b, a];
121
+ }
122
+ }
123
+
124
+ function getRgb(string) {
125
+ var rgba = getRgba(string);
126
+ return rgba && rgba.slice(0, 3);
127
+ }
128
+
129
+ function getHsl(string) {
130
+ var hsla = getHsla(string);
131
+ return hsla && hsla.slice(0, 3);
132
+ }
133
+
134
+ function getAlpha(string) {
135
+ var vals = getRgba(string);
136
+ if (vals) {
137
+ return vals[3];
138
+ }
139
+ else if (vals = getHsla(string)) {
140
+ return vals[3];
141
+ }
142
+ else if (vals = getHwb(string)) {
143
+ return vals[3];
144
+ }
145
+ }
146
+
147
+ // generators
148
+ function hexString(rgba, a) {
149
+ var a = (a !== undefined && rgba.length === 3) ? a : rgba[3];
150
+ return "#" + hexDouble(rgba[0])
151
+ + hexDouble(rgba[1])
152
+ + hexDouble(rgba[2])
153
+ + (
154
+ (a >= 0 && a < 1)
155
+ ? hexDouble(Math.round(a * 255))
156
+ : ""
157
+ );
158
+ }
159
+
160
+ function rgbString(rgba, alpha) {
161
+ if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
162
+ return rgbaString(rgba, alpha);
163
+ }
164
+ return "rgb(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2] + ")";
165
+ }
166
+
167
+ function rgbaString(rgba, alpha) {
168
+ if (alpha === undefined) {
169
+ alpha = (rgba[3] !== undefined ? rgba[3] : 1);
170
+ }
171
+ return "rgba(" + rgba[0] + ", " + rgba[1] + ", " + rgba[2]
172
+ + ", " + alpha + ")";
173
+ }
174
+
175
+ function percentString(rgba, alpha) {
176
+ if (alpha < 1 || (rgba[3] && rgba[3] < 1)) {
177
+ return percentaString(rgba, alpha);
178
+ }
179
+ var r = Math.round(rgba[0]/255 * 100),
180
+ g = Math.round(rgba[1]/255 * 100),
181
+ b = Math.round(rgba[2]/255 * 100);
182
+
183
+ return "rgb(" + r + "%, " + g + "%, " + b + "%)";
184
+ }
185
+
186
+ function percentaString(rgba, alpha) {
187
+ var r = Math.round(rgba[0]/255 * 100),
188
+ g = Math.round(rgba[1]/255 * 100),
189
+ b = Math.round(rgba[2]/255 * 100);
190
+ return "rgba(" + r + "%, " + g + "%, " + b + "%, " + (alpha || rgba[3] || 1) + ")";
191
+ }
192
+
193
+ function hslString(hsla, alpha) {
194
+ if (alpha < 1 || (hsla[3] && hsla[3] < 1)) {
195
+ return hslaString(hsla, alpha);
196
+ }
197
+ return "hsl(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%)";
198
+ }
199
+
200
+ function hslaString(hsla, alpha) {
201
+ if (alpha === undefined) {
202
+ alpha = (hsla[3] !== undefined ? hsla[3] : 1);
203
+ }
204
+ return "hsla(" + hsla[0] + ", " + hsla[1] + "%, " + hsla[2] + "%, "
205
+ + alpha + ")";
206
+ }
207
+
208
+ // hwb is a bit different than rgb(a) & hsl(a) since there is no alpha specific syntax
209
+ // (hwb have alpha optional & 1 is default value)
210
+ function hwbString(hwb, alpha) {
211
+ if (alpha === undefined) {
212
+ alpha = (hwb[3] !== undefined ? hwb[3] : 1);
213
+ }
214
+ return "hwb(" + hwb[0] + ", " + hwb[1] + "%, " + hwb[2] + "%"
215
+ + (alpha !== undefined && alpha !== 1 ? ", " + alpha : "") + ")";
216
+ }
217
+
218
+ function keyword(rgb) {
219
+ return reverseNames[rgb.slice(0, 3)];
220
+ }
221
+
222
+ // helpers
223
+ function scale(num, min, max) {
224
+ return Math.min(Math.max(min, num), max);
225
+ }
226
+
227
+ function hexDouble(num) {
228
+ var str = num.toString(16).toUpperCase();
229
+ return (str.length < 2) ? "0" + str : str;
230
+ }
231
+
232
+
233
+ //create a list of reverse color names
234
+ var reverseNames = {};
235
+ for (var name in colorNames) {
236
+ reverseNames[colorNames[name]] = name;
237
+ }