hanuman 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +89 -0
- data/_data/author.yml +8 -0
- data/_data/navigation.yml +5 -0
- data/_includes/analytics.html +15 -0
- data/_includes/footer.html +61 -0
- data/_includes/head.html +68 -0
- data/_includes/header.html +58 -0
- data/_includes/icon-github.html +3 -0
- data/_includes/icon-github.svg +1 -0
- data/_includes/icon-twitter.html +3 -0
- data/_includes/icon-twitter.svg +1 -0
- data/_includes/metadata.json +30 -0
- data/_includes/styles.scss +727 -0
- data/_layouts/default.html +13 -0
- data/_layouts/page.html +16 -0
- data/_layouts/post.html +153 -0
- data/_sass/_syntax-highlighting.scss +70 -0
- data/_sass/bourbon/_bourbon-deprecated-upcoming.scss +8 -0
- data/_sass/bourbon/_bourbon.scss +79 -0
- data/_sass/bourbon/addons/_button.scss +374 -0
- data/_sass/bourbon/addons/_clearfix.scss +23 -0
- data/_sass/bourbon/addons/_directional-values.scss +111 -0
- data/_sass/bourbon/addons/_ellipsis.scss +7 -0
- data/_sass/bourbon/addons/_font-family.scss +5 -0
- data/_sass/bourbon/addons/_hide-text.scss +10 -0
- data/_sass/bourbon/addons/_html5-input-types.scss +86 -0
- data/_sass/bourbon/addons/_position.scss +32 -0
- data/_sass/bourbon/addons/_prefixer.scss +45 -0
- data/_sass/bourbon/addons/_retina-image.scss +31 -0
- data/_sass/bourbon/addons/_size.scss +16 -0
- data/_sass/bourbon/addons/_timing-functions.scss +32 -0
- data/_sass/bourbon/addons/_triangle.scss +83 -0
- data/_sass/bourbon/addons/_word-wrap.scss +8 -0
- data/_sass/bourbon/css3/_animation.scss +52 -0
- data/_sass/bourbon/css3/_appearance.scss +3 -0
- data/_sass/bourbon/css3/_backface-visibility.scss +6 -0
- data/_sass/bourbon/css3/_background-image.scss +42 -0
- data/_sass/bourbon/css3/_background.scss +55 -0
- data/_sass/bourbon/css3/_border-image.scss +59 -0
- data/_sass/bourbon/css3/_border-radius.scss +22 -0
- data/_sass/bourbon/css3/_box-sizing.scss +4 -0
- data/_sass/bourbon/css3/_calc.scss +4 -0
- data/_sass/bourbon/css3/_columns.scss +47 -0
- data/_sass/bourbon/css3/_filter.scss +5 -0
- data/_sass/bourbon/css3/_flex-box.scss +321 -0
- data/_sass/bourbon/css3/_font-face.scss +23 -0
- data/_sass/bourbon/css3/_font-feature-settings.scss +10 -0
- data/_sass/bourbon/css3/_hidpi-media-query.scss +10 -0
- data/_sass/bourbon/css3/_hyphens.scss +4 -0
- data/_sass/bourbon/css3/_image-rendering.scss +14 -0
- data/_sass/bourbon/css3/_keyframes.scss +35 -0
- data/_sass/bourbon/css3/_linear-gradient.scss +38 -0
- data/_sass/bourbon/css3/_perspective.scss +8 -0
- data/_sass/bourbon/css3/_placeholder.scss +8 -0
- data/_sass/bourbon/css3/_radial-gradient.scss +39 -0
- data/_sass/bourbon/css3/_transform.scss +15 -0
- data/_sass/bourbon/css3/_transition.scss +77 -0
- data/_sass/bourbon/css3/_user-select.scss +3 -0
- data/_sass/bourbon/functions/_assign.scss +11 -0
- data/_sass/bourbon/functions/_color-lightness.scss +13 -0
- data/_sass/bourbon/functions/_flex-grid.scss +39 -0
- data/_sass/bourbon/functions/_golden-ratio.scss +3 -0
- data/_sass/bourbon/functions/_grid-width.scss +13 -0
- data/_sass/bourbon/functions/_modular-scale.scss +66 -0
- data/_sass/bourbon/functions/_px-to-em.scss +13 -0
- data/_sass/bourbon/functions/_px-to-rem.scss +15 -0
- data/_sass/bourbon/functions/_strip-units.scss +5 -0
- data/_sass/bourbon/functions/_tint-shade.scss +9 -0
- data/_sass/bourbon/functions/_transition-property-name.scss +22 -0
- data/_sass/bourbon/functions/_unpack.scss +17 -0
- data/_sass/bourbon/helpers/_convert-units.scss +15 -0
- data/_sass/bourbon/helpers/_gradient-positions-parser.scss +13 -0
- data/_sass/bourbon/helpers/_is-num.scss +8 -0
- data/_sass/bourbon/helpers/_linear-angle-parser.scss +25 -0
- data/_sass/bourbon/helpers/_linear-gradient-parser.scss +41 -0
- data/_sass/bourbon/helpers/_linear-positions-parser.scss +61 -0
- data/_sass/bourbon/helpers/_linear-side-corner-parser.scss +31 -0
- data/_sass/bourbon/helpers/_radial-arg-parser.scss +69 -0
- data/_sass/bourbon/helpers/_radial-gradient-parser.scss +50 -0
- data/_sass/bourbon/helpers/_radial-positions-parser.scss +18 -0
- data/_sass/bourbon/helpers/_render-gradients.scss +26 -0
- data/_sass/bourbon/helpers/_shape-size-stripper.scss +10 -0
- data/_sass/bourbon/helpers/_str-to-num.scss +50 -0
- data/_sass/bourbon/settings/_asset-pipeline.scss +1 -0
- data/_sass/bourbon/settings/_prefixer.scss +6 -0
- data/_sass/bourbon/settings/_px-to-em.scss +1 -0
- data/assets/images/favicon.png +0 -0
- data/assets/images/hanuman.png +0 -0
- data/assets/images/logo.png +0 -0
- data/assets/images/radhakrishna.jpg +0 -0
- data/assets/images/shiva.jpg +0 -0
- data/assets/images/tree.jpg +0 -0
- metadata +208 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
// Order of the includes matters, and it is: normal, bold, italic, bold+italic.
|
2
|
+
|
3
|
+
@mixin font-face($font-family, $file-path, $weight: normal, $style: normal, $asset-pipeline: $asset-pipeline) {
|
4
|
+
@font-face {
|
5
|
+
font-family: $font-family;
|
6
|
+
font-weight: $weight;
|
7
|
+
font-style: $style;
|
8
|
+
|
9
|
+
@if $asset-pipeline == true {
|
10
|
+
src: font-url('#{$file-path}.eot');
|
11
|
+
src: font-url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
|
12
|
+
font-url('#{$file-path}.woff') format('woff'),
|
13
|
+
font-url('#{$file-path}.ttf') format('truetype'),
|
14
|
+
font-url('#{$file-path}.svg##{$font-family}') format('svg');
|
15
|
+
} @else {
|
16
|
+
src: url('#{$file-path}.eot');
|
17
|
+
src: url('#{$file-path}.eot?#iefix') format('embedded-opentype'),
|
18
|
+
url('#{$file-path}.woff') format('woff'),
|
19
|
+
url('#{$file-path}.ttf') format('truetype'),
|
20
|
+
url('#{$file-path}.svg##{$font-family}') format('svg');
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
// Font feature settings mixin and property default.
|
2
|
+
// Examples: @include font-feature-settings("liga");
|
3
|
+
// @include font-feature-settings("lnum" false);
|
4
|
+
// @include font-feature-settings("pnum" 1, "kern" 0);
|
5
|
+
// @include font-feature-settings("ss01", "ss02");
|
6
|
+
|
7
|
+
@mixin font-feature-settings($settings...) {
|
8
|
+
@if length($settings) == 0 { $settings: none; }
|
9
|
+
@include prefixer(font-feature-settings, $settings, webkit moz ms spec);
|
10
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
// HiDPI mixin. Default value set to 1.3 to target Google Nexus 7 (http://bjango.com/articles/min-device-pixel-ratio/)
|
2
|
+
@mixin hidpi($ratio: 1.3) {
|
3
|
+
@media only screen and (-webkit-min-device-pixel-ratio: $ratio),
|
4
|
+
only screen and (min--moz-device-pixel-ratio: $ratio),
|
5
|
+
only screen and (-o-min-device-pixel-ratio: #{$ratio}/1),
|
6
|
+
only screen and (min-resolution: #{round($ratio*96)}dpi),
|
7
|
+
only screen and (min-resolution: #{$ratio}dppx) {
|
8
|
+
@content;
|
9
|
+
}
|
10
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
@mixin image-rendering ($mode:auto) {
|
2
|
+
|
3
|
+
@if ($mode == crisp-edges) {
|
4
|
+
-ms-interpolation-mode: nearest-neighbor; // IE8+
|
5
|
+
image-rendering: -moz-crisp-edges;
|
6
|
+
image-rendering: -o-crisp-edges;
|
7
|
+
image-rendering: -webkit-optimize-contrast;
|
8
|
+
image-rendering: crisp-edges;
|
9
|
+
}
|
10
|
+
|
11
|
+
@else {
|
12
|
+
image-rendering: $mode;
|
13
|
+
}
|
14
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
// Adds keyframes blocks for supported prefixes, removing redundant prefixes in the block's content
|
2
|
+
@mixin keyframes($name) {
|
3
|
+
$original-prefix-for-webkit: $prefix-for-webkit;
|
4
|
+
$original-prefix-for-mozilla: $prefix-for-mozilla;
|
5
|
+
$original-prefix-for-microsoft: $prefix-for-microsoft;
|
6
|
+
$original-prefix-for-opera: $prefix-for-opera;
|
7
|
+
$original-prefix-for-spec: $prefix-for-spec;
|
8
|
+
|
9
|
+
@if $original-prefix-for-webkit {
|
10
|
+
@include disable-prefix-for-all();
|
11
|
+
$prefix-for-webkit: true !global;
|
12
|
+
@-webkit-keyframes #{$name} {
|
13
|
+
@content;
|
14
|
+
}
|
15
|
+
}
|
16
|
+
@if $original-prefix-for-mozilla {
|
17
|
+
@include disable-prefix-for-all();
|
18
|
+
$prefix-for-mozilla: true !global;
|
19
|
+
@-moz-keyframes #{$name} {
|
20
|
+
@content;
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
$prefix-for-webkit: $original-prefix-for-webkit !global;
|
25
|
+
$prefix-for-mozilla: $original-prefix-for-mozilla !global;
|
26
|
+
$prefix-for-microsoft: $original-prefix-for-microsoft !global;
|
27
|
+
$prefix-for-opera: $original-prefix-for-opera !global;
|
28
|
+
$prefix-for-spec: $original-prefix-for-spec !global;
|
29
|
+
|
30
|
+
@if $original-prefix-for-spec {
|
31
|
+
@keyframes #{$name} {
|
32
|
+
@content;
|
33
|
+
}
|
34
|
+
}
|
35
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
@mixin linear-gradient($pos, $G1, $G2: null,
|
2
|
+
$G3: null, $G4: null,
|
3
|
+
$G5: null, $G6: null,
|
4
|
+
$G7: null, $G8: null,
|
5
|
+
$G9: null, $G10: null,
|
6
|
+
$fallback: null) {
|
7
|
+
// Detect what type of value exists in $pos
|
8
|
+
$pos-type: type-of(nth($pos, 1));
|
9
|
+
$pos-spec: null;
|
10
|
+
$pos-degree: null;
|
11
|
+
|
12
|
+
// If $pos is missing from mixin, reassign vars and add default position
|
13
|
+
@if ($pos-type == color) or (nth($pos, 1) == "transparent") {
|
14
|
+
$G10: $G9; $G9: $G8; $G8: $G7; $G7: $G6; $G6: $G5;
|
15
|
+
$G5: $G4; $G4: $G3; $G3: $G2; $G2: $G1; $G1: $pos;
|
16
|
+
$pos: null;
|
17
|
+
}
|
18
|
+
|
19
|
+
@if $pos {
|
20
|
+
$positions: _linear-positions-parser($pos);
|
21
|
+
$pos-degree: nth($positions, 1);
|
22
|
+
$pos-spec: nth($positions, 2);
|
23
|
+
}
|
24
|
+
|
25
|
+
$full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
|
26
|
+
|
27
|
+
// Set $G1 as the default fallback color
|
28
|
+
$fallback-color: nth($G1, 1);
|
29
|
+
|
30
|
+
// If $fallback is a color use that color as the fallback color
|
31
|
+
@if (type-of($fallback) == color) or ($fallback == "transparent") {
|
32
|
+
$fallback-color: $fallback;
|
33
|
+
}
|
34
|
+
|
35
|
+
background-color: $fallback-color;
|
36
|
+
background-image: -webkit-linear-gradient($pos-degree $full); // Safari 5.1+, Chrome
|
37
|
+
background-image: unquote("linear-gradient(#{$pos-spec}#{$full})");
|
38
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
// Requires Sass 3.1+
|
2
|
+
@mixin radial-gradient($G1, $G2,
|
3
|
+
$G3: null, $G4: null,
|
4
|
+
$G5: null, $G6: null,
|
5
|
+
$G7: null, $G8: null,
|
6
|
+
$G9: null, $G10: null,
|
7
|
+
$pos: null,
|
8
|
+
$shape-size: null,
|
9
|
+
$fallback: null) {
|
10
|
+
|
11
|
+
$data: _radial-arg-parser($G1, $G2, $pos, $shape-size);
|
12
|
+
$G1: nth($data, 1);
|
13
|
+
$G2: nth($data, 2);
|
14
|
+
$pos: nth($data, 3);
|
15
|
+
$shape-size: nth($data, 4);
|
16
|
+
|
17
|
+
$full: $G1, $G2, $G3, $G4, $G5, $G6, $G7, $G8, $G9, $G10;
|
18
|
+
|
19
|
+
// Strip deprecated cover/contain for spec
|
20
|
+
$shape-size-spec: _shape-size-stripper($shape-size);
|
21
|
+
|
22
|
+
// Set $G1 as the default fallback color
|
23
|
+
$first-color: nth($full, 1);
|
24
|
+
$fallback-color: nth($first-color, 1);
|
25
|
+
|
26
|
+
@if (type-of($fallback) == color) or ($fallback == "transparent") {
|
27
|
+
$fallback-color: $fallback;
|
28
|
+
}
|
29
|
+
|
30
|
+
// Add Commas and spaces
|
31
|
+
$shape-size: if($shape-size, '#{$shape-size}, ', null);
|
32
|
+
$pos: if($pos, '#{$pos}, ', null);
|
33
|
+
$pos-spec: if($pos, 'at #{$pos}', null);
|
34
|
+
$shape-size-spec: if(($shape-size-spec != ' ') and ($pos == null), '#{$shape-size-spec}, ', '#{$shape-size-spec} ');
|
35
|
+
|
36
|
+
background-color: $fallback-color;
|
37
|
+
background-image: -webkit-radial-gradient(unquote(#{$pos}#{$shape-size}#{$full}));
|
38
|
+
background-image: unquote("radial-gradient(#{$shape-size-spec}#{$pos-spec}#{$full})");
|
39
|
+
}
|
@@ -0,0 +1,15 @@
|
|
1
|
+
@mixin transform($property: none) {
|
2
|
+
// none | <transform-function>
|
3
|
+
@include prefixer(transform, $property, webkit moz ms o spec);
|
4
|
+
}
|
5
|
+
|
6
|
+
@mixin transform-origin($axes: 50%) {
|
7
|
+
// x-axis - left | center | right | length | %
|
8
|
+
// y-axis - top | center | bottom | length | %
|
9
|
+
// z-axis - length
|
10
|
+
@include prefixer(transform-origin, $axes, webkit moz ms o spec);
|
11
|
+
}
|
12
|
+
|
13
|
+
@mixin transform-style ($style: flat) {
|
14
|
+
@include prefixer(transform-style, $style, webkit moz ms o spec);
|
15
|
+
}
|
@@ -0,0 +1,77 @@
|
|
1
|
+
// Shorthand mixin. Supports multiple parentheses-deliminated values for each variable.
|
2
|
+
// Example: @include transition (all 2s ease-in-out);
|
3
|
+
// @include transition (opacity 1s ease-in 2s, width 2s ease-out);
|
4
|
+
// @include transition-property (transform, opacity);
|
5
|
+
|
6
|
+
@mixin transition ($properties...) {
|
7
|
+
// Fix for vendor-prefix transform property
|
8
|
+
$needs-prefixes: false;
|
9
|
+
$webkit: ();
|
10
|
+
$moz: ();
|
11
|
+
$spec: ();
|
12
|
+
|
13
|
+
// Create lists for vendor-prefixed transform
|
14
|
+
@each $list in $properties {
|
15
|
+
@if nth($list, 1) == "transform" {
|
16
|
+
$needs-prefixes: true;
|
17
|
+
$list1: -webkit-transform;
|
18
|
+
$list2: -moz-transform;
|
19
|
+
$list3: ();
|
20
|
+
|
21
|
+
@each $var in $list {
|
22
|
+
$list3: join($list3, $var);
|
23
|
+
|
24
|
+
@if $var != "transform" {
|
25
|
+
$list1: join($list1, $var);
|
26
|
+
$list2: join($list2, $var);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
$webkit: append($webkit, $list1);
|
31
|
+
$moz: append($moz, $list2);
|
32
|
+
$spec: append($spec, $list3);
|
33
|
+
}
|
34
|
+
|
35
|
+
// Create lists for non-prefixed transition properties
|
36
|
+
@else {
|
37
|
+
$webkit: append($webkit, $list, comma);
|
38
|
+
$moz: append($moz, $list, comma);
|
39
|
+
$spec: append($spec, $list, comma);
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
@if $needs-prefixes {
|
44
|
+
-webkit-transition: $webkit;
|
45
|
+
-moz-transition: $moz;
|
46
|
+
transition: $spec;
|
47
|
+
}
|
48
|
+
@else {
|
49
|
+
@if length($properties) >= 1 {
|
50
|
+
@include prefixer(transition, $properties, webkit moz spec);
|
51
|
+
}
|
52
|
+
|
53
|
+
@else {
|
54
|
+
$properties: all 0.15s ease-out 0s;
|
55
|
+
@include prefixer(transition, $properties, webkit moz spec);
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
|
60
|
+
@mixin transition-property ($properties...) {
|
61
|
+
-webkit-transition-property: transition-property-names($properties, 'webkit');
|
62
|
+
-moz-transition-property: transition-property-names($properties, 'moz');
|
63
|
+
transition-property: transition-property-names($properties, false);
|
64
|
+
}
|
65
|
+
|
66
|
+
@mixin transition-duration ($times...) {
|
67
|
+
@include prefixer(transition-duration, $times, webkit moz spec);
|
68
|
+
}
|
69
|
+
|
70
|
+
@mixin transition-timing-function ($motions...) {
|
71
|
+
// ease | linear | ease-in | ease-out | ease-in-out | cubic-bezier()
|
72
|
+
@include prefixer(transition-timing-function, $motions, webkit moz spec);
|
73
|
+
}
|
74
|
+
|
75
|
+
@mixin transition-delay ($times...) {
|
76
|
+
@include prefixer(transition-delay, $times, webkit moz spec);
|
77
|
+
}
|
@@ -0,0 +1,13 @@
|
|
1
|
+
// Programatically determines whether a color is light or dark
|
2
|
+
// Returns a boolean
|
3
|
+
// More details here http://robots.thoughtbot.com/closer-look-color-lightness
|
4
|
+
|
5
|
+
@function is-light($hex-color) {
|
6
|
+
$-local-red: red(rgba($hex-color, 1.0));
|
7
|
+
$-local-green: green(rgba($hex-color, 1.0));
|
8
|
+
$-local-blue: blue(rgba($hex-color, 1.0));
|
9
|
+
|
10
|
+
$-local-lightness: ($-local-red * 0.2126 + $-local-green * 0.7152 + $-local-blue * 0.0722) / 255;
|
11
|
+
|
12
|
+
@return $-local-lightness > .6;
|
13
|
+
}
|
@@ -0,0 +1,39 @@
|
|
1
|
+
// Flexible grid
|
2
|
+
@function flex-grid($columns, $container-columns: $fg-max-columns) {
|
3
|
+
$width: $columns * $fg-column + ($columns - 1) * $fg-gutter;
|
4
|
+
$container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
|
5
|
+
@return percentage($width / $container-width);
|
6
|
+
}
|
7
|
+
|
8
|
+
// Flexible gutter
|
9
|
+
@function flex-gutter($container-columns: $fg-max-columns, $gutter: $fg-gutter) {
|
10
|
+
$container-width: $container-columns * $fg-column + ($container-columns - 1) * $fg-gutter;
|
11
|
+
@return percentage($gutter / $container-width);
|
12
|
+
}
|
13
|
+
|
14
|
+
// The $fg-column, $fg-gutter and $fg-max-columns variables must be defined in your base stylesheet to properly use the flex-grid function.
|
15
|
+
// This function takes the fluid grid equation (target / context = result) and uses columns to help define each.
|
16
|
+
//
|
17
|
+
// The calculation presumes that your column structure will be missing the last gutter:
|
18
|
+
//
|
19
|
+
// -- column -- gutter -- column -- gutter -- column
|
20
|
+
//
|
21
|
+
// $fg-column: 60px; // Column Width
|
22
|
+
// $fg-gutter: 25px; // Gutter Width
|
23
|
+
// $fg-max-columns: 12; // Total Columns For Main Container
|
24
|
+
//
|
25
|
+
// div {
|
26
|
+
// width: flex-grid(4); // returns (315px / 995px) = 31.65829%;
|
27
|
+
// margin-left: flex-gutter(); // returns (25px / 995px) = 2.51256%;
|
28
|
+
//
|
29
|
+
// p {
|
30
|
+
// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
|
31
|
+
// float: left;
|
32
|
+
// margin: flex-gutter(4); // returns (25px / 315px) = 7.936508%;
|
33
|
+
// }
|
34
|
+
//
|
35
|
+
// blockquote {
|
36
|
+
// float: left;
|
37
|
+
// width: flex-grid(2, 4); // returns (145px / 315px) = 46.031746%;
|
38
|
+
// }
|
39
|
+
// }
|
@@ -0,0 +1,13 @@
|
|
1
|
+
@function grid-width($n) {
|
2
|
+
@return $n * $gw-column + ($n - 1) * $gw-gutter;
|
3
|
+
}
|
4
|
+
|
5
|
+
// The $gw-column and $gw-gutter variables must be defined in your base stylesheet to properly use the grid-width function.
|
6
|
+
//
|
7
|
+
// $gw-column: 100px; // Column Width
|
8
|
+
// $gw-gutter: 40px; // Gutter Width
|
9
|
+
//
|
10
|
+
// div {
|
11
|
+
// width: grid-width(4); // returns 520px;
|
12
|
+
// margin-left: $gw-gutter; // returns 40px;
|
13
|
+
// }
|
@@ -0,0 +1,66 @@
|
|
1
|
+
// Scaling Variables
|
2
|
+
$golden: 1.618;
|
3
|
+
$minor-second: 1.067;
|
4
|
+
$major-second: 1.125;
|
5
|
+
$minor-third: 1.2;
|
6
|
+
$major-third: 1.25;
|
7
|
+
$perfect-fourth: 1.333;
|
8
|
+
$augmented-fourth: 1.414;
|
9
|
+
$perfect-fifth: 1.5;
|
10
|
+
$minor-sixth: 1.6;
|
11
|
+
$major-sixth: 1.667;
|
12
|
+
$minor-seventh: 1.778;
|
13
|
+
$major-seventh: 1.875;
|
14
|
+
$octave: 2;
|
15
|
+
$major-tenth: 2.5;
|
16
|
+
$major-eleventh: 2.667;
|
17
|
+
$major-twelfth: 3;
|
18
|
+
$double-octave: 4;
|
19
|
+
|
20
|
+
@function modular-scale($value, $increment, $ratio) {
|
21
|
+
$v1: nth($value, 1);
|
22
|
+
$v2: nth($value, length($value));
|
23
|
+
$value: $v1;
|
24
|
+
|
25
|
+
// scale $v2 to just above $v1
|
26
|
+
@while $v2 > $v1 {
|
27
|
+
$v2: ($v2 / $ratio); // will be off-by-1
|
28
|
+
}
|
29
|
+
@while $v2 < $v1 {
|
30
|
+
$v2: ($v2 * $ratio); // will fix off-by-1
|
31
|
+
}
|
32
|
+
|
33
|
+
// check AFTER scaling $v2 to prevent double-counting corner-case
|
34
|
+
$double-stranded: $v2 > $v1;
|
35
|
+
|
36
|
+
@if $increment > 0 {
|
37
|
+
@for $i from 1 through $increment {
|
38
|
+
@if $double-stranded and ($v1 * $ratio) > $v2 {
|
39
|
+
$value: $v2;
|
40
|
+
$v2: ($v2 * $ratio);
|
41
|
+
} @else {
|
42
|
+
$v1: ($v1 * $ratio);
|
43
|
+
$value: $v1;
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
@if $increment < 0 {
|
49
|
+
// adjust $v2 to just below $v1
|
50
|
+
@if $double-stranded {
|
51
|
+
$v2: ($v2 / $ratio);
|
52
|
+
}
|
53
|
+
|
54
|
+
@for $i from $increment through -1 {
|
55
|
+
@if $double-stranded and ($v1 / $ratio) < $v2 {
|
56
|
+
$value: $v2;
|
57
|
+
$v2: ($v2 / $ratio);
|
58
|
+
} @else {
|
59
|
+
$v1: ($v1 / $ratio);
|
60
|
+
$value: $v1;
|
61
|
+
}
|
62
|
+
}
|
63
|
+
}
|
64
|
+
|
65
|
+
@return $value;
|
66
|
+
}
|