/web/index.js

https://github.com/ukupat/tabs-or-spaces · JavaScript · 341 lines · 326 code · 15 blank · 0 comment · 6 complexity · 5aafee1a2ca96c8a875b61eba23186aa MD5 · raw file

  1. (function () {
  2. var db = {
  3. 'AutoHotkey': {
  4. 'space-2': 17,
  5. 'space-3': 2,
  6. 'space-4': 23,
  7. 'tab-1': 68
  8. },
  9. 'AutoIt': {
  10. 'space-2': 8,
  11. 'space-3': 35,
  12. 'space-4': 20,
  13. 'space-8': 1,
  14. 'tab-1': 253
  15. },
  16. 'C': {
  17. 'space-2': 97,
  18. 'space-3': 16,
  19. 'space-4': 131,
  20. 'space-8': 8,
  21. 'tab-1': 119
  22. },
  23. 'C++': {
  24. 'space-2': 96,
  25. 'space-3': 4,
  26. 'space-4': 97,
  27. 'tab-1': 51
  28. },
  29. 'Game Maker Language': {
  30. 'space-2': 16,
  31. 'space-4': 8,
  32. 'tab-1': 6
  33. },
  34. 'Objective-C': {
  35. 'space-2': 45,
  36. 'space-4': 340,
  37. 'tab-1': 55
  38. },
  39. 'Pascal': {
  40. 'space-2': 435,
  41. 'space-3': 6,
  42. 'space-4': 7,
  43. 'tab-1': 5
  44. },
  45. 'VimL': {
  46. 'space-2': 315,
  47. 'space-3': 3,
  48. 'space-4': 120,
  49. 'tab-1': 43
  50. },
  51. 'clojure': {
  52. 'space-2': 425,
  53. 'space-4': 2
  54. },
  55. 'coffeescript': {
  56. 'space-2': 259,
  57. 'space-4': 40,
  58. 'tab-1': 26
  59. },
  60. 'common-lisp': {
  61. 'space-2': 300,
  62. 'space-3': 1,
  63. 'space-4': 3,
  64. 'tab-1': 7
  65. },
  66. 'csharp': {
  67. 'space-2': 7,
  68. 'space-4': 231,
  69. 'space-8': 1,
  70. 'tab-1': 52
  71. },
  72. 'css': {
  73. 'space-2': 256,
  74. 'space-4': 30,
  75. 'tab-1': 71
  76. },
  77. 'd': {
  78. 'space-2': 14,
  79. 'space-4': 130,
  80. 'tab-1': 92
  81. },
  82. 'elixir': {
  83. 'space-2': 403,
  84. 'space-4': 6,
  85. 'tab-1': 7
  86. },
  87. 'erlang': {
  88. 'space-2': 57,
  89. 'space-4': 307,
  90. 'tab-1': 30
  91. },
  92. 'fsharp': {
  93. 'space-2': 25,
  94. 'space-3': 1,
  95. 'space-4': 148
  96. },
  97. 'go': {
  98. 'space-2': 2,
  99. 'space-4': 2,
  100. 'tab-1': 234
  101. },
  102. 'groovy': {
  103. 'space-2': 19,
  104. 'space-4': 82,
  105. 'tab-1': 9
  106. },
  107. 'haskell': {
  108. 'space-2': 190,
  109. 'space-4': 113,
  110. 'tab-1': 5
  111. },
  112. 'haxe': {
  113. 'space-2': 19,
  114. 'space-3': 2,
  115. 'space-4': 65,
  116. 'tab-1': 224
  117. },
  118. 'html': {
  119. 'space-2': 90,
  120. 'space-3': 4,
  121. 'space-4': 29,
  122. 'tab-1': 37
  123. },
  124. 'java': {
  125. 'space-2': 68,
  126. 'space-4': 191,
  127. 'tab-1': 34
  128. },
  129. 'javascript': {
  130. 'space-2': 190,
  131. 'space-4': 85,
  132. 'tab-1': 42
  133. },
  134. 'julia': {
  135. 'space-2': 73,
  136. 'space-3': 2,
  137. 'space-4': 379,
  138. 'tab-1': 34
  139. },
  140. 'lua': {
  141. 'space-2': 128,
  142. 'space-3': 58,
  143. 'space-4': 145,
  144. 'tab-1': 149
  145. },
  146. 'nimrod': {
  147. 'space-2': 220,
  148. 'space-3': 2,
  149. 'space-4': 73
  150. },
  151. 'ocaml': {
  152. 'space-2': 449,
  153. 'space-3': 1,
  154. 'space-4': 21,
  155. 'tab-1': 6
  156. },
  157. 'perl': {
  158. 'space-2': 44,
  159. 'space-3': 6,
  160. 'space-4': 158,
  161. 'space-8': 2,
  162. 'tab-1': 62
  163. },
  164. 'php': {
  165. 'space-2': 25,
  166. 'space-4': 266,
  167. 'tab-1': 117
  168. },
  169. 'puppet': {
  170. 'space-2': 285,
  171. 'space-4': 40,
  172. 'tab-1': 20
  173. },
  174. 'python': {
  175. 'space-2': 12,
  176. 'space-4': 215,
  177. 'tab-1': 7
  178. },
  179. 'r': {
  180. 'space-2': 353,
  181. 'space-3': 5,
  182. 'space-4': 75,
  183. 'space-8': 3,
  184. 'tab-1': 29
  185. },
  186. 'ruby': {
  187. 'space-2': 489
  188. },
  189. 'rust': {
  190. 'space-2': 20,
  191. 'space-3': 2,
  192. 'space-4': 323,
  193. 'tab-1': 10
  194. },
  195. 'scala': {
  196. 'space-2': 217,
  197. 'space-4': 3
  198. },
  199. 'shell': {
  200. 'space-2': 139,
  201. 'space-3': 1,
  202. 'space-4': 83,
  203. 'space-8': 2,
  204. 'tab-1': 63
  205. },
  206. 'sql': {
  207. 'space-2': 97,
  208. 'space-4': 28,
  209. 'tab-1': 81
  210. },
  211. 'swift': {
  212. 'space-2': 10,
  213. 'space-4': 73,
  214. 'tab-1': 5
  215. },
  216. 'typescript': {
  217. 'space-2': 107,
  218. 'space-3': 2,
  219. 'space-4': 134,
  220. 'tab-1': 49
  221. },
  222. 'vala': {
  223. 'space-2': 56,
  224. 'space-3': 3,
  225. 'space-4': 195,
  226. 'space-8': 6,
  227. 'tab-1': 212
  228. },
  229. 'verilog': {
  230. 'space-2': 109,
  231. 'space-3': 41,
  232. 'space-4': 76,
  233. 'space-8': 1,
  234. 'tab-1': 181
  235. },
  236. 'xml': {
  237. 'space-2': 136,
  238. 'space-3': 3,
  239. 'space-4': 68,
  240. 'tab-1': 56
  241. },
  242. 'tex': {
  243. 'tab-1': 54,
  244. 'space-2': 269,
  245. 'space-3': 5,
  246. 'space-4': 57,
  247. 'space-8': 1,
  248. },
  249. 'Crystal': {
  250. 'space-2': 119,
  251. 'space-4': 1,
  252. },
  253. 'sas': {
  254. 'tab-1': 24,
  255. 'space-2': 7,
  256. 'space-3': 6,
  257. 'space-4': 6,
  258. },
  259. 'PowerShell': {
  260. 'tab-1': 69,
  261. 'space-2': 35,
  262. 'space-3': 4,
  263. 'space-4': 325
  264. }
  265. };
  266. var colors = {
  267. 'tab-1': '#a27eae',
  268. 'space-2': '#19ac70',
  269. 'space-3': '#08784a',
  270. 'space-4': '#6b9f97',
  271. 'space-8': '#96d3ca'
  272. };
  273. var labels = {
  274. 'tab-1': 'Tabs',
  275. 'space-2': '2 Spaces',
  276. 'space-3': '3 Spaces',
  277. 'space-4': '4 Spaces',
  278. 'space-8': '8 Spaces'
  279. };
  280. var languages = constructLanguagesFrom(db);
  281. new Vue({
  282. el: '#charts',
  283. data: {
  284. languages: languages.sort()
  285. }
  286. });
  287. initCharts(db, languages);
  288. function constructLanguagesFrom(db) {
  289. var languages = [];
  290. for (var key in db)
  291. if (db.hasOwnProperty(key))
  292. languages.push({
  293. name: key,
  294. analysedReposAmount: _.sum(_.values(db[key]))
  295. });
  296. return languages;
  297. }
  298. function initCharts(db, languages) {
  299. for (var id in languages)
  300. initChart(languages[id].name, db[languages[id].name]);
  301. }
  302. function initChart(language, stats) {
  303. var amount = _.sum(_.values(stats));
  304. var data = [];
  305. for (var style in stats)
  306. if (stats.hasOwnProperty(style))
  307. data.push({
  308. value: calculatePercentage(amount, stats[style]),
  309. color: colors[style],
  310. label: labels[style]
  311. });
  312. var ctx = document.getElementById(language + 'Chart').getContext('2d');
  313. new Chart(ctx).Pie(data, options());
  314. }
  315. function options() {
  316. var options = {
  317. tooltipTemplate: '<%= value %>% repos use <%if (label){%><%=label%> <%}%>'
  318. };
  319. if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent))
  320. options.animation = false;
  321. return options;
  322. }
  323. function calculatePercentage(amount, stat) {
  324. return Math.round(stat * 100 / amount * 100) / 100;
  325. }
  326. })();