growbot-web 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.bowerrc +3 -0
- data/.gitignore +22 -0
- data/Gemfile +11 -0
- data/LICENSE.txt +22 -0
- data/README.md +35 -0
- data/Rakefile +39 -0
- data/arduino_data.txt +6137 -0
- data/bower.json +19 -0
- data/config.ru +13 -0
- data/growbot-web.gemspec +35 -0
- data/lib/growbot/web.rb +6 -0
- data/lib/growbot/web/app.rb +49 -0
- data/lib/growbot/web/data.rb +42 -0
- data/lib/growbot/web/env.rb +9 -0
- data/lib/growbot/web/version.rb +5 -0
- data/lib/growbot/web/views/coffee/app.coffee +131 -0
- data/lib/growbot/web/views/index.haml +10 -0
- data/lib/growbot/web/views/layout.haml +20 -0
- data/lib/growbot/web/views/sass/app.scss +59 -0
- data/lib/growbot/web/views/sass/bitters/_bitters.scss +16 -0
- data/lib/growbot/web/views/sass/bitters/_flashes.scss +11 -0
- data/lib/growbot/web/views/sass/bitters/_forms.scss +95 -0
- data/lib/growbot/web/views/sass/bitters/_grid-settings.scss +14 -0
- data/lib/growbot/web/views/sass/bitters/_lists.scss +31 -0
- data/lib/growbot/web/views/sass/bitters/_tables.scss +22 -0
- data/lib/growbot/web/views/sass/bitters/_typography.scss +104 -0
- data/lib/growbot/web/views/sass/bitters/_variables.scss +43 -0
- data/lib/growbot/web/views/sass/bitters/extends/_base.scss +1 -0
- data/lib/growbot/web/views/sass/bitters/extends/_button.scss +7 -0
- data/lib/growbot/web/views/sass/bitters/mixins/_base.scss +1 -0
- data/lib/growbot/web/views/sass/bitters/mixins/_flash.scss +15 -0
- data/lib/growbot/web/views/sass/bourbon/_bourbon-deprecated-upcoming.scss +8 -0
- data/lib/growbot/web/views/sass/bourbon/_bourbon.scss +78 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_button.scss +374 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_clearfix.scss +23 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_directional-values.scss +111 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_ellipsis.scss +7 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_font-family.scss +5 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_hide-text.scss +10 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_html5-input-types.scss +86 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_position.scss +32 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_prefixer.scss +45 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_retina-image.scss +31 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_size.scss +16 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_timing-functions.scss +32 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_triangle.scss +83 -0
- data/lib/growbot/web/views/sass/bourbon/addons/_word-wrap.scss +8 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_animation.scss +52 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_appearance.scss +3 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_backface-visibility.scss +6 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_background-image.scss +42 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_background.scss +55 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_border-image.scss +59 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_border-radius.scss +22 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_box-sizing.scss +4 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_calc.scss +4 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_columns.scss +47 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_filter.scss +5 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_flex-box.scss +321 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_font-face.scss +23 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_font-feature-settings.scss +10 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_hidpi-media-query.scss +10 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_hyphens.scss +4 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_image-rendering.scss +14 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_keyframes.scss +35 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_linear-gradient.scss +38 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_perspective.scss +8 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_placeholder.scss +8 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_radial-gradient.scss +39 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_transform.scss +15 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_transition.scss +77 -0
- data/lib/growbot/web/views/sass/bourbon/css3/_user-select.scss +3 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_assign.scss +11 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_color-lightness.scss +13 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_flex-grid.scss +39 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_golden-ratio.scss +3 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_grid-width.scss +13 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_modular-scale.scss +66 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_px-to-em.scss +13 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_px-to-rem.scss +15 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_strip-units.scss +5 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_tint-shade.scss +9 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_transition-property-name.scss +22 -0
- data/lib/growbot/web/views/sass/bourbon/functions/_unpack.scss +17 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_convert-units.scss +15 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_gradient-positions-parser.scss +13 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_is-num.scss +8 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_linear-angle-parser.scss +25 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_linear-gradient-parser.scss +41 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_linear-positions-parser.scss +61 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_radial-arg-parser.scss +69 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_radial-gradient-parser.scss +50 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_radial-positions-parser.scss +18 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_render-gradients.scss +26 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_shape-size-stripper.scss +10 -0
- data/lib/growbot/web/views/sass/bourbon/helpers/_str-to-num.scss +50 -0
- data/lib/growbot/web/views/sass/bourbon/settings/_prefixer.scss +6 -0
- data/lib/growbot/web/views/sass/bourbon/settings/_px-to-em.scss +1 -0
- data/lib/growbot/web/views/sass/neat/_neat-helpers.scss +7 -0
- data/lib/growbot/web/views/sass/neat/_neat.scss +21 -0
- data/lib/growbot/web/views/sass/neat/functions/_new-breakpoint.scss +16 -0
- data/lib/growbot/web/views/sass/neat/functions/_private.scss +125 -0
- data/lib/growbot/web/views/sass/neat/grid/_fill-parent.scss +7 -0
- data/lib/growbot/web/views/sass/neat/grid/_grid.scss +5 -0
- data/lib/growbot/web/views/sass/neat/grid/_media.scss +38 -0
- data/lib/growbot/web/views/sass/neat/grid/_omega.scss +61 -0
- data/lib/growbot/web/views/sass/neat/grid/_outer-container.scss +8 -0
- data/lib/growbot/web/views/sass/neat/grid/_pad.scss +8 -0
- data/lib/growbot/web/views/sass/neat/grid/_private.scss +43 -0
- data/lib/growbot/web/views/sass/neat/grid/_reset.scss +12 -0
- data/lib/growbot/web/views/sass/neat/grid/_row.scss +17 -0
- data/lib/growbot/web/views/sass/neat/grid/_shift.scss +16 -0
- data/lib/growbot/web/views/sass/neat/grid/_span-columns.scss +43 -0
- data/lib/growbot/web/views/sass/neat/grid/_to-deprecate.scss +57 -0
- data/lib/growbot/web/views/sass/neat/grid/_visual-grid.scss +41 -0
- data/lib/growbot/web/views/sass/neat/settings/_grid.scss +7 -0
- data/lib/growbot/web/views/sass/neat/settings/_visual-grid.scss +5 -0
- data/lib/growbot/web/views/sass/refills/_navigation.scss +190 -0
- data/lib/growbot/web/views/sass/refills/_refills.scss +1 -0
- data/lib/growbot/web/views/sass/widgets/_big-number.scss +21 -0
- data/lib/growbot/web/views/sass/widgets/_widgets.scss +1 -0
- data/public/javascripts/app.js +150 -0
- data/public/stylesheets/app.css +1 -0
- data/public/vendor/colorbrewer/.bower.json +35 -0
- data/public/vendor/colorbrewer/LICENSE +38 -0
- data/public/vendor/colorbrewer/README.md +7 -0
- data/public/vendor/colorbrewer/bower.json +23 -0
- data/public/vendor/colorbrewer/colorbrewer.css +1690 -0
- data/public/vendor/colorbrewer/colorbrewer.js +302 -0
- data/public/vendor/d3/.bower.json +35 -0
- data/public/vendor/d3/CONTRIBUTING.md +25 -0
- data/public/vendor/d3/LICENSE +26 -0
- data/public/vendor/d3/README.md +9 -0
- data/public/vendor/d3/bower.json +24 -0
- data/public/vendor/d3/composer.json +19 -0
- data/public/vendor/d3/d3.js +9263 -0
- data/public/vendor/d3/d3.min.js +5 -0
- data/public/vendor/jquery/.bower.json +38 -0
- data/public/vendor/jquery/MIT-LICENSE.txt +21 -0
- data/public/vendor/jquery/bower.json +27 -0
- data/public/vendor/jquery/dist/jquery.js +9190 -0
- data/public/vendor/jquery/dist/jquery.min.js +5 -0
- data/public/vendor/jquery/dist/jquery.min.map +1 -0
- data/public/vendor/jquery/src/ajax.js +806 -0
- data/public/vendor/jquery/src/ajax/jsonp.js +89 -0
- data/public/vendor/jquery/src/ajax/load.js +75 -0
- data/public/vendor/jquery/src/ajax/parseJSON.js +13 -0
- data/public/vendor/jquery/src/ajax/parseXML.js +28 -0
- data/public/vendor/jquery/src/ajax/script.js +64 -0
- data/public/vendor/jquery/src/ajax/var/nonce.js +5 -0
- data/public/vendor/jquery/src/ajax/var/rquery.js +3 -0
- data/public/vendor/jquery/src/ajax/xhr.js +135 -0
- data/public/vendor/jquery/src/attributes.js +11 -0
- data/public/vendor/jquery/src/attributes/attr.js +143 -0
- data/public/vendor/jquery/src/attributes/classes.js +158 -0
- data/public/vendor/jquery/src/attributes/prop.js +96 -0
- data/public/vendor/jquery/src/attributes/support.js +35 -0
- data/public/vendor/jquery/src/attributes/val.js +163 -0
- data/public/vendor/jquery/src/callbacks.js +205 -0
- data/public/vendor/jquery/src/core.js +498 -0
- data/public/vendor/jquery/src/core/access.js +60 -0
- data/public/vendor/jquery/src/core/init.js +123 -0
- data/public/vendor/jquery/src/core/parseHTML.js +39 -0
- data/public/vendor/jquery/src/core/ready.js +97 -0
- data/public/vendor/jquery/src/core/var/rsingleTag.js +4 -0
- data/public/vendor/jquery/src/css.js +451 -0
- data/public/vendor/jquery/src/css/addGetHookIf.js +24 -0
- data/public/vendor/jquery/src/css/curCSS.js +57 -0
- data/public/vendor/jquery/src/css/defaultDisplay.js +70 -0
- data/public/vendor/jquery/src/css/hiddenVisibleSelectors.js +15 -0
- data/public/vendor/jquery/src/css/support.js +91 -0
- data/public/vendor/jquery/src/css/swap.js +28 -0
- data/public/vendor/jquery/src/css/var/cssExpand.js +3 -0
- data/public/vendor/jquery/src/css/var/getStyles.js +5 -0
- data/public/vendor/jquery/src/css/var/isHidden.js +13 -0
- data/public/vendor/jquery/src/css/var/rmargin.js +3 -0
- data/public/vendor/jquery/src/css/var/rnumnonpx.js +5 -0
- data/public/vendor/jquery/src/data.js +179 -0
- data/public/vendor/jquery/src/data/Data.js +181 -0
- data/public/vendor/jquery/src/data/accepts.js +20 -0
- data/public/vendor/jquery/src/data/var/data_priv.js +5 -0
- data/public/vendor/jquery/src/data/var/data_user.js +5 -0
- data/public/vendor/jquery/src/deferred.js +149 -0
- data/public/vendor/jquery/src/deprecated.js +13 -0
- data/public/vendor/jquery/src/dimensions.js +50 -0
- data/public/vendor/jquery/src/effects.js +649 -0
- data/public/vendor/jquery/src/effects/Tween.js +114 -0
- data/public/vendor/jquery/src/effects/animatedSelector.js +13 -0
- data/public/vendor/jquery/src/event.js +868 -0
- data/public/vendor/jquery/src/event/alias.js +39 -0
- data/public/vendor/jquery/src/event/support.js +9 -0
- data/public/vendor/jquery/src/exports/amd.js +24 -0
- data/public/vendor/jquery/src/exports/global.js +32 -0
- data/public/vendor/jquery/src/intro.js +44 -0
- data/public/vendor/jquery/src/jquery.js +36 -0
- data/public/vendor/jquery/src/manipulation.js +582 -0
- data/public/vendor/jquery/src/manipulation/_evalUrl.js +18 -0
- data/public/vendor/jquery/src/manipulation/support.js +31 -0
- data/public/vendor/jquery/src/manipulation/var/rcheckableType.js +3 -0
- data/public/vendor/jquery/src/offset.js +204 -0
- data/public/vendor/jquery/src/outro.js +1 -0
- data/public/vendor/jquery/src/queue.js +142 -0
- data/public/vendor/jquery/src/queue/delay.js +22 -0
- data/public/vendor/jquery/src/selector-native.js +172 -0
- data/public/vendor/jquery/src/selector-sizzle.js +14 -0
- data/public/vendor/jquery/src/selector.js +1 -0
- data/public/vendor/jquery/src/serialize.js +111 -0
- data/public/vendor/jquery/src/sizzle/dist/sizzle.js +2044 -0
- data/public/vendor/jquery/src/sizzle/dist/sizzle.min.js +3 -0
- data/public/vendor/jquery/src/sizzle/dist/sizzle.min.map +1 -0
- data/public/vendor/jquery/src/traversing.js +200 -0
- data/public/vendor/jquery/src/traversing/findFilter.js +100 -0
- data/public/vendor/jquery/src/traversing/var/rneedsContext.js +6 -0
- data/public/vendor/jquery/src/var/arr.js +3 -0
- data/public/vendor/jquery/src/var/class2type.js +4 -0
- data/public/vendor/jquery/src/var/concat.js +5 -0
- data/public/vendor/jquery/src/var/hasOwn.js +5 -0
- data/public/vendor/jquery/src/var/indexOf.js +5 -0
- data/public/vendor/jquery/src/var/pnum.js +3 -0
- data/public/vendor/jquery/src/var/push.js +5 -0
- data/public/vendor/jquery/src/var/rnotwhite.js +3 -0
- data/public/vendor/jquery/src/var/slice.js +5 -0
- data/public/vendor/jquery/src/var/strundefined.js +3 -0
- data/public/vendor/jquery/src/var/support.js +4 -0
- data/public/vendor/jquery/src/var/toString.js +5 -0
- data/public/vendor/jquery/src/wrap.js +78 -0
- 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);
|