growbot-web 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (229) hide show
  1. checksums.yaml +7 -0
  2. data/.bowerrc +3 -0
  3. data/.gitignore +22 -0
  4. data/Gemfile +11 -0
  5. data/LICENSE.txt +22 -0
  6. data/README.md +35 -0
  7. data/Rakefile +39 -0
  8. data/arduino_data.txt +6137 -0
  9. data/bower.json +19 -0
  10. data/config.ru +13 -0
  11. data/growbot-web.gemspec +35 -0
  12. data/lib/growbot/web.rb +6 -0
  13. data/lib/growbot/web/app.rb +49 -0
  14. data/lib/growbot/web/data.rb +42 -0
  15. data/lib/growbot/web/env.rb +9 -0
  16. data/lib/growbot/web/version.rb +5 -0
  17. data/lib/growbot/web/views/coffee/app.coffee +131 -0
  18. data/lib/growbot/web/views/index.haml +10 -0
  19. data/lib/growbot/web/views/layout.haml +20 -0
  20. data/lib/growbot/web/views/sass/app.scss +59 -0
  21. data/lib/growbot/web/views/sass/bitters/_bitters.scss +16 -0
  22. data/lib/growbot/web/views/sass/bitters/_flashes.scss +11 -0
  23. data/lib/growbot/web/views/sass/bitters/_forms.scss +95 -0
  24. data/lib/growbot/web/views/sass/bitters/_grid-settings.scss +14 -0
  25. data/lib/growbot/web/views/sass/bitters/_lists.scss +31 -0
  26. data/lib/growbot/web/views/sass/bitters/_tables.scss +22 -0
  27. data/lib/growbot/web/views/sass/bitters/_typography.scss +104 -0
  28. data/lib/growbot/web/views/sass/bitters/_variables.scss +43 -0
  29. data/lib/growbot/web/views/sass/bitters/extends/_base.scss +1 -0
  30. data/lib/growbot/web/views/sass/bitters/extends/_button.scss +7 -0
  31. data/lib/growbot/web/views/sass/bitters/mixins/_base.scss +1 -0
  32. data/lib/growbot/web/views/sass/bitters/mixins/_flash.scss +15 -0
  33. data/lib/growbot/web/views/sass/bourbon/_bourbon-deprecated-upcoming.scss +8 -0
  34. data/lib/growbot/web/views/sass/bourbon/_bourbon.scss +78 -0
  35. data/lib/growbot/web/views/sass/bourbon/addons/_button.scss +374 -0
  36. data/lib/growbot/web/views/sass/bourbon/addons/_clearfix.scss +23 -0
  37. data/lib/growbot/web/views/sass/bourbon/addons/_directional-values.scss +111 -0
  38. data/lib/growbot/web/views/sass/bourbon/addons/_ellipsis.scss +7 -0
  39. data/lib/growbot/web/views/sass/bourbon/addons/_font-family.scss +5 -0
  40. data/lib/growbot/web/views/sass/bourbon/addons/_hide-text.scss +10 -0
  41. data/lib/growbot/web/views/sass/bourbon/addons/_html5-input-types.scss +86 -0
  42. data/lib/growbot/web/views/sass/bourbon/addons/_position.scss +32 -0
  43. data/lib/growbot/web/views/sass/bourbon/addons/_prefixer.scss +45 -0
  44. data/lib/growbot/web/views/sass/bourbon/addons/_retina-image.scss +31 -0
  45. data/lib/growbot/web/views/sass/bourbon/addons/_size.scss +16 -0
  46. data/lib/growbot/web/views/sass/bourbon/addons/_timing-functions.scss +32 -0
  47. data/lib/growbot/web/views/sass/bourbon/addons/_triangle.scss +83 -0
  48. data/lib/growbot/web/views/sass/bourbon/addons/_word-wrap.scss +8 -0
  49. data/lib/growbot/web/views/sass/bourbon/css3/_animation.scss +52 -0
  50. data/lib/growbot/web/views/sass/bourbon/css3/_appearance.scss +3 -0
  51. data/lib/growbot/web/views/sass/bourbon/css3/_backface-visibility.scss +6 -0
  52. data/lib/growbot/web/views/sass/bourbon/css3/_background-image.scss +42 -0
  53. data/lib/growbot/web/views/sass/bourbon/css3/_background.scss +55 -0
  54. data/lib/growbot/web/views/sass/bourbon/css3/_border-image.scss +59 -0
  55. data/lib/growbot/web/views/sass/bourbon/css3/_border-radius.scss +22 -0
  56. data/lib/growbot/web/views/sass/bourbon/css3/_box-sizing.scss +4 -0
  57. data/lib/growbot/web/views/sass/bourbon/css3/_calc.scss +4 -0
  58. data/lib/growbot/web/views/sass/bourbon/css3/_columns.scss +47 -0
  59. data/lib/growbot/web/views/sass/bourbon/css3/_filter.scss +5 -0
  60. data/lib/growbot/web/views/sass/bourbon/css3/_flex-box.scss +321 -0
  61. data/lib/growbot/web/views/sass/bourbon/css3/_font-face.scss +23 -0
  62. data/lib/growbot/web/views/sass/bourbon/css3/_font-feature-settings.scss +10 -0
  63. data/lib/growbot/web/views/sass/bourbon/css3/_hidpi-media-query.scss +10 -0
  64. data/lib/growbot/web/views/sass/bourbon/css3/_hyphens.scss +4 -0
  65. data/lib/growbot/web/views/sass/bourbon/css3/_image-rendering.scss +14 -0
  66. data/lib/growbot/web/views/sass/bourbon/css3/_keyframes.scss +35 -0
  67. data/lib/growbot/web/views/sass/bourbon/css3/_linear-gradient.scss +38 -0
  68. data/lib/growbot/web/views/sass/bourbon/css3/_perspective.scss +8 -0
  69. data/lib/growbot/web/views/sass/bourbon/css3/_placeholder.scss +8 -0
  70. data/lib/growbot/web/views/sass/bourbon/css3/_radial-gradient.scss +39 -0
  71. data/lib/growbot/web/views/sass/bourbon/css3/_transform.scss +15 -0
  72. data/lib/growbot/web/views/sass/bourbon/css3/_transition.scss +77 -0
  73. data/lib/growbot/web/views/sass/bourbon/css3/_user-select.scss +3 -0
  74. data/lib/growbot/web/views/sass/bourbon/functions/_assign.scss +11 -0
  75. data/lib/growbot/web/views/sass/bourbon/functions/_color-lightness.scss +13 -0
  76. data/lib/growbot/web/views/sass/bourbon/functions/_flex-grid.scss +39 -0
  77. data/lib/growbot/web/views/sass/bourbon/functions/_golden-ratio.scss +3 -0
  78. data/lib/growbot/web/views/sass/bourbon/functions/_grid-width.scss +13 -0
  79. data/lib/growbot/web/views/sass/bourbon/functions/_modular-scale.scss +66 -0
  80. data/lib/growbot/web/views/sass/bourbon/functions/_px-to-em.scss +13 -0
  81. data/lib/growbot/web/views/sass/bourbon/functions/_px-to-rem.scss +15 -0
  82. data/lib/growbot/web/views/sass/bourbon/functions/_strip-units.scss +5 -0
  83. data/lib/growbot/web/views/sass/bourbon/functions/_tint-shade.scss +9 -0
  84. data/lib/growbot/web/views/sass/bourbon/functions/_transition-property-name.scss +22 -0
  85. data/lib/growbot/web/views/sass/bourbon/functions/_unpack.scss +17 -0
  86. data/lib/growbot/web/views/sass/bourbon/helpers/_convert-units.scss +15 -0
  87. data/lib/growbot/web/views/sass/bourbon/helpers/_gradient-positions-parser.scss +13 -0
  88. data/lib/growbot/web/views/sass/bourbon/helpers/_is-num.scss +8 -0
  89. data/lib/growbot/web/views/sass/bourbon/helpers/_linear-angle-parser.scss +25 -0
  90. data/lib/growbot/web/views/sass/bourbon/helpers/_linear-gradient-parser.scss +41 -0
  91. data/lib/growbot/web/views/sass/bourbon/helpers/_linear-positions-parser.scss +61 -0
  92. data/lib/growbot/web/views/sass/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
  93. data/lib/growbot/web/views/sass/bourbon/helpers/_radial-arg-parser.scss +69 -0
  94. data/lib/growbot/web/views/sass/bourbon/helpers/_radial-gradient-parser.scss +50 -0
  95. data/lib/growbot/web/views/sass/bourbon/helpers/_radial-positions-parser.scss +18 -0
  96. data/lib/growbot/web/views/sass/bourbon/helpers/_render-gradients.scss +26 -0
  97. data/lib/growbot/web/views/sass/bourbon/helpers/_shape-size-stripper.scss +10 -0
  98. data/lib/growbot/web/views/sass/bourbon/helpers/_str-to-num.scss +50 -0
  99. data/lib/growbot/web/views/sass/bourbon/settings/_prefixer.scss +6 -0
  100. data/lib/growbot/web/views/sass/bourbon/settings/_px-to-em.scss +1 -0
  101. data/lib/growbot/web/views/sass/neat/_neat-helpers.scss +7 -0
  102. data/lib/growbot/web/views/sass/neat/_neat.scss +21 -0
  103. data/lib/growbot/web/views/sass/neat/functions/_new-breakpoint.scss +16 -0
  104. data/lib/growbot/web/views/sass/neat/functions/_private.scss +125 -0
  105. data/lib/growbot/web/views/sass/neat/grid/_fill-parent.scss +7 -0
  106. data/lib/growbot/web/views/sass/neat/grid/_grid.scss +5 -0
  107. data/lib/growbot/web/views/sass/neat/grid/_media.scss +38 -0
  108. data/lib/growbot/web/views/sass/neat/grid/_omega.scss +61 -0
  109. data/lib/growbot/web/views/sass/neat/grid/_outer-container.scss +8 -0
  110. data/lib/growbot/web/views/sass/neat/grid/_pad.scss +8 -0
  111. data/lib/growbot/web/views/sass/neat/grid/_private.scss +43 -0
  112. data/lib/growbot/web/views/sass/neat/grid/_reset.scss +12 -0
  113. data/lib/growbot/web/views/sass/neat/grid/_row.scss +17 -0
  114. data/lib/growbot/web/views/sass/neat/grid/_shift.scss +16 -0
  115. data/lib/growbot/web/views/sass/neat/grid/_span-columns.scss +43 -0
  116. data/lib/growbot/web/views/sass/neat/grid/_to-deprecate.scss +57 -0
  117. data/lib/growbot/web/views/sass/neat/grid/_visual-grid.scss +41 -0
  118. data/lib/growbot/web/views/sass/neat/settings/_grid.scss +7 -0
  119. data/lib/growbot/web/views/sass/neat/settings/_visual-grid.scss +5 -0
  120. data/lib/growbot/web/views/sass/refills/_navigation.scss +190 -0
  121. data/lib/growbot/web/views/sass/refills/_refills.scss +1 -0
  122. data/lib/growbot/web/views/sass/widgets/_big-number.scss +21 -0
  123. data/lib/growbot/web/views/sass/widgets/_widgets.scss +1 -0
  124. data/public/javascripts/app.js +150 -0
  125. data/public/stylesheets/app.css +1 -0
  126. data/public/vendor/colorbrewer/.bower.json +35 -0
  127. data/public/vendor/colorbrewer/LICENSE +38 -0
  128. data/public/vendor/colorbrewer/README.md +7 -0
  129. data/public/vendor/colorbrewer/bower.json +23 -0
  130. data/public/vendor/colorbrewer/colorbrewer.css +1690 -0
  131. data/public/vendor/colorbrewer/colorbrewer.js +302 -0
  132. data/public/vendor/d3/.bower.json +35 -0
  133. data/public/vendor/d3/CONTRIBUTING.md +25 -0
  134. data/public/vendor/d3/LICENSE +26 -0
  135. data/public/vendor/d3/README.md +9 -0
  136. data/public/vendor/d3/bower.json +24 -0
  137. data/public/vendor/d3/composer.json +19 -0
  138. data/public/vendor/d3/d3.js +9263 -0
  139. data/public/vendor/d3/d3.min.js +5 -0
  140. data/public/vendor/jquery/.bower.json +38 -0
  141. data/public/vendor/jquery/MIT-LICENSE.txt +21 -0
  142. data/public/vendor/jquery/bower.json +27 -0
  143. data/public/vendor/jquery/dist/jquery.js +9190 -0
  144. data/public/vendor/jquery/dist/jquery.min.js +5 -0
  145. data/public/vendor/jquery/dist/jquery.min.map +1 -0
  146. data/public/vendor/jquery/src/ajax.js +806 -0
  147. data/public/vendor/jquery/src/ajax/jsonp.js +89 -0
  148. data/public/vendor/jquery/src/ajax/load.js +75 -0
  149. data/public/vendor/jquery/src/ajax/parseJSON.js +13 -0
  150. data/public/vendor/jquery/src/ajax/parseXML.js +28 -0
  151. data/public/vendor/jquery/src/ajax/script.js +64 -0
  152. data/public/vendor/jquery/src/ajax/var/nonce.js +5 -0
  153. data/public/vendor/jquery/src/ajax/var/rquery.js +3 -0
  154. data/public/vendor/jquery/src/ajax/xhr.js +135 -0
  155. data/public/vendor/jquery/src/attributes.js +11 -0
  156. data/public/vendor/jquery/src/attributes/attr.js +143 -0
  157. data/public/vendor/jquery/src/attributes/classes.js +158 -0
  158. data/public/vendor/jquery/src/attributes/prop.js +96 -0
  159. data/public/vendor/jquery/src/attributes/support.js +35 -0
  160. data/public/vendor/jquery/src/attributes/val.js +163 -0
  161. data/public/vendor/jquery/src/callbacks.js +205 -0
  162. data/public/vendor/jquery/src/core.js +498 -0
  163. data/public/vendor/jquery/src/core/access.js +60 -0
  164. data/public/vendor/jquery/src/core/init.js +123 -0
  165. data/public/vendor/jquery/src/core/parseHTML.js +39 -0
  166. data/public/vendor/jquery/src/core/ready.js +97 -0
  167. data/public/vendor/jquery/src/core/var/rsingleTag.js +4 -0
  168. data/public/vendor/jquery/src/css.js +451 -0
  169. data/public/vendor/jquery/src/css/addGetHookIf.js +24 -0
  170. data/public/vendor/jquery/src/css/curCSS.js +57 -0
  171. data/public/vendor/jquery/src/css/defaultDisplay.js +70 -0
  172. data/public/vendor/jquery/src/css/hiddenVisibleSelectors.js +15 -0
  173. data/public/vendor/jquery/src/css/support.js +91 -0
  174. data/public/vendor/jquery/src/css/swap.js +28 -0
  175. data/public/vendor/jquery/src/css/var/cssExpand.js +3 -0
  176. data/public/vendor/jquery/src/css/var/getStyles.js +5 -0
  177. data/public/vendor/jquery/src/css/var/isHidden.js +13 -0
  178. data/public/vendor/jquery/src/css/var/rmargin.js +3 -0
  179. data/public/vendor/jquery/src/css/var/rnumnonpx.js +5 -0
  180. data/public/vendor/jquery/src/data.js +179 -0
  181. data/public/vendor/jquery/src/data/Data.js +181 -0
  182. data/public/vendor/jquery/src/data/accepts.js +20 -0
  183. data/public/vendor/jquery/src/data/var/data_priv.js +5 -0
  184. data/public/vendor/jquery/src/data/var/data_user.js +5 -0
  185. data/public/vendor/jquery/src/deferred.js +149 -0
  186. data/public/vendor/jquery/src/deprecated.js +13 -0
  187. data/public/vendor/jquery/src/dimensions.js +50 -0
  188. data/public/vendor/jquery/src/effects.js +649 -0
  189. data/public/vendor/jquery/src/effects/Tween.js +114 -0
  190. data/public/vendor/jquery/src/effects/animatedSelector.js +13 -0
  191. data/public/vendor/jquery/src/event.js +868 -0
  192. data/public/vendor/jquery/src/event/alias.js +39 -0
  193. data/public/vendor/jquery/src/event/support.js +9 -0
  194. data/public/vendor/jquery/src/exports/amd.js +24 -0
  195. data/public/vendor/jquery/src/exports/global.js +32 -0
  196. data/public/vendor/jquery/src/intro.js +44 -0
  197. data/public/vendor/jquery/src/jquery.js +36 -0
  198. data/public/vendor/jquery/src/manipulation.js +582 -0
  199. data/public/vendor/jquery/src/manipulation/_evalUrl.js +18 -0
  200. data/public/vendor/jquery/src/manipulation/support.js +31 -0
  201. data/public/vendor/jquery/src/manipulation/var/rcheckableType.js +3 -0
  202. data/public/vendor/jquery/src/offset.js +204 -0
  203. data/public/vendor/jquery/src/outro.js +1 -0
  204. data/public/vendor/jquery/src/queue.js +142 -0
  205. data/public/vendor/jquery/src/queue/delay.js +22 -0
  206. data/public/vendor/jquery/src/selector-native.js +172 -0
  207. data/public/vendor/jquery/src/selector-sizzle.js +14 -0
  208. data/public/vendor/jquery/src/selector.js +1 -0
  209. data/public/vendor/jquery/src/serialize.js +111 -0
  210. data/public/vendor/jquery/src/sizzle/dist/sizzle.js +2044 -0
  211. data/public/vendor/jquery/src/sizzle/dist/sizzle.min.js +3 -0
  212. data/public/vendor/jquery/src/sizzle/dist/sizzle.min.map +1 -0
  213. data/public/vendor/jquery/src/traversing.js +200 -0
  214. data/public/vendor/jquery/src/traversing/findFilter.js +100 -0
  215. data/public/vendor/jquery/src/traversing/var/rneedsContext.js +6 -0
  216. data/public/vendor/jquery/src/var/arr.js +3 -0
  217. data/public/vendor/jquery/src/var/class2type.js +4 -0
  218. data/public/vendor/jquery/src/var/concat.js +5 -0
  219. data/public/vendor/jquery/src/var/hasOwn.js +5 -0
  220. data/public/vendor/jquery/src/var/indexOf.js +5 -0
  221. data/public/vendor/jquery/src/var/pnum.js +3 -0
  222. data/public/vendor/jquery/src/var/push.js +5 -0
  223. data/public/vendor/jquery/src/var/rnotwhite.js +3 -0
  224. data/public/vendor/jquery/src/var/slice.js +5 -0
  225. data/public/vendor/jquery/src/var/strundefined.js +3 -0
  226. data/public/vendor/jquery/src/var/support.js +4 -0
  227. data/public/vendor/jquery/src/var/toString.js +5 -0
  228. data/public/vendor/jquery/src/wrap.js +78 -0
  229. metadata +468 -0
@@ -0,0 +1,17 @@
1
+ @mixin row($display: block, $direction: $default-layout-direction) {
2
+ @include clearfix;
3
+ $layout-direction: $direction !global;
4
+
5
+ @if $display == table {
6
+ display: table;
7
+ @include fill-parent;
8
+ table-layout: fixed;
9
+ $container-display-table: true !global;
10
+ }
11
+
12
+ @else {
13
+ display: block;
14
+ $container-display-table: false !global;
15
+ }
16
+ }
17
+
@@ -0,0 +1,16 @@
1
+ @mixin shift($n-columns: 1) {
2
+ @include shift-in-context($n-columns);
3
+ }
4
+
5
+ @mixin shift-in-context($shift: $columns of $container-columns) {
6
+ $n-columns: nth($shift, 1);
7
+ $parent-columns: container-shift($shift) !global;
8
+
9
+ $direction: get-direction($layout-direction, $default-layout-direction);
10
+ $opposite-direction: get-opposite-direction($direction);
11
+
12
+ margin-#{$opposite-direction}: $n-columns * flex-grid(1, $parent-columns) + $n-columns * flex-gutter($parent-columns);
13
+
14
+ // Reset nesting context
15
+ $parent-columns: $grid-columns !global;
16
+ }
@@ -0,0 +1,43 @@
1
+ @mixin span-columns($span: $columns of $container-columns, $display: block) {
2
+ $columns: nth($span, 1);
3
+ $container-columns: container-span($span);
4
+
5
+ // Set nesting context (used by shift())
6
+ $parent-columns: get-parent-columns($container-columns) !global;
7
+
8
+ $direction: get-direction($layout-direction, $default-layout-direction);
9
+ $opposite-direction: get-opposite-direction($direction);
10
+
11
+ $display-table: is-display-table($container-display-table, $display);
12
+
13
+ @if $display-table {
14
+ display: table-cell;
15
+ width: percentage($columns / $container-columns);
16
+ } @else {
17
+ float: #{$opposite-direction};
18
+
19
+ @if $display != no-display {
20
+ display: block;
21
+ }
22
+
23
+ @if $display == collapse {
24
+ @warn "The 'collapse' argument will be deprecated. Use 'block-collapse' instead."
25
+ }
26
+
27
+ @if $display == collapse or $display == block-collapse {
28
+ width: flex-grid($columns, $container-columns) + flex-gutter($container-columns);
29
+
30
+ &:last-child {
31
+ width: flex-grid($columns, $container-columns);
32
+ }
33
+
34
+ } @else {
35
+ margin-#{$direction}: flex-gutter($container-columns);
36
+ width: flex-grid($columns, $container-columns);
37
+
38
+ &:last-child {
39
+ margin-#{$direction}: 0;
40
+ }
41
+ }
42
+ }
43
+ }
@@ -0,0 +1,57 @@
1
+ @mixin breakpoint($query:$feature $value $columns, $total-columns: $grid-columns) {
2
+ @warn "The breakpoint() mixin was renamed to media() in Neat 1.0. Please update your project with the new syntax before the next version bump.";
3
+
4
+ @if length($query) == 1 {
5
+ @media screen and ($default-feature: nth($query, 1)) {
6
+ $default-grid-columns: $grid-columns;
7
+ $grid-columns: $total-columns;
8
+ @content;
9
+ $grid-columns: $default-grid-columns;
10
+ }
11
+ }
12
+
13
+ @else if length($query) == 2 {
14
+ @media screen and (nth($query, 1): nth($query, 2)) {
15
+ $default-grid-columns: $grid-columns;
16
+ $grid-columns: $total-columns;
17
+ @content;
18
+ $grid-columns: $default-grid-columns;
19
+ }
20
+ }
21
+
22
+ @else if length($query) == 3 {
23
+ @media screen and (nth($query, 1): nth($query, 2)) {
24
+ $default-grid-columns: $grid-columns;
25
+ $grid-columns: nth($query, 3);
26
+ @content;
27
+ $grid-columns: $default-grid-columns;
28
+ }
29
+ }
30
+
31
+ @else if length($query) == 4 {
32
+ @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) {
33
+ $default-grid-columns: $grid-columns;
34
+ $grid-columns: $total-columns;
35
+ @content;
36
+ $grid-columns: $default-grid-columns;
37
+ }
38
+ }
39
+
40
+ @else if length($query) == 5 {
41
+ @media screen and (nth($query, 1): nth($query, 2)) and (nth($query, 3): nth($query, 4)) {
42
+ $default-grid-columns: $grid-columns;
43
+ $grid-columns: nth($query, 5);
44
+ @content;
45
+ $grid-columns: $default-grid-columns;
46
+ }
47
+ }
48
+
49
+ @else {
50
+ @warn "Wrong number of arguments for breakpoint(). Read the documentation for more details.";
51
+ }
52
+ }
53
+
54
+ @mixin nth-omega($nth, $display: block, $direction: default) {
55
+ @warn "The nth-omega() mixin is deprecated. Please use omega() instead.";
56
+ @include omega($nth $display, $direction);
57
+ }
@@ -0,0 +1,41 @@
1
+ @mixin grid-column-gradient($values...) {
2
+ background-image: deprecated-webkit-gradient(linear, left top, left bottom, $values);
3
+ background-image: -webkit-linear-gradient(left, $values);
4
+ background-image: -moz-linear-gradient(left, $values);
5
+ background-image: -ms-linear-gradient(left, $values);
6
+ background-image: -o-linear-gradient(left, $values);
7
+ background-image: unquote("linear-gradient(left, #{$values})");
8
+ }
9
+
10
+ @if $visual-grid == true or $visual-grid == yes {
11
+ body:before {
12
+ content: '';
13
+ display: inline-block;
14
+ @include grid-column-gradient(gradient-stops($grid-columns));
15
+ height: 100%;
16
+ left: 0;
17
+ margin: 0 auto;
18
+ max-width: $max-width;
19
+ opacity: $visual-grid-opacity;
20
+ position: fixed;
21
+ right: 0;
22
+ width: 100%;
23
+ pointer-events: none;
24
+
25
+ @if $visual-grid-index == back {
26
+ z-index: -1;
27
+ }
28
+
29
+ @else if $visual-grid-index == front {
30
+ z-index: 9999;
31
+ }
32
+
33
+ @each $breakpoint in $visual-grid-breakpoints {
34
+ @if $breakpoint != nil {
35
+ @include media($breakpoint) {
36
+ @include grid-column-gradient(gradient-stops($grid-columns));
37
+ }
38
+ }
39
+ }
40
+ }
41
+ }
@@ -0,0 +1,7 @@
1
+ $column: golden-ratio(1em, 3) !default; // Column width
2
+ $gutter: golden-ratio(1em, 1) !default; // Gutter between each two columns
3
+ $grid-columns: 12 !default; // Total number of columns in the grid
4
+ $max-width: em(1088) !default; // Max-width of the outer container
5
+ $border-box-sizing: true !default; // Makes all elements have a border-box layout
6
+ $default-feature: min-width; // Default @media feature for the breakpoint() mixin
7
+ $default-layout-direction: LTR !default;
@@ -0,0 +1,5 @@
1
+ $visual-grid: false !default; // Display the base grid
2
+ $visual-grid-color: #EEE !default;
3
+ $visual-grid-index: back !default; // Show grid behind content (back) or overlay it over the content (front)
4
+ $visual-grid-opacity: 0.4 !default;
5
+ $visual-grid-breakpoints: () !default;
@@ -0,0 +1,190 @@
1
+ header.navigation {
2
+ $navigation-background: $dark-gray;
3
+ $navigation-color: transparentize(white, 0.3);
4
+ $navigation-color-hover: white;
5
+ $navigation-height: 60px;
6
+ $navigation-nav-button-background: $base-accent-color;
7
+ $navigation-nav-button-background-hover: lighten($navigation-background, 10);
8
+ $navigation-nav-button-border: 1px solid lighten($navigation-nav-button-background, 20);
9
+ $navigation-search-background: lighten($navigation-background, 5);
10
+ $navigation-search-border: 1px solid darken($navigation-background, 5);
11
+
12
+ background-color: $navigation-background;
13
+ border-bottom: 1px solid darken($navigation-background, 10);
14
+ font-family: $sans-serif;
15
+ height: $navigation-height;
16
+ width: 100%;
17
+ z-index: 999;
18
+
19
+ .menu-wrapper {
20
+ @include outer-container;
21
+ position: relative;
22
+ z-index: 9999;
23
+ }
24
+
25
+ .logo {
26
+ float: left;
27
+ max-height: $navigation-height;
28
+ padding-right: 2em;
29
+ color: white;
30
+ font-weight: bold;
31
+ font-size: 1.5em;
32
+ line-height: $navigation-height;
33
+
34
+
35
+ img {
36
+ max-height: $navigation-height;
37
+ padding: .8em 0;
38
+ }
39
+ }
40
+
41
+ .navigation-menu-button {
42
+ color: $navigation-color;
43
+ cursor: pointer;
44
+ display: block;
45
+ float: right;
46
+ font-family: $sans-serif;
47
+ font-weight: 700;
48
+ line-height: $navigation-height;
49
+ margin: 0;
50
+ padding-right: 1em;
51
+ text-transform: uppercase;
52
+
53
+ @include media ($large-screen) {
54
+ display: none;
55
+ }
56
+
57
+ &:hover {
58
+ color: $navigation-color-hover;
59
+ }
60
+ }
61
+
62
+ .nav {
63
+ @include media ($large-screen) {
64
+ float: left;
65
+ }
66
+ }
67
+
68
+ ul#navigation-menu {
69
+ clear: both;
70
+ -webkit-transform-style: preserve-3d;
71
+ // stop webkit flicker
72
+ display: none;
73
+ margin: 0 auto;
74
+ overflow: hidden;
75
+ padding: 0;
76
+ width: 100%;
77
+ z-index: 9999;
78
+
79
+ @include media ($large-screen) {
80
+ display: inline;
81
+ margin: 0;
82
+ padding: 0;
83
+ }
84
+ }
85
+
86
+ ul li {
87
+ background: $navigation-background;
88
+ display: block;
89
+ line-height: $navigation-height;
90
+ overflow: hidden;
91
+ padding-right: .8em;
92
+ text-align: right;
93
+ width: 100%;
94
+ z-index: 9999;
95
+
96
+ @include media ($large-screen) {
97
+ background: transparent;
98
+ display: inline;
99
+ line-height: $navigation-height;
100
+ padding-right: 2em;
101
+ text-decoration: none;
102
+ width: auto;
103
+ }
104
+
105
+ a {
106
+ font-weight: 400;
107
+ color: $navigation-color;
108
+
109
+ &:hover {
110
+ color: $navigation-color-hover;
111
+ }
112
+ }
113
+ }
114
+
115
+ .sign-up, .take-reading {
116
+ @include media ($large-screen) {
117
+ @include position(absolute, 0px 0px 0 0);
118
+ padding-right: 1em;
119
+
120
+ a {
121
+ @include transition (all 0.2s ease-in-out);
122
+ background: $navigation-nav-button-background;
123
+ border-radius: $base-border-radius;
124
+ color: white;
125
+ font-size: .8em;
126
+ font-weight: 800;
127
+ padding: .6em 1em;
128
+ text-transform: uppercase;
129
+
130
+ &:hover {
131
+ background: lighten($navigation-nav-button-background, 10);
132
+ }
133
+ }
134
+ }
135
+ }
136
+
137
+ li.navigation-search-bar {
138
+ display: none;
139
+
140
+ @include media($large-screen) {
141
+ @include position(absolute, 0px 76px 0 0);
142
+ display: inline-block;
143
+ line-height: 0 !important;
144
+ padding: 13px 30px;
145
+ // this to get around Firefox/Opera line-height "bug"
146
+ }
147
+ }
148
+
149
+ .search-bar {
150
+ $search-bar-border-color: $base-border-color;
151
+ $search-bar-border: 1px solid $search-bar-border-color;
152
+ $search-bar-background: lighten($search-bar-border-color, 10);
153
+
154
+ width: 19em;
155
+ position: relative;
156
+ display: inline-block;
157
+
158
+ input {
159
+ @include box-sizing(border-box);
160
+ display: block;
161
+ }
162
+
163
+ .search-and-submit {
164
+ position: relative;
165
+
166
+ input[type=search] {
167
+ background: $navigation-search-background;
168
+ border: $navigation-search-border;
169
+ padding: .6em .8em;
170
+ font-size: .9em;
171
+ font-style: italic;
172
+ color: $navigation-color;
173
+ border-radius: $base-border-radius * 2;
174
+ margin: 0;
175
+ }
176
+
177
+ button[type=submit] {
178
+ @include button(simple, lighten($navigation-search-background, 10));
179
+ @include position(absolute, 0.3em 0.3em 0.3em 0);
180
+ outline: none;
181
+ padding: 5px 15px;
182
+
183
+ img {
184
+ height: 12px;
185
+ opacity: .7;
186
+ }
187
+ }
188
+ }
189
+ }
190
+ }
@@ -0,0 +1 @@
1
+ @import 'navigation';
@@ -0,0 +1,21 @@
1
+ .widget.big-number {
2
+ $stats-color: $base-accent-color;
3
+
4
+ border: 2px solid $medium-gray;
5
+ background: $dark-gray;
6
+ border-radius: 1em;
7
+ padding: 0.8em 0;
8
+
9
+
10
+ text-align: center;
11
+ .number {
12
+ font-size: 3.5em;
13
+ font-weight: 800;
14
+ line-height: 0.8em;
15
+ color: $stats-color;
16
+ }
17
+ .label {
18
+ font-size: 0.7em;
19
+ color: $light-gray;
20
+ }
21
+ }
@@ -0,0 +1 @@
1
+ @import 'big-number';
@@ -0,0 +1,150 @@
1
+ (function() {
2
+ var displayError, drawAverages, drawLine, getContainerWidth, menu, menuToggle;
3
+
4
+ menu = $('#navigation-menu');
5
+
6
+ menuToggle = $('#js-mobile-menu');
7
+
8
+ alert('Hello');
9
+
10
+ menuToggle.on('click', function(e) {
11
+ e.preventDefault();
12
+ return menu.slideToggle(function() {
13
+ if (menu.is(':hidden')) {
14
+ return menu.removeAttr('style');
15
+ }
16
+ });
17
+ });
18
+
19
+ displayError = function() {
20
+ var error, text;
21
+ error = document.createElement('div');
22
+ error.classList.add('error');
23
+ text = document.createElement('span');
24
+ text.innerText = 'An error has occurred. Please try again later.';
25
+ error.appendChild(text);
26
+ return document.querySelector('.message-center').appendChild(error);
27
+ };
28
+
29
+ drawAverages = function(rawData) {
30
+ var averageLevels, data, hourAgo, totalLevels;
31
+ hourAgo = new Date();
32
+ hourAgo.setHours(hourAgo.getHours() - 1);
33
+ data = rawData.filter(function(d) {
34
+ return d.time >= hourAgo;
35
+ });
36
+ if (!data.length) {
37
+ return;
38
+ }
39
+ totalLevels = data.reduce((function(p, c) {
40
+ p.moisture += c.moisture;
41
+ p.light += c.light;
42
+ return p;
43
+ }), {
44
+ moisture: 0,
45
+ light: 0
46
+ });
47
+ averageLevels = {
48
+ moisture: Math.floor(totalLevels.moisture / data.length),
49
+ light: Math.floor(totalLevels.light / data.length)
50
+ };
51
+ d3.select('#moistureWidget .number').text(averageLevels.moisture);
52
+ return d3.select('#lightWidget .number').text(averageLevels.light);
53
+ };
54
+
55
+ getContainerWidth = function(container) {
56
+ return $(container).innerWidth();
57
+ };
58
+
59
+ drawLine = function(data, container, xKey, yKey, scales) {
60
+ var chart, h, line, m, w, width, xAxis, yAxis;
61
+ if (xKey == null) {
62
+ xKey = 'x';
63
+ }
64
+ if (yKey == null) {
65
+ yKey = 'y';
66
+ }
67
+ width = getContainerWidth(container);
68
+ m = [15, 80, 15, 80];
69
+ w = width - m[1] - m[3];
70
+ h = 400 - m[0] - m[2];
71
+ chart = d3.select(container).append('svg').attr('width', w + m[1] + m[3]).attr('height', h + m[0] + m[1]).append('g').attr('transform', "translate(" + m[3] + ", " + m[0] + ")");
72
+ scales.x.range([0, w]);
73
+ scales.y.range([0, h]);
74
+ xAxis = d3.svg.axis().scale(scales.x);
75
+ yAxis = d3.svg.axis().scale(scales.y).orient('left');
76
+ chart.append('g').attr('class', 'x axis').attr('transform', "translate(0, " + h + ")").call(xAxis);
77
+ chart.append('g').attr('class', 'y axis').attr('transform', "translate(0, 0)").call(yAxis);
78
+ line = d3.svg.line().x(function(d) {
79
+ return scales.x(d[xKey]);
80
+ }).y(function(d) {
81
+ return scales.y(d[yKey]);
82
+ });
83
+ return chart.append('path').attr('d', line(data));
84
+ };
85
+
86
+ d3.json('/data.json').get(function(error, data) {
87
+ var chart, colorScale, h, lightLine, m, max, min, moistureLine, scales, w, width, xAxis, yAxis;
88
+ data = data.map(function(d) {
89
+ d.time = new Date(d.time);
90
+ d.x = d.time;
91
+ return d;
92
+ });
93
+ min = {
94
+ time: d3.min(data, function(d) {
95
+ return d.time;
96
+ }),
97
+ light: d3.min(data, function(d) {
98
+ return d.light;
99
+ }),
100
+ moisture: d3.min(data, function(d) {
101
+ return d.moisture;
102
+ })
103
+ };
104
+ max = {
105
+ time: d3.max(data, function(d) {
106
+ return d.time;
107
+ }),
108
+ light: d3.max(data, function(d) {
109
+ return d.light;
110
+ }),
111
+ moisture: d3.max(data, function(d) {
112
+ return d.moisture;
113
+ })
114
+ };
115
+ drawAverages(data);
116
+ width = getContainerWidth('#lineChart');
117
+ m = [15, 80, 15, 80];
118
+ w = width - m[1] - m[3];
119
+ h = 300 - m[0] - m[2];
120
+ scales = {
121
+ x: d3.time.scale().domain([min.time, max.time]).range([0, w]),
122
+ y: d3.scale.linear().range([0, h])
123
+ };
124
+ if (max.light > max.moisture) {
125
+ scales.y.domain([max.light, 0]);
126
+ } else {
127
+ scales.y.domain([max.moisture, 0]);
128
+ }
129
+ chart = d3.select('#lineChart').append('svg').attr('width', w + m[1] + m[3]).attr('height', h + m[0] + m[1]).append('g').attr('transform', "translate(" + m[3] + ", " + m[0] + ")");
130
+ xAxis = d3.svg.axis().scale(scales.x);
131
+ yAxis = d3.svg.axis().scale(scales.y).orient('left');
132
+ chart.append('g').attr('class', 'x axis').attr('transform', "translate(0, " + h + ")").call(xAxis);
133
+ chart.append('g').attr('class', 'y axis').attr('transform', 'translate(0, 0)').call(yAxis);
134
+ moistureLine = d3.svg.line().x(function(d) {
135
+ return scales.x(d.time);
136
+ }).y(function(d) {
137
+ return scales.y(d.moisture);
138
+ });
139
+ lightLine = d3.svg.line().x(function(d) {
140
+ return scales.x(d.time);
141
+ }).y(function(d) {
142
+ return scales.y(d.light);
143
+ });
144
+ colorScale = d3.scale.category10();
145
+ console.log(colorScale);
146
+ chart.append('path').attr('d', moistureLine(data)).style('stroke', colorScale(0));
147
+ return chart.append('path').attr('d', lightLine(data)).style('stroke', colorScale(1));
148
+ });
149
+
150
+ }).call(this);