Browse files

redesigned landing page, header, and footer

  • Loading branch information...
1 parent 0fd37f1 commit 5a3cf61d349f2186d1ed56fc75805d8198ea7e9f @btford committed Feb 20, 2013
Showing with 869 additions and 5,589 deletions.
  1. +6 −13 Makefile
  2. +8 −8 jade/index.jade
  3. +9 −12 jade/templates/main.jade
  4. +534 −0 sass/_font-awesome.scss
  5. +28 −2 sass/style.scss
  6. BIN static/files/datamining/datamining.zip
  7. +0 −271 static/files/datamining/genjson.py
  8. +0 −30 static/files/datamining/index.html
  9. +0 −2,166 static/files/datamining/js/data.js
  10. +0 −35 static/files/datamining/js/lib/excanvas.min.js
  11. +0 −27 static/files/datamining/js/lib/jit-2.0.0b.min.js
  12. +0 −165 static/files/datamining/js/main.js
  13. +0 −20 static/files/eatyourveggies/MIT-LICENSE.txt
  14. +0 −581 static/files/eatyourveggies/js/data/config.js
  15. +0 −85 static/files/eatyourveggies/js/data/lvl/01.js
  16. +0 −104 static/files/eatyourveggies/js/data/lvl/02.js
  17. +0 −100 static/files/eatyourveggies/js/data/lvl/03.js
  18. +0 −101 static/files/eatyourveggies/js/data/lvl/04.js
  19. +0 −122 static/files/eatyourveggies/js/data/lvl/05.js
  20. +0 −114 static/files/eatyourveggies/js/data/lvl/06.js
  21. +0 −92 static/files/eatyourveggies/js/data/lvl/07.js
  22. +0 −106 static/files/eatyourveggies/js/data/lvl/08.js
  23. +0 −112 static/files/eatyourveggies/js/data/lvl/09.js
  24. +0 −100 static/files/eatyourveggies/js/data/lvl/10.js
  25. +0 −72 static/files/eatyourveggies/js/data/lvl/template.js
  26. +0 −23 static/files/eatyourveggies/js/data/menu/gameover.js
  27. +0 −20 static/files/eatyourveggies/js/data/menu/instructionspage.js
  28. +0 −52 static/files/eatyourveggies/js/data/menu/main.js
  29. +0 −32 static/files/eatyourveggies/js/data/menu/victory.js
  30. +0 −28 static/files/eatyourveggies/js/fr/collision.js
  31. +0 −67 static/files/eatyourveggies/js/fr/controller.js
  32. +0 −28 static/files/eatyourveggies/js/fr/entity.js
  33. +0 −49 static/files/eatyourveggies/js/fr/game.js
  34. +0 −208 static/files/eatyourveggies/js/fr/gameloop.js
  35. +0 −88 static/files/eatyourveggies/js/fr/group.js
  36. +0 −45 static/files/eatyourveggies/js/fr/interaction.js
  37. +0 −68 static/files/eatyourveggies/js/fr/level.js
  38. +0 −30 static/files/eatyourveggies/js/fr/menu.js
  39. +0 −14 static/files/eatyourveggies/js/fr/state.js
  40. +0 −23 static/files/eatyourveggies/js/lib/good.js
  41. +0 −167 static/files/eatyourveggies/js/lib/jquery-1.4.4.min.js
  42. +0 −7 static/files/eatyourveggies/js/lib/raphael.min.js
  43. +0 −25 static/files/eatyourveggies/js/realtime.js
  44. +0 −52 static/files/eatyourveggies/play.html
  45. BIN static/files/eatyourveggies/res/img/blank.png
  46. BIN static/files/eatyourveggies/res/img/broccoli_sm.png
  47. BIN static/files/eatyourveggies/res/img/door.png
  48. BIN static/files/eatyourveggies/res/img/food.png
  49. BIN static/files/eatyourveggies/res/img/icecream_sm.png
  50. BIN static/files/eatyourveggies/res/img/kid_left_run1.png
  51. BIN static/files/eatyourveggies/res/img/kid_left_run2.png
  52. BIN static/files/eatyourveggies/res/img/kid_left_stand.png
  53. BIN static/files/eatyourveggies/res/img/kid_right_run1.png
  54. BIN static/files/eatyourveggies/res/img/kid_right_run2.png
  55. BIN static/files/eatyourveggies/res/img/kid_right_stand.png
  56. BIN static/files/eatyourveggies/res/img/menu/credits.png
  57. BIN static/files/eatyourveggies/res/img/menu/creditspage.png
  58. BIN static/files/eatyourveggies/res/img/menu/gameover.png
  59. BIN static/files/eatyourveggies/res/img/menu/highscores.png
  60. BIN static/files/eatyourveggies/res/img/menu/highscorespage.png
  61. BIN static/files/eatyourveggies/res/img/menu/instructions.png
  62. BIN static/files/eatyourveggies/res/img/menu/instructionspage.png
  63. BIN static/files/eatyourveggies/res/img/menu/main_menu.png
  64. BIN static/files/eatyourveggies/res/img/menu/pause.png
  65. BIN static/files/eatyourveggies/res/img/menu/score.png
  66. BIN static/files/eatyourveggies/res/img/menu/spacebar.png
  67. BIN static/files/eatyourveggies/res/img/menu/start.png
  68. BIN static/files/eatyourveggies/res/img/menu/title.png
  69. BIN static/files/eatyourveggies/res/img/menu/try_again.png
  70. BIN static/files/eatyourveggies/res/img/menu/victory.png
  71. BIN static/files/eatyourveggies/res/img/mom_left_run1.png
  72. BIN static/files/eatyourveggies/res/img/mom_left_run2.png
  73. BIN static/files/eatyourveggies/res/img/mom_right_run1.png
  74. BIN static/files/eatyourveggies/res/img/mom_right_run2.png
  75. BIN static/files/eatyourveggies/res/img/objects/TV.png
  76. BIN static/files/eatyourveggies/res/img/objects/basketball.png
  77. BIN static/files/eatyourveggies/res/img/objects/cat.png
  78. BIN static/files/eatyourveggies/res/img/objects/chair.png
  79. BIN static/files/eatyourveggies/res/img/objects/coffee_table.png
  80. BIN static/files/eatyourveggies/res/img/objects/couch.png
  81. BIN static/files/eatyourveggies/res/img/objects/dining_table.png
  82. BIN static/files/eatyourveggies/res/img/objects/door_sm.png
  83. BIN static/files/eatyourveggies/res/img/objects/plant1.png
  84. BIN static/files/eatyourveggies/res/img/objects/plant2.png
  85. BIN static/files/eatyourveggies/res/img/objects/small_table.png
  86. BIN static/files/eatyourveggies/res/img/objects/tall_lamp.png
  87. BIN static/files/eatyourveggies/res/img/objects/toy_truck.png
  88. BIN static/files/eatyourveggies/res/img/objects/trash_can.png
  89. BIN static/files/eatyourveggies/res/img/objects/vacuum.png
  90. BIN static/files/eatyourveggies/res/img/table.png
  91. BIN static/files/eatyourveggies/res/img/tile.png
  92. BIN static/files/eatyourveggies/res/img/tiles/carpet_floor1.png
  93. BIN static/files/eatyourveggies/res/img/tiles/carpet_floor2.png
  94. BIN static/files/eatyourveggies/res/img/tiles/kitchen_tile.png
  95. BIN static/files/eatyourveggies/res/img/tiles/wood_floor.png
  96. BIN static/files/eatyourveggies/res/img/wall.png
  97. +0 −13 static/files/eatyourveggies/res/res.js
  98. BIN static/files/resume.2011.09.26.pdf
  99. BIN static/files/resume.2011.4.20.pdf
  100. +0 −39 static/files/sortjs/index.html
  101. +0 −73 static/files/sortjs/sort.js
  102. BIN static/font/FontAwesome.otf
  103. BIN static/font/fontawesome-webfont.eot
  104. +284 −0 static/font/fontawesome-webfont.svg
  105. BIN static/font/fontawesome-webfont.ttf
  106. BIN static/font/fontawesome-webfont.woff
  107. 0 { → static}/img/blog/cordova-device-ready.png
  108. 0 { → static}/img/blog/cordova-success.png
  109. 0 { → static}/img/blog/cordova-yeoman.png
  110. 0 { → static}/img/html5.png
  111. 0 { → static}/img/snippets/duff.png
View
19 Makefile
@@ -10,42 +10,35 @@ SASS_DIR = sass
SASS_FILES = $(shell find $(SASS_DIR)/*.scss)
JS_IN_DIR = js
-IMG_IN_DIR = img
-
-IMG_FILES = $(shell find $(IMG_IN_DIR)/ -type f -name '*.png')
JS_FILES = $(shell find $(JS_IN_DIR)/ -type f -name '*.js')
-MISC_IN_DIR = misc
-
# output
OUT_DIR = out
+STATIC_IN_DIR = static
+STATIC_OUT_DIR = $(OUT_DIR)
+STATIC_FILES = $(shell find $(STATIC_IN_DIR) -type f)
+
HTML_OUT_DIR = $(OUT_DIR)
CSS_OUT_DIR = $(OUT_DIR)/css
-IMG_OUT_DIR = $(OUT_DIR)/img
JS_OUT_DIR = $(OUT_DIR)/js
-STATIC_IN_DIR = static
-STATIC_OUT_DIR = $(OUT_DIR)
JS_CONCAT_FILES = $(shell find $(JS_IN_DIR)/*.js)
.PHONY: all
-all: html css images rss
+all: html css static rss
html:
node compile.js
rss:
node rss.js
-misc:
+static: $(STATIC_FILES)
rsync -vaz $(RSYNC_EXCLUDES) $(STATIC_IN_DIR)/ $(STATIC_OUT_DIR)
css: $(CSS_OUT_DIR)/style.css
-images:
- rsync -vaz $(RSYNC_EXCLUDES) img/ $(STATIC_OUT_DIR)/img
-
#$(HTML_OUT_DIR)/%.html: %.jade
# jade --path $(JADE_DIR) --out $(HTML_OUT_DIR) $<
View
16 jade/index.jade
@@ -1,12 +1,12 @@
extends templates/main
block main
- section.grid_6
+ .grid_12.center
img(src="http://gravatar.com/avatar/721cc7667947af96cc416729fc497107?size=300", alt="me")
-
- section.grid_6
- :markdown
- ##[Blog](/blog)
- ##[Google+](https://plus.google.com/118020397223309256905/posts)
- ##[Twitter](http://twitter.com/#!/briantford)
- ##[Github](https://github.com/btford)
+ .blurb
+ :markdown
+ Student, software developer, and aspiring author<br>
+ JavaScript (and Node.js) enthusiast<br>
+ I like (m|bre)aking things<br>
+ Working on AngularJS at Google<br>
+ 日本語がちょっと分かる
View
21 jade/templates/main.jade
@@ -15,21 +15,18 @@ html(lang='en')
body
#container.container_12
header.grid_12
- a#hdr(href='/')
- h1 Brian Ford
+ h1 <a href="/">Brian Ford</a><span class="blog_link"><span class="sep">/</class><a href="/blog">blog</a></span>
+
#main.container_12(role='main')
block main
footer.clearfix.container_12
- span
- | Copyright ©
- | Brian Ford
- | |
- a(href='mailto:btford@umich.edu') btford@umich.edu
- | |
- a(href='http://twitter.com/briantford') @briantford
- #support
- a(href='http://www.w3.org/html/logo/')
- img(alt='made with love and html5', src='/img/html5.png')
+ :markdown
+ [<i class="icon-envelope-alt"></i>](mailto:btford@umich.edu)
+ [<i class="icon-twitter"></i>](http://twitter.com/briantford)
+ [<i class="icon-github"></i>](https://github.com/btford)
+ [<i class="icon-google-plus-sign"></i>](https://plus.google.com/118020397223309256905/posts)
+ [<i class="icon-rss"></i>](/blog.rss)
+ p.copyright Copyright © Brian Ford
script
var _gaq=[['_setAccount','UA-21659439-1'],['_trackPageview'],['_trackPageLoadTime']];
(function(d,t){var g=d.createElement(t),s=d.getElementsByTagName(t)[0];g.async=1;
View
534 sass/_font-awesome.scss
@@ -0,0 +1,534 @@
+/*!
+ * Font Awesome 3.0.2
+ * the iconic font designed for use with Twitter Bootstrap
+ * -------------------------------------------------------
+ * The full suite of pictographic icons, examples, and documentation
+ * can be found at: http://fortawesome.github.com/Font-Awesome/
+ *
+ * License
+ * -------------------------------------------------------
+ * - The Font Awesome font is licensed under the SIL Open Font License - http://scripts.sil.org/OFL
+ * - Font Awesome CSS, LESS, and SASS files are licensed under the MIT License -
+ * http://opensource.org/licenses/mit-license.html
+ * - The Font Awesome pictograms are licensed under the CC BY 3.0 License - http://creativecommons.org/licenses/by/3.0/
+ * - Attribution is no longer required in Font Awesome 3.0, but much appreciated:
+ * "Font Awesome by Dave Gandy - http://fortawesome.github.com/Font-Awesome"
+ *
+ * Contact
+ * -------------------------------------------------------
+ * Email: dave@davegandy.com
+ * Twitter: http://twitter.com/fortaweso_me
+ * Work: Lead Product Designer @ http://kyruus.com
+ */
+
+$fontAwesomePath: "../font" !default;
+$borderColor: #eee;
+$iconMuted: #eee;
+@mixin border-radius($radius) { -webkit-border-radius: $radius; -moz-border-radius: $radius; border-radius: $radius; }
+
+
+@font-face {
+ font-family: 'FontAwesome';
+ src: url('#{$fontAwesomePath}/fontawesome-webfont.eot?v=3.0.1');
+ src: url('#{$fontAwesomePath}/fontawesome-webfont.eot?#iefix&v=3.0.1') format("embedded-opentype"),
+ url('#{$fontAwesomePath}/fontawesome-webfont.woff?v=3.0.1') format("woff"),
+ url('#{$fontAwesomePath}/fontawesome-webfont.ttf?v=3.0.1') format("truetype");
+ font-weight: normal;
+ font-style: normal;
+}
+
+/* Font Awesome styles
+ ------------------------------------------------------- */
+[class^="icon-"],
+[class*=" icon-"] {
+ font-family: FontAwesome;
+ font-weight: normal;
+ font-style: normal;
+ text-decoration: inherit;
+ -webkit-font-smoothing: antialiased;
+
+ /* sprites.less reset */
+ display: inline;
+ width: auto;
+ height: auto;
+ line-height: normal;
+ vertical-align: baseline;
+ background-image: none;
+ background-position: 0% 0%;
+ background-repeat: repeat;
+ margin-top: 0;
+}
+
+/* more sprites.less reset */
+.icon-white,
+.nav-pills > .active > a > [class^="icon-"],
+.nav-pills > .active > a > [class*=" icon-"],
+.nav-list > .active > a > [class^="icon-"],
+.nav-list > .active > a > [class*=" icon-"],
+.navbar-inverse .nav > .active > a > [class^="icon-"],
+.navbar-inverse .nav > .active > a > [class*=" icon-"],
+.dropdown-menu > li > a:hover > [class^="icon-"],
+.dropdown-menu > li > a:hover > [class*=" icon-"],
+.dropdown-menu > .active > a > [class^="icon-"],
+.dropdown-menu > .active > a > [class*=" icon-"],
+.dropdown-submenu:hover > a > [class^="icon-"],
+.dropdown-submenu:hover > a > [class*=" icon-"] {
+ background-image: none;
+}
+
+[class^="icon-"]:before,
+[class*=" icon-"]:before {
+ text-decoration: inherit;
+ display: inline-block;
+ speak: none;
+}
+
+/* makes sure icons active on rollover in links */
+a {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ display: inline-block;
+ }
+}
+
+/* makes the font 33% larger relative to the icon container */
+.icon-large:before {
+ vertical-align: -10%;
+ font-size: 1.3333333333333333em;
+}
+
+.btn, .nav {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ display: inline;
+ /* keeps button heights with and without icons the same */
+ &.icon-large { line-height: .9em; }
+ &.icon-spin { display: inline-block; }
+ }
+}
+
+.nav-tabs, .nav-pills {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ /* keeps button heights with and without icons the same */
+ &, &.icon-large { line-height: .9em; }
+ }
+}
+
+li, .nav li {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ display: inline-block;
+ width: 1.25em;
+ text-align: center;
+ &.icon-large {
+ /* increased font size for icon-large */
+ width: 1.5625em;
+ }
+ }
+}
+
+ul.icons {
+ list-style-type: none;
+ text-indent: -.75em;
+
+ li {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ width: .75em;
+ }
+ }
+}
+
+.icon-muted {
+ color: $iconMuted;
+}
+
+// Icon Borders
+// -------------------------
+
+.icon-border {
+ border: solid 1px $borderColor;
+ padding: .2em .25em .15em;
+ @include border-radius(3px);
+}
+
+// Icon Sizes
+// -------------------------
+
+.icon-2x {
+ font-size: 2em;
+ &.icon-border {
+ border-width: 2px;
+ @include border-radius(4px);
+ }
+}
+.icon-3x {
+ font-size: 3em;
+ &.icon-border {
+ border-width: 3px;
+ @include border-radius(5px);
+ }
+}
+.icon-4x {
+ font-size: 4em;
+ &.icon-border {
+ border-width: 4px;
+ @include border-radius(6px);
+ }
+}
+
+// Floats
+// -------------------------
+
+// Quick floats
+.pull-right { float: right; }
+.pull-left { float: left; }
+
+[class^="icon-"],
+[class*=" icon-"] {
+ &.pull-left {
+ margin-right: .3em;
+ }
+ &.pull-right {
+ margin-left: .3em;
+ }
+}
+
+.btn {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ &.pull-left, &.pull-right {
+ &.icon-2x { margin-top: .18em; }
+ }
+ &.icon-spin.icon-large { line-height: .8em; }
+ }
+}
+
+.btn.btn-small {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ &.pull-left, &.pull-right {
+ &.icon-2x { margin-top: .25em; }
+ }
+ }
+}
+
+.btn.btn-large {
+ [class^="icon-"],
+ [class*=" icon-"] {
+ margin-top: 0; // overrides bootstrap default
+ &.pull-left, &.pull-right {
+ &.icon-2x { margin-top: .05em; }
+ }
+ &.pull-left.icon-2x { margin-right: .2em; }
+ &.pull-right.icon-2x { margin-left: .2em; }
+ }
+}
+
+
+.icon-spin {
+ display: inline-block;
+ -moz-animation: spin 2s infinite linear;
+ -o-animation: spin 2s infinite linear;
+ -webkit-animation: spin 2s infinite linear;
+ animation: spin 2s infinite linear;
+}
+
+@-moz-keyframes spin {
+ 0% { -moz-transform: rotate(0deg); }
+ 100% { -moz-transform: rotate(359deg); }
+}
+@-webkit-keyframes spin {
+ 0% { -webkit-transform: rotate(0deg); }
+ 100% { -webkit-transform: rotate(359deg); }
+}
+@-o-keyframes spin {
+ 0% { -o-transform: rotate(0deg); }
+ 100% { -o-transform: rotate(359deg); }
+}
+@-ms-keyframes spin {
+ 0% { -ms-transform: rotate(0deg); }
+ 100% { -ms-transform: rotate(359deg); }
+}
+@keyframes spin {
+ 0% { transform: rotate(0deg); }
+ 100% { transform: rotate(359deg); }
+}
+
+@-moz-document url-prefix() {
+ .icon-spin { height: .9em; }
+ .btn .icon-spin { height: auto; }
+ .icon-spin.icon-large { height: 1.25em; }
+ .btn .icon-spin.icon-large { height: .75em; }
+}
+
+/* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen
+ readers do not read off random characters that represent icons */
+.icon-glass:before { content: "\f000"; }
+.icon-music:before { content: "\f001"; }
+.icon-search:before { content: "\f002"; }
+.icon-envelope:before { content: "\f003"; }
+.icon-heart:before { content: "\f004"; }
+.icon-star:before { content: "\f005"; }
+.icon-star-empty:before { content: "\f006"; }
+.icon-user:before { content: "\f007"; }
+.icon-film:before { content: "\f008"; }
+.icon-th-large:before { content: "\f009"; }
+.icon-th:before { content: "\f00a"; }
+.icon-th-list:before { content: "\f00b"; }
+.icon-ok:before { content: "\f00c"; }
+.icon-remove:before { content: "\f00d"; }
+.icon-zoom-in:before { content: "\f00e"; }
+
+.icon-zoom-out:before { content: "\f010"; }
+.icon-off:before { content: "\f011"; }
+.icon-signal:before { content: "\f012"; }
+.icon-cog:before { content: "\f013"; }
+.icon-trash:before { content: "\f014"; }
+.icon-home:before { content: "\f015"; }
+.icon-file:before { content: "\f016"; }
+.icon-time:before { content: "\f017"; }
+.icon-road:before { content: "\f018"; }
+.icon-download-alt:before { content: "\f019"; }
+.icon-download:before { content: "\f01a"; }
+.icon-upload:before { content: "\f01b"; }
+.icon-inbox:before { content: "\f01c"; }
+.icon-play-circle:before { content: "\f01d"; }
+.icon-repeat:before { content: "\f01e"; }
+
+/* \f020 doesn't work in Safari. all shifted one down */
+.icon-refresh:before { content: "\f021"; }
+.icon-list-alt:before { content: "\f022"; }
+.icon-lock:before { content: "\f023"; }
+.icon-flag:before { content: "\f024"; }
+.icon-headphones:before { content: "\f025"; }
+.icon-volume-off:before { content: "\f026"; }
+.icon-volume-down:before { content: "\f027"; }
+.icon-volume-up:before { content: "\f028"; }
+.icon-qrcode:before { content: "\f029"; }
+.icon-barcode:before { content: "\f02a"; }
+.icon-tag:before { content: "\f02b"; }
+.icon-tags:before { content: "\f02c"; }
+.icon-book:before { content: "\f02d"; }
+.icon-bookmark:before { content: "\f02e"; }
+.icon-print:before { content: "\f02f"; }
+
+.icon-camera:before { content: "\f030"; }
+.icon-font:before { content: "\f031"; }
+.icon-bold:before { content: "\f032"; }
+.icon-italic:before { content: "\f033"; }
+.icon-text-height:before { content: "\f034"; }
+.icon-text-width:before { content: "\f035"; }
+.icon-align-left:before { content: "\f036"; }
+.icon-align-center:before { content: "\f037"; }
+.icon-align-right:before { content: "\f038"; }
+.icon-align-justify:before { content: "\f039"; }
+.icon-list:before { content: "\f03a"; }
+.icon-indent-left:before { content: "\f03b"; }
+.icon-indent-right:before { content: "\f03c"; }
+.icon-facetime-video:before { content: "\f03d"; }
+.icon-picture:before { content: "\f03e"; }
+
+.icon-pencil:before { content: "\f040"; }
+.icon-map-marker:before { content: "\f041"; }
+.icon-adjust:before { content: "\f042"; }
+.icon-tint:before { content: "\f043"; }
+.icon-edit:before { content: "\f044"; }
+.icon-share:before { content: "\f045"; }
+.icon-check:before { content: "\f046"; }
+.icon-move:before { content: "\f047"; }
+.icon-step-backward:before { content: "\f048"; }
+.icon-fast-backward:before { content: "\f049"; }
+.icon-backward:before { content: "\f04a"; }
+.icon-play:before { content: "\f04b"; }
+.icon-pause:before { content: "\f04c"; }
+.icon-stop:before { content: "\f04d"; }
+.icon-forward:before { content: "\f04e"; }
+
+.icon-fast-forward:before { content: "\f050"; }
+.icon-step-forward:before { content: "\f051"; }
+.icon-eject:before { content: "\f052"; }
+.icon-chevron-left:before { content: "\f053"; }
+.icon-chevron-right:before { content: "\f054"; }
+.icon-plus-sign:before { content: "\f055"; }
+.icon-minus-sign:before { content: "\f056"; }
+.icon-remove-sign:before { content: "\f057"; }
+.icon-ok-sign:before { content: "\f058"; }
+.icon-question-sign:before { content: "\f059"; }
+.icon-info-sign:before { content: "\f05a"; }
+.icon-screenshot:before { content: "\f05b"; }
+.icon-remove-circle:before { content: "\f05c"; }
+.icon-ok-circle:before { content: "\f05d"; }
+.icon-ban-circle:before { content: "\f05e"; }
+
+.icon-arrow-left:before { content: "\f060"; }
+.icon-arrow-right:before { content: "\f061"; }
+.icon-arrow-up:before { content: "\f062"; }
+.icon-arrow-down:before { content: "\f063"; }
+.icon-share-alt:before { content: "\f064"; }
+.icon-resize-full:before { content: "\f065"; }
+.icon-resize-small:before { content: "\f066"; }
+.icon-plus:before { content: "\f067"; }
+.icon-minus:before { content: "\f068"; }
+.icon-asterisk:before { content: "\f069"; }
+.icon-exclamation-sign:before { content: "\f06a"; }
+.icon-gift:before { content: "\f06b"; }
+.icon-leaf:before { content: "\f06c"; }
+.icon-fire:before { content: "\f06d"; }
+.icon-eye-open:before { content: "\f06e"; }
+
+.icon-eye-close:before { content: "\f070"; }
+.icon-warning-sign:before { content: "\f071"; }
+.icon-plane:before { content: "\f072"; }
+.icon-calendar:before { content: "\f073"; }
+.icon-random:before { content: "\f074"; }
+.icon-comment:before { content: "\f075"; }
+.icon-magnet:before { content: "\f076"; }
+.icon-chevron-up:before { content: "\f077"; }
+.icon-chevron-down:before { content: "\f078"; }
+.icon-retweet:before { content: "\f079"; }
+.icon-shopping-cart:before { content: "\f07a"; }
+.icon-folder-close:before { content: "\f07b"; }
+.icon-folder-open:before { content: "\f07c"; }
+.icon-resize-vertical:before { content: "\f07d"; }
+.icon-resize-horizontal:before { content: "\f07e"; }
+
+.icon-bar-chart:before { content: "\f080"; }
+.icon-twitter-sign:before { content: "\f081"; }
+.icon-facebook-sign:before { content: "\f082"; }
+.icon-camera-retro:before { content: "\f083"; }
+.icon-key:before { content: "\f084"; }
+.icon-cogs:before { content: "\f085"; }
+.icon-comments:before { content: "\f086"; }
+.icon-thumbs-up:before { content: "\f087"; }
+.icon-thumbs-down:before { content: "\f088"; }
+.icon-star-half:before { content: "\f089"; }
+.icon-heart-empty:before { content: "\f08a"; }
+.icon-signout:before { content: "\f08b"; }
+.icon-linkedin-sign:before { content: "\f08c"; }
+.icon-pushpin:before { content: "\f08d"; }
+.icon-external-link:before { content: "\f08e"; }
+
+.icon-signin:before { content: "\f090"; }
+.icon-trophy:before { content: "\f091"; }
+.icon-github-sign:before { content: "\f092"; }
+.icon-upload-alt:before { content: "\f093"; }
+.icon-lemon:before { content: "\f094"; }
+.icon-phone:before { content: "\f095"; }
+.icon-check-empty:before { content: "\f096"; }
+.icon-bookmark-empty:before { content: "\f097"; }
+.icon-phone-sign:before { content: "\f098"; }
+.icon-twitter:before { content: "\f099"; }
+.icon-facebook:before { content: "\f09a"; }
+.icon-github:before { content: "\f09b"; }
+.icon-unlock:before { content: "\f09c"; }
+.icon-credit-card:before { content: "\f09d"; }
+.icon-rss:before { content: "\f09e"; }
+
+.icon-hdd:before { content: "\f0a0"; }
+.icon-bullhorn:before { content: "\f0a1"; }
+.icon-bell:before { content: "\f0a2"; }
+.icon-certificate:before { content: "\f0a3"; }
+.icon-hand-right:before { content: "\f0a4"; }
+.icon-hand-left:before { content: "\f0a5"; }
+.icon-hand-up:before { content: "\f0a6"; }
+.icon-hand-down:before { content: "\f0a7"; }
+.icon-circle-arrow-left:before { content: "\f0a8"; }
+.icon-circle-arrow-right:before { content: "\f0a9"; }
+.icon-circle-arrow-up:before { content: "\f0aa"; }
+.icon-circle-arrow-down:before { content: "\f0ab"; }
+.icon-globe:before { content: "\f0ac"; }
+.icon-wrench:before { content: "\f0ad"; }
+.icon-tasks:before { content: "\f0ae"; }
+
+.icon-filter:before { content: "\f0b0"; }
+.icon-briefcase:before { content: "\f0b1"; }
+.icon-fullscreen:before { content: "\f0b2"; }
+
+.icon-group:before { content: "\f0c0"; }
+.icon-link:before { content: "\f0c1"; }
+.icon-cloud:before { content: "\f0c2"; }
+.icon-beaker:before { content: "\f0c3"; }
+.icon-cut:before { content: "\f0c4"; }
+.icon-copy:before { content: "\f0c5"; }
+.icon-paper-clip:before { content: "\f0c6"; }
+.icon-save:before { content: "\f0c7"; }
+.icon-sign-blank:before { content: "\f0c8"; }
+.icon-reorder:before { content: "\f0c9"; }
+.icon-list-ul:before { content: "\f0ca"; }
+.icon-list-ol:before { content: "\f0cb"; }
+.icon-strikethrough:before { content: "\f0cc"; }
+.icon-underline:before { content: "\f0cd"; }
+.icon-table:before { content: "\f0ce"; }
+
+.icon-magic:before { content: "\f0d0"; }
+.icon-truck:before { content: "\f0d1"; }
+.icon-pinterest:before { content: "\f0d2"; }
+.icon-pinterest-sign:before { content: "\f0d3"; }
+.icon-google-plus-sign:before { content: "\f0d4"; }
+.icon-google-plus:before { content: "\f0d5"; }
+.icon-money:before { content: "\f0d6"; }
+.icon-caret-down:before { content: "\f0d7"; }
+.icon-caret-up:before { content: "\f0d8"; }
+.icon-caret-left:before { content: "\f0d9"; }
+.icon-caret-right:before { content: "\f0da"; }
+.icon-columns:before { content: "\f0db"; }
+.icon-sort:before { content: "\f0dc"; }
+.icon-sort-down:before { content: "\f0dd"; }
+.icon-sort-up:before { content: "\f0de"; }
+
+.icon-envelope-alt:before { content: "\f0e0"; }
+.icon-linkedin:before { content: "\f0e1"; }
+.icon-undo:before { content: "\f0e2"; }
+.icon-legal:before { content: "\f0e3"; }
+.icon-dashboard:before { content: "\f0e4"; }
+.icon-comment-alt:before { content: "\f0e5"; }
+.icon-comments-alt:before { content: "\f0e6"; }
+.icon-bolt:before { content: "\f0e7"; }
+.icon-sitemap:before { content: "\f0e8"; }
+.icon-umbrella:before { content: "\f0e9"; }
+.icon-paste:before { content: "\f0ea"; }
+.icon-lightbulb:before { content: "\f0eb"; }
+.icon-exchange:before { content: "\f0ec"; }
+.icon-cloud-download:before { content: "\f0ed"; }
+.icon-cloud-upload:before { content: "\f0ee"; }
+
+.icon-user-md:before { content: "\f0f0"; }
+.icon-stethoscope:before { content: "\f0f1"; }
+.icon-suitcase:before { content: "\f0f2"; }
+.icon-bell-alt:before { content: "\f0f3"; }
+.icon-coffee:before { content: "\f0f4"; }
+.icon-food:before { content: "\f0f5"; }
+.icon-file-alt:before { content: "\f0f6"; }
+.icon-building:before { content: "\f0f7"; }
+.icon-hospital:before { content: "\f0f8"; }
+.icon-ambulance:before { content: "\f0f9"; }
+.icon-medkit:before { content: "\f0fa"; }
+.icon-fighter-jet:before { content: "\f0fb"; }
+.icon-beer:before { content: "\f0fc"; }
+.icon-h-sign:before { content: "\f0fd"; }
+.icon-plus-sign-alt:before { content: "\f0fe"; }
+
+.icon-double-angle-left:before { content: "\f100"; }
+.icon-double-angle-right:before { content: "\f101"; }
+.icon-double-angle-up:before { content: "\f102"; }
+.icon-double-angle-down:before { content: "\f103"; }
+.icon-angle-left:before { content: "\f104"; }
+.icon-angle-right:before { content: "\f105"; }
+.icon-angle-up:before { content: "\f106"; }
+.icon-angle-down:before { content: "\f107"; }
+.icon-desktop:before { content: "\f108"; }
+.icon-laptop:before { content: "\f109"; }
+.icon-tablet:before { content: "\f10a"; }
+.icon-mobile-phone:before { content: "\f10b"; }
+.icon-circle-blank:before { content: "\f10c"; }
+.icon-quote-left:before { content: "\f10d"; }
+.icon-quote-right:before { content: "\f10e"; }
+
+.icon-spinner:before { content: "\f110"; }
+.icon-circle:before { content: "\f111"; }
+.icon-reply:before { content: "\f112"; }
+.icon-github-alt:before { content: "\f113"; }
+.icon-folder-close-alt:before { content: "\f114"; }
+.icon-folder-open-alt:before { content: "\f115"; }
View
30 sass/style.scss
@@ -1,4 +1,5 @@
@import "reset";
+@import "font-awesome";
/* =============================================================================
Primary styles (default + mobile)
@@ -72,17 +73,42 @@ nav {
}
footer {
- font-size: .8em;
+ font-size: 2em;
text-shadow: 2px 2px 1px $shadow-color;
margin-top: 3em;
margin-left: 1.5em;
text-align: center;
}
+.blog_link {
+ font-size: .67em;
+}
+
.date {
color: $date-text-color;
}
+.grid_center {
+ margin: 0 auto;
+ width: 960px;
+}
+
+.blurb {
+ font-size: 1.5em;
+ line-height: 1.6;
+}
+
+.left {
+ float: left;
+ margin-right: 1em;
+}
+.center {
+ text-align: center;
+}
+.copyright {
+ font-size: .67em;
+}
+
.name {
font-weight: bold;
}
@@ -100,7 +126,7 @@ pre {
}
p, img {
- margin-bottom: 0px;
+ margin-bottom: 0;
margin-top: .75em;
}
View
BIN static/files/datamining/datamining.zip
Binary file not shown.
View
271 static/files/datamining/genjson.py
@@ -1,271 +0,0 @@
-###############################################################################
-# Data Mining
-# Script for creating JSON from compressed tab separated values
-# Authors: Brian Ford and Sharon Lee
-# 04/09/2011
-###############################################################################
-
-import gzip
-
-# Settings
-###############################################################################
-
-# Directory containing data
-Path = "data/"
-
-# Helper function for format JSON output
-def tab_str(num):
- res = ""
- for i in range(0, 4 * num):
- res += " "
- return res
-
-
-# Classes
-###############################################################################
-
-class Rating:
- def __init__(self, user, score):
- self.user = user
- self.score = score
-
-
-class Song:
- def __init__(self, id):
- self.id = id
- self.ratings = []
-
- def addRating(self, user, score):
- rating = Rating(user, score)
- self.ratings.append(rating)
- return self
-
- def getNumRatings(self):
- return len(self.ratings)
-
- #TODO: memorize this
- def getAvgRating(self):
- if self.getNumRatings() <= 0:
- return 0
- else:
- sum = 0
- for rating in self.ratings:
- sum += rating.score
- return float(sum)/self.getNumRatings()
-
-
-
-class Album:
- def __init__(self, id):
- self.id = id
- self.songs = {}
-
- def addSong(self, id):
- if id in self.songs:
- song = self.songs[id]
- else:
- song = Song(id)
- song.album = self
-
- self.songs[id] = song
-
- return song
-
-
-
-class Artist:
- def __init__(self, id):
- self.id = id
- self.albums = {}
-
- def addAlbum(self, id):
- if id in self.albums:
- album = self.albums[id]
- else:
- album = Album(id)
- album.artist = self
-
- self.albums[id] = album
-
- return album
-
- def getNumRatings(self):
- for album_id in self.albums:
- album = self.albums[album_id]
- for song_id in album.songs:
- totalNumRatings += song.getNumRatings()
- return totalNumRatings
-
- def getAvgRating(self):
- numSongs = 0
- totalRatings = 0
- for album_id in self.albums:
- album = self.albums[album_id]
- for song_id in album.songs:
- song = album.songs[song_id]
- numSongs += 1
- totalRatings += song.getAvgRating()
- return float(totalRatings)/numSongs
-
-
-
-class Genre:
- def __init__(self, line):
- V = line.rstrip().split("\t")
-
- self.id = int(V[0])
- self.parent_id = int(V[1])
- self.level = int(V[2])
- self.name = V[3]
-
- self.children = []
- self.artists = {}
-
- self.numSongs = 0
-
- def __repr__(self):
- return self.name
-
- def addArtist(self, id):
- if id in self.artists:
- artist = self.artists[id]
- else:
- artist = Artist(id)
- artist.genre = self
-
- self.artists[id] = artist
-
- return artist
-
- def getNumArtists(self):
- return len(self.artists)
-
- def getFamilyNumArtists(self):
- if not hasattr(self, "family_artists"): #memorize
- self.family_artists = self.getNumArtists()
-
- for child in self.children:
- self.family_artists += self.collection.getGenre(child).getFamilyNumArtists()
-
- return self.family_artists
-
- def getAvgRating(self):
- if not hasattr(self, "avg_rating"): # memorize
- if self.getNumArtists() <= 0:
- self.avg_rating = 0
- else:
- rating = 0
- for artist in self.artists:
- rating += self.artists[artist].getAvgRating()
-
- self.avg_rating = float(rating)/self.getNumArtists()
-
- return self.avg_rating
-
- def getColor(self):
- return "#" + ["ddd","f33","f63","cc3","6f0","360"][int(math.ceil(self.getAvgRating()))]
-
- def printJson(self, tab_level):
- print tab_str(tab_level) + '{'
- print '{tab}"id": "{id}",'.format(tab=tab_str(tab_level+1), id=self.id)
- print '{tab}"name": "{name}",'.format(tab=tab_str(tab_level+1), name=self.name)
- print '{tab}"children": ['.format(tab=tab_str(tab_level+1))
-
- for child in self.children:
- self.collection.getGenre(child).printJson(tab_level+1)
-
- print tab_str(tab_level+1) + '],'
-
- print '{tab}"data": '.format(tab=tab_str(tab_level+1)) + '{'
- #print '{tab}"artists": {artists},'.format(tab=tab_str(tab_level+2), artists=self.getNumArtists())
- #print '{tab}"familyArtists": {artists},'.format(tab=tab_str(tab_level+2), artists=self.getFamilyNumArtists())
- #print '{tab}"songs": "{songs}",'.format(tab=tab_str(tab_level+2), artists=self.getNumArtists())
- #print '{tab}"ratings": "{artists}",'.format(tab=tab_str(tab_level+2), ratings=self.getNumArtists())
- print '{tab}"avgRating": {rating},'.format(tab=tab_str(tab_level+2), rating=("%.2f" %self.getAvgRating()))
- print '{tab}"$color": "{color}"'.format(tab=tab_str(tab_level+2), color=self.getColor())
- print tab_str(tab_level+1) + '}'
- print tab_str(tab_level) + '},'
-
-
-
-class GenreCollection:
- def __init__(self):
- self.rootGenres = []
- self.genreDict = {}
- self.songs = {}
-
- self.loadGenreData()
- self.loadSongData()
- self.loadRatingData()
-
- def loadGenreData(self):
- genre_file = gzip.open(Path + "genre-hierarchy.txt.gz")
- for line in genre_file:
- self.addGenre(line)
-
- genre_file.close()
-
- def loadSongData(self):
- song_file = gzip.open(Path + "song-attributes.txt.gz")
- for line in song_file:
- attributes = line.rstrip().split("\t")
-
- song_id = int(attributes[0])
- album_id = int(attributes[1])
- artist_id = int(attributes[2])
- genre_id = int(attributes[3])
-
- self.songs[song_id] = self.getGenre(genre_id).addArtist(artist_id).addAlbum(album_id).addSong(song_id)
-
- song_file.close()
-
- def loadRatingData(self):
- rating_file = gzip.open(Path + "yahoo.txt.gz")
- for line in rating_file:
- attributes = line.rstrip().split("\t")
-
- user_id = int(attributes[0])
- song_id = int(attributes[1])
- score = int(attributes[2])
-
- self.songs[song_id].addRating(user_id, score)
-
- rating_file.close()
-
- def addGenre(self, line):
- newGenre = Genre(line)
- newGenre.collection = self
- self.genreDict[newGenre.id] = newGenre
- if(newGenre.parent_id != newGenre.id):
- self.getGenre(newGenre.parent_id).children.append(newGenre.id)
- else:
- self.rootGenres.append(newGenre.id)
-
- def getGenre(self, genre_id):
- return self.genreDict[genre_id]
-
- def genreExists(self, genre_id):
- return genre_id in self.genreDict
-
- def printJson(self):
- print 'var json = {'
- print '"id": "m",'
- print '"name": "Music",'
- print '"children": ['
-
- for node in self.rootGenres:
- self.genreDict[node].printJson(1)
-
- print ']'
- print '};'
-
-
-# Main function
-###############################################################################
-
-def main():
- collection = GenreCollection()
- collection.printJson()
-
-main()
-
View
30 static/files/datamining/index.html
@@ -1,30 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
-<head>
-<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
-<title>Yahoo Data Mining Visualization</title>
-
-<!-- CSS -->
-<link type="text/css" href="css/style.css" rel="stylesheet" />
-
-<!-- Add support for canvas in IE -->
-<!--[if IE]><script language="javascript" type="text/javascript" src="js/lib/excanvas.min.js"></script><![endif]-->
-
-<!-- JIT -->
-<script language="javascript" type="text/javascript" src="js/lib/jit-2.0.0b.min.js"></script>
-
-<!-- Data and main function -->
-<script language="javascript" type="text/javascript" src="js/data.js"></script>
-<script language="javascript" type="text/javascript" src="js/main.js"></script>
-</head>
-
-<body onload="init();">
- <h1>Yahoo Data Mining Visualization</h1>
- <sub>Brian Ford and Sharon Lee</sub>
- <div id="container">
- <div id="infovis"></div>
- </div>
- <div id="footer">Download the <a href="datamining.zip">source code</a></div>
- <div id="footer">Created with the <a href="http://thejit.org/">JavaScript InfoVis Toolkit</a></div>
-</body>
-</html>
View
2,166 static/files/datamining/js/data.js
@@ -1,2166 +0,0 @@
-var json = {
-"id": "m",
-"name": "Music",
-"children": [
- {
- "id": "0",
- "name": "Unknown",
- "children": [
- ],
- "data": {
- "avgRating": 2.86,
- "$color": "#cc3"
- }
- },
- {
- "id": "1",
- "name": "Electronic/Dance",
- "children": [
- {
- "id": "2",
- "name": "Ambient",
- "children": [
- {
- "id": "3",
- "name": "Ambient Dub",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "4",
- "name": "Ambient Tech",
- "children": [
- ],
- "data": {
- "avgRating": 2.54,
- "$color": "#cc3"
- }
- },
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "5",
- "name": "Breaks",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "6",
- "name": "Jungle / Drum &amp; Bass",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "7",
- "name": "House",
- "children": [
- {
- "id": "8",
- "name": "Deep House",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "9",
- "name": "Tech House",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "10",
- "name": "Funky House",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "11",
- "name": "Garage",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "12",
- "name": "Progressive House",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "13",
- "name": "Big Beat",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "14",
- "name": "Mainstream Dance",
- "children": [
- {
- "id": "15",
- "name": "Disco",
- "children": [
- ],
- "data": {
- "avgRating": 2.96,
- "$color": "#cc3"
- }
- },
- {
- "id": "16",
- "name": "Hi-NRG",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "17",
- "name": "Freestyle",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.39,
- "$color": "#6f0"
- }
- },
- {
- "id": "18",
- "name": "Techno",
- "children": [
- {
- "id": "19",
- "name": "Minimal Techno",
- "children": [
- ],
- "data": {
- "avgRating": 2.30,
- "$color": "#cc3"
- }
- },
- {
- "id": "20",
- "name": "Progressive Techno",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "21",
- "name": "Detroit Techno",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.20,
- "$color": "#6f0"
- }
- },
- {
- "id": "22",
- "name": "Trance",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "23",
- "name": "Downtempo",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "24",
- "name": "Trip Hop",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "25",
- "name": "Acid Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "26",
- "name": "Hardcore",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 2.75,
- "$color": "#cc3"
- }
- },
- {
- "id": "27",
- "name": "Reggae",
- "children": [
- {
- "id": "28",
- "name": "Dub",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "29",
- "name": "Dancehall",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "30",
- "name": "Traditional Ska",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "31",
- "name": "Ragga",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "32",
- "name": "Roots",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "33",
- "name": "Rocksteady",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "34",
- "name": "Soca",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.26,
- "$color": "#6f0"
- }
- },
- {
- "id": "35",
- "name": "Rap",
- "children": [
- {
- "id": "36",
- "name": "Alternative Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "37",
- "name": "Dirty South",
- "children": [
- {
- "id": "38",
- "name": "Bass",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "39",
- "name": "East Coast Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "40",
- "name": "Mainstream Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "41",
- "name": "Midwest Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "42",
- "name": "Hardcore Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "43",
- "name": "Old-School Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "44",
- "name": "Underground Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "45",
- "name": "West Coast Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "46",
- "name": "Hip-Hop / Soul",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.23,
- "$color": "#6f0"
- }
- },
- {
- "id": "47",
- "name": "Blues",
- "children": [
- {
- "id": "48",
- "name": "Country Blues",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "49",
- "name": "Electric Blues",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "50",
- "name": "Modern Blues",
- "children": [
- ],
- "data": {
- "avgRating": 3.22,
- "$color": "#6f0"
- }
- },
- {
- "id": "51",
- "name": "Early Blues",
- "children": [
- ],
- "data": {
- "avgRating": 3.76,
- "$color": "#6f0"
- }
- },
- {
- "id": "52",
- "name": "Blues-Rock",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "53",
- "name": "Acoustic Blues",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.45,
- "$color": "#6f0"
- }
- },
- {
- "id": "54",
- "name": "Country",
- "children": [
- {
- "id": "55",
- "name": "Alt-Country",
- "children": [
- ],
- "data": {
- "avgRating": 3.77,
- "$color": "#6f0"
- }
- },
- {
- "id": "56",
- "name": "Bluegrass",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "57",
- "name": "Classic Country",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "58",
- "name": "Modern Country",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "59",
- "name": "Country-Rock",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "60",
- "name": "Cowboy",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "61",
- "name": "Honky Tonk",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "62",
- "name": "Outlaw Country",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "63",
- "name": "Pop Country",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "64",
- "name": "Western Swing",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.37,
- "$color": "#6f0"
- }
- },
- {
- "id": "65",
- "name": "Folk",
- "children": [
- {
- "id": "66",
- "name": "Modern Folk",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "67",
- "name": "Traditional Folk",
- "children": [
- ],
- "data": {
- "avgRating": 3.01,
- "$color": "#6f0"
- }
- },
- {
- "id": "68",
- "name": "British Folk",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "69",
- "name": "Folk-Pop",
- "children": [
- ],
- "data": {
- "avgRating": 3.22,
- "$color": "#6f0"
- }
- },
- ],
- "data": {
- "avgRating": 3.62,
- "$color": "#6f0"
- }
- },
- {
- "id": "70",
- "name": "Holiday",
- "children": [
- {
- "id": "71",
- "name": "Christmas",
- "children": [
- ],
- "data": {
- "avgRating": 3.13,
- "$color": "#6f0"
- }
- },
- {
- "id": "72",
- "name": "Other Holiday",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "73",
- "name": "Halloween",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 2.93,
- "$color": "#cc3"
- }
- },
- {
- "id": "74",
- "name": "Jazz",
- "children": [
- {
- "id": "75",
- "name": "Avant-Garde Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "76",
- "name": "Big Band",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "77",
- "name": "Bebop",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "78",
- "name": "Cool Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "79",
- "name": "Fusion",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "80",
- "name": "Latin Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "81",
- "name": "Afro-Cuban Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "82",
- "name": "Smooth Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "83",
- "name": "Swing",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "84",
- "name": "Vocal Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 3.23,
- "$color": "#6f0"
- }
- },
- {
- "id": "85",
- "name": "Modern Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "86",
- "name": "Dixieland",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "87",
- "name": "New Orleans Jazz",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 3.28,
- "$color": "#6f0"
- }
- },
- {
- "id": "88",
- "name": "Latin",
- "children": [
- {
- "id": "89",
- "name": "Latin Pop",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "90",
- "name": "Latin Rock",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "91",
- "name": "Latin Alternative",
- "children": [
- {
- "id": "92",
- "name": "Rock en Espanol",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "93",
- "name": "Latin Rap",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "94",
- "name": "Merengue",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "95",
- "name": "Salsa",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "96",
- "name": "Tejano",
- "children": [
- ],
- "data": {
- "avgRating": 0.00,
- "$color": "#ddd"
- }
- },
- {
- "id": "97",