modular-scale 2.1.1 → 3.0.0.alpha1
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 +4 -4
- data/changelog.md +11 -0
- data/lib/modular-scale.rb +3 -97
- data/readme.md +96 -93
- data/stylesheets/_modularscale.scss +20 -0
- data/stylesheets/modularscale/_function.scss +52 -0
- data/stylesheets/modularscale/_pow.scss +29 -0
- data/stylesheets/modularscale/_respond.scss +41 -0
- data/stylesheets/modularscale/_round-px.scss +6 -0
- data/stylesheets/modularscale/_settings.scss +33 -0
- data/stylesheets/modularscale/_sort.scss +18 -0
- data/stylesheets/modularscale/_strip-units.scss +8 -0
- data/stylesheets/modularscale/_sugar.scss +3 -0
- data/stylesheets/modularscale/_target.scss +37 -0
- data/stylesheets/modularscale/_tests.scss +12 -0
- data/stylesheets/{modular-scale/_ratios.scss → modularscale/_vars.scss} +10 -5
- metadata +22 -23
- data/stylesheets/_modular-scale-tests.scss +0 -74
- data/stylesheets/_modular-scale.scss +0 -18
- data/stylesheets/modular-scale.zip +0 -0
- data/stylesheets/modular-scale/_calc.scss +0 -17
- data/stylesheets/modular-scale/_function-list.scss +0 -68
- data/stylesheets/modular-scale/_function.scss +0 -55
- data/stylesheets/modular-scale/_generate-list.scss +0 -103
- data/stylesheets/modular-scale/_pow.scss +0 -40
- data/stylesheets/modular-scale/_respond.scss +0 -49
- data/stylesheets/modular-scale/_round-px.scss +0 -6
- data/stylesheets/modular-scale/_sort-list.scss +0 -93
- data/stylesheets/modular-scale/_tests.scss +0 -22
@@ -1,68 +0,0 @@
|
|
1
|
-
// Outputs a list of values instead of a single value
|
2
|
-
@function ms-list($Start: 0, $End: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
|
3
|
-
|
4
|
-
// Seed results
|
5
|
-
$Positive-return: ();
|
6
|
-
$Negitive-return: ();
|
7
|
-
$Return: ();
|
8
|
-
|
9
|
-
@if $End >= 0 {
|
10
|
-
// Generate a list of all possible values
|
11
|
-
$Positive-return: ms-generate-list($End, $Bases, $Ratios);
|
12
|
-
|
13
|
-
// Sort the generated lists
|
14
|
-
$Positive-return: ms-sort-list($Positive-return);
|
15
|
-
|
16
|
-
// Trim list
|
17
|
-
$Trim-list: ();
|
18
|
-
// If the starting value is a positive number
|
19
|
-
// trim the positive return from that
|
20
|
-
@if $Start >= 0 {
|
21
|
-
@for $i from ($Start + 1) through $End + 1 {
|
22
|
-
$Trim-list: join($Trim-list, nth($Positive-return, $i));
|
23
|
-
}
|
24
|
-
}
|
25
|
-
// If not, then include everything up to the end.
|
26
|
-
@else {
|
27
|
-
@for $i from 1 through $End + 1 {
|
28
|
-
$Trim-list: join($Trim-list, nth($Positive-return, $i));
|
29
|
-
}
|
30
|
-
}
|
31
|
-
$Positive-return: $Trim-list;
|
32
|
-
}
|
33
|
-
|
34
|
-
// Generate a negitive list
|
35
|
-
@if $Start < 0 {
|
36
|
-
// Generate a list of all possible values
|
37
|
-
$Negitive-return: ms-generate-list($Start, $Bases, $Ratios);
|
38
|
-
|
39
|
-
// Sort the generated lists
|
40
|
-
$Negitive-return: ms-sort-list($Negitive-return);
|
41
|
-
|
42
|
-
// Reverse negitive list results.
|
43
|
-
$MS-new-return: ();
|
44
|
-
@each $i in $Negitive-return {
|
45
|
-
$MS-new-return: join($i, $MS-new-return);
|
46
|
-
}
|
47
|
-
$Negitive-return: $MS-new-return;
|
48
|
-
|
49
|
-
// Trim list
|
50
|
-
$Trim-list: ();
|
51
|
-
@if $End < 0 {
|
52
|
-
@for $i from abs($End) through (abs($Start) + 2) {
|
53
|
-
$Trim-list: join(nth($Negitive-return, $i), $Trim-list);
|
54
|
-
}
|
55
|
-
}
|
56
|
-
@else {
|
57
|
-
@for $i from 2 through (abs($Start) + 1) {
|
58
|
-
$Trim-list: join(nth($Negitive-return, $i), $Trim-list);
|
59
|
-
}
|
60
|
-
}
|
61
|
-
$Negitive-return: $Trim-list;
|
62
|
-
}
|
63
|
-
|
64
|
-
// Join both positive and negitive possibilities.
|
65
|
-
$Return: join($Negitive-return, $Positive-return);
|
66
|
-
|
67
|
-
@return $Return;
|
68
|
-
}
|
@@ -1,55 +0,0 @@
|
|
1
|
-
// The main function that brings it all together
|
2
|
-
@function ms($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
|
3
|
-
|
4
|
-
// If no multi-base or multi-ratio stuff is going on
|
5
|
-
// then just retrn the basic calculaiton
|
6
|
-
@if length($Bases) == 1 and length($Ratios) == 1 {
|
7
|
-
@return ms-round-px(ms-calc($Value, $Bases, $Ratios));
|
8
|
-
}
|
9
|
-
|
10
|
-
// Do calculations directly in Ruby when avalible
|
11
|
-
@if $MS-gem-exists {
|
12
|
-
|
13
|
-
// Remove units from bases
|
14
|
-
$Unit: nth($Bases, 1) * 0 + 1; // Extracts the unit from the base
|
15
|
-
$Unitless-Bases: ();
|
16
|
-
@each $Base in $Bases {
|
17
|
-
$Base: $Base/$Unit;
|
18
|
-
$Unitless-Bases: join($Unitless-Bases, $Base);
|
19
|
-
}
|
20
|
-
|
21
|
-
// Calculate natively in Ruby
|
22
|
-
@return ms-round-px(ms-gem-func($Value, $Unitless-Bases, $Ratios) * $Unit);
|
23
|
-
}
|
24
|
-
|
25
|
-
// Generate a list of all possible values
|
26
|
-
$Return: ms-generate-list($Value, $Bases, $Ratios);
|
27
|
-
|
28
|
-
// Sort the generated lists
|
29
|
-
$Return: ms-sort-list($Return);
|
30
|
-
|
31
|
-
// Reverse list if its negitive.
|
32
|
-
@if $Value < 0 {
|
33
|
-
$MS-new-return: ();
|
34
|
-
@each $i in $Return {
|
35
|
-
$MS-new-return: join($i, $MS-new-return);
|
36
|
-
}
|
37
|
-
$Return: $MS-new-return;
|
38
|
-
}
|
39
|
-
|
40
|
-
// Normalize value for counting from 1
|
41
|
-
// Because CSS counts things from 1
|
42
|
-
// So Sass does as well
|
43
|
-
// So I get to write fun stuff like this
|
44
|
-
$Value: abs($Value) + 1;
|
45
|
-
|
46
|
-
// Find the correct value in the list
|
47
|
-
$Return: nth($Return, $Value);
|
48
|
-
|
49
|
-
@return ms-round-px($Return);
|
50
|
-
}
|
51
|
-
|
52
|
-
// Same function, different name, for good measure.
|
53
|
-
@function modular-scale($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
|
54
|
-
@return ms($Value, $Bases, $Ratios);
|
55
|
-
}
|
@@ -1,103 +0,0 @@
|
|
1
|
-
@function ms-reverse-list($list) {
|
2
|
-
@if length($list) > 1 {
|
3
|
-
@if nth($list, 1) > nth($list, length($list)) {
|
4
|
-
$MS-reversed-list: ();
|
5
|
-
@each $Value in $list {
|
6
|
-
$MS-reversed-list: join($Value, $MS-reversed-list);
|
7
|
-
}
|
8
|
-
@return $MS-reversed-list;
|
9
|
-
}
|
10
|
-
}
|
11
|
-
@return $list;
|
12
|
-
}
|
13
|
-
|
14
|
-
|
15
|
-
@function ms-generate-list($Value: 0, $Bases: $ms-base, $Ratios: $ms-ratio) {
|
16
|
-
|
17
|
-
// Create blank lists
|
18
|
-
$MS-list: ();
|
19
|
-
$MS-base-list: ();
|
20
|
-
|
21
|
-
// Loop through each ratio AND each base
|
22
|
-
// to generate all possibilities.
|
23
|
-
@each $Ratio in $Ratios {
|
24
|
-
@each $Base in $Bases {
|
25
|
-
|
26
|
-
// Set base variables
|
27
|
-
$MS-base-list: ();
|
28
|
-
$Base-counter: 0;
|
29
|
-
|
30
|
-
// Seed list with an initial value
|
31
|
-
$MS-base-list: $Base;
|
32
|
-
|
33
|
-
// Find values on a positive scale
|
34
|
-
@if $Value >= 0 {
|
35
|
-
|
36
|
-
// Find lower values on the scale
|
37
|
-
$Base-counter: -1;
|
38
|
-
@while ms-calc($Base-counter, $Base, $Ratio) >= nth($Bases, 1) {
|
39
|
-
$MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
|
40
|
-
$Base-counter: $Base-counter - 1;
|
41
|
-
}
|
42
|
-
|
43
|
-
// Ensure the list is smallest to largest
|
44
|
-
$MS-base-list: ms-reverse-list($MS-base-list);
|
45
|
-
|
46
|
-
// Find higher possible values on the scale
|
47
|
-
$Base-counter: 1;
|
48
|
-
@while ms-calc($Base-counter, $Base, $Ratio) <= ms-calc($Value, nth($Bases, 1), $Ratio) {
|
49
|
-
$MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
|
50
|
-
$Base-counter: $Base-counter + 1;
|
51
|
-
}
|
52
|
-
}
|
53
|
-
|
54
|
-
// Find values on a negitive scale
|
55
|
-
@else {
|
56
|
-
|
57
|
-
// Find lower values on the scale
|
58
|
-
$Base-counter: 1;
|
59
|
-
@while ms-calc($Base-counter, $Base, $Ratio) <= nth($Bases, 1) {
|
60
|
-
$MS-base-list: join($MS-base-list, ms-calc($Base-counter, $Base, $Ratio));
|
61
|
-
$Base-counter: $Base-counter + 1;
|
62
|
-
}
|
63
|
-
|
64
|
-
// Ensure the list is smallest to largest
|
65
|
-
$MS-base-list: ms-reverse-list($MS-base-list);
|
66
|
-
|
67
|
-
// Find higher possible values on the scale
|
68
|
-
$Base-counter: -1;
|
69
|
-
@while ms-calc($Base-counter, $Base, $Ratio) >= ms-calc($Value, nth($Bases, 1), $Ratio) {
|
70
|
-
$MS-calc: ms-calc($Base-counter, $Base, $Ratio);
|
71
|
-
// detect if the value excedes the main base value
|
72
|
-
@if $MS-calc < nth($Bases, 1) {
|
73
|
-
$MS-base-list: join($MS-base-list, $MS-calc);
|
74
|
-
}
|
75
|
-
$Base-counter: $Base-counter - 1;
|
76
|
-
}
|
77
|
-
|
78
|
-
// Trim outlier base.
|
79
|
-
@if length($Bases) > 1 {
|
80
|
-
@for $i from 2 through length($Bases) {
|
81
|
-
@if nth($MS-base-list, 1) > nth($Bases, 1) {
|
82
|
-
$MS-new-list: ();
|
83
|
-
@for $i from 2 through length($MS-base-list) {
|
84
|
-
$MS-new-list: join($MS-new-list, nth($MS-base-list, $i));
|
85
|
-
}
|
86
|
-
$MS-base-list: $MS-new-list;
|
87
|
-
}
|
88
|
-
}
|
89
|
-
}
|
90
|
-
}
|
91
|
-
|
92
|
-
// reverse list if its largest to smallest
|
93
|
-
$MS-base-list: ms-reverse-list($MS-base-list);
|
94
|
-
|
95
|
-
// Add new possibilities to the master list
|
96
|
-
$MS-list: append($MS-list, $MS-base-list, comma);
|
97
|
-
|
98
|
-
}
|
99
|
-
}
|
100
|
-
|
101
|
-
// After all the possibilities are found, output a master list
|
102
|
-
@return $MS-list;
|
103
|
-
}
|
@@ -1,40 +0,0 @@
|
|
1
|
-
// If a native exponent function doesnt exist
|
2
|
-
// this one is needed.
|
3
|
-
@function ms-pow($Base, $Exponent) {
|
4
|
-
|
5
|
-
// Find and remove unit.
|
6
|
-
// Avoids messyness with unit calculations
|
7
|
-
$Unit: $Base * 0 + 1;
|
8
|
-
$Base: $Base/$Unit;
|
9
|
-
|
10
|
-
// This function doesnt support non-interger exponents.
|
11
|
-
// Warn the user about why this is breaking.
|
12
|
-
@if round($Exponent) != $Exponent {
|
13
|
-
@warn "Unfortunately, you need Compass to use non-integer exponents";
|
14
|
-
}
|
15
|
-
|
16
|
-
// Set up the loop, priming the return with the base.
|
17
|
-
$Return: $Base;
|
18
|
-
|
19
|
-
// If the number is positive, multiply it.
|
20
|
-
@if $Exponent > 0 {
|
21
|
-
// Basic feedback loop as exponents
|
22
|
-
// are recursivley multiplied numbers.
|
23
|
-
@for $i from 1 to $Exponent {
|
24
|
-
$Return: $Return * $Base;
|
25
|
-
}
|
26
|
-
}
|
27
|
-
|
28
|
-
// If the number is 0 or negitive
|
29
|
-
// divide instead of multiply.
|
30
|
-
@else {
|
31
|
-
// Libsass doesnt allow negitive values in loops
|
32
|
-
@for $i from (-1 + 1) to (abs($Exponent) + 1) {
|
33
|
-
$Return: $Return / $Base;
|
34
|
-
}
|
35
|
-
}
|
36
|
-
|
37
|
-
// Return is now compounded redy to be returned.
|
38
|
-
// Add the unit back onto the number.
|
39
|
-
@return $Return * $Unit;
|
40
|
-
}
|
@@ -1,49 +0,0 @@
|
|
1
|
-
// Stripping units is rarely a best practice and this function
|
2
|
-
// should not be used elsewhere
|
3
|
-
@function ms-unitless($val) {
|
4
|
-
$val: $val / ($val - $val + 1);
|
5
|
-
@return $val;
|
6
|
-
}
|
7
|
-
|
8
|
-
// Search config for values
|
9
|
-
@function ms-range($x,$y,$range:$ms-range) {
|
10
|
-
@return nth(nth($range,$x),$y);
|
11
|
-
}
|
12
|
-
|
13
|
-
// Generate calc() function
|
14
|
-
@function ms-respond-calc($value, $n, $range: $ms-range, $base: $ms-base) {
|
15
|
-
$val1: ms($value,$base,ms-range($n,1,$range));
|
16
|
-
$val2: ms($value,$base,ms-range($n+1,1,$range));
|
17
|
-
$break1: ms-range($n,2,$range);
|
18
|
-
$break2: ms-range($n+1,2,$range);
|
19
|
-
$diff: ms-unitless($val2) - ms-unitless($val1);
|
20
|
-
@if $ms-fluid {
|
21
|
-
@return calc( #{$val1} + #{$diff} * ( ( 100vw - #{$break1}) / #{ms-unitless($break2) - ms-unitless($break1)} ) );
|
22
|
-
} @else {
|
23
|
-
@return ms($value,$base,ms-range($n,1,$range));
|
24
|
-
}
|
25
|
-
}
|
26
|
-
|
27
|
-
// Main responsive mixin
|
28
|
-
@mixin ms-respond($property, $value, $range: $ms-range, $base: $ms-base) {
|
29
|
-
// If there is no responsive config, just output the property and value
|
30
|
-
@if $ms-range == null {
|
31
|
-
#{$property}: ms($value,$base,$ms-ratio);
|
32
|
-
} @else {
|
33
|
-
|
34
|
-
// Initial value
|
35
|
-
#{$property}: ms($value,$base,ms-range(1,1,$range));
|
36
|
-
|
37
|
-
// Loop through breakpoints
|
38
|
-
@for $i from 1 through (length($range) - 1) {
|
39
|
-
@media (min-width: ms-range($i,2,$range)) and (max-width: ms-range($i+1,2,$range)) {
|
40
|
-
#{$property}: ms-respond-calc($value, $i, $range, $base);
|
41
|
-
}
|
42
|
-
}
|
43
|
-
|
44
|
-
// Final breakpoint is just an override value
|
45
|
-
@media (min-width: ms-range(length($range),2,$range)) {
|
46
|
-
#{$property}: ms($value,$base,ms-range(length($range),1,$range));
|
47
|
-
}
|
48
|
-
}
|
49
|
-
}
|
@@ -1,93 +0,0 @@
|
|
1
|
-
// List sorting via a modified merge-sort algorythmn
|
2
|
-
// http://en.wikipedia.org/wiki/Merge_sort
|
3
|
-
|
4
|
-
@function ms-merge($A, $B) {
|
5
|
-
|
6
|
-
$Return: ();
|
7
|
-
|
8
|
-
// Some empty lists get passed through
|
9
|
-
// so just pass the other list throguh
|
10
|
-
@if length($A) == 0 {
|
11
|
-
@return $B;
|
12
|
-
}
|
13
|
-
|
14
|
-
// If lists fit next to each other, just merge them
|
15
|
-
// This helps performance skipping the need to check each value
|
16
|
-
@if nth($A, length($A)) < nth($B, 1) {
|
17
|
-
@return join($A, $B);
|
18
|
-
}
|
19
|
-
@if nth($B, length($B)) < nth($A, 1) {
|
20
|
-
@return join($B, $A);
|
21
|
-
}
|
22
|
-
|
23
|
-
// Counters start at 1
|
24
|
-
$A-counter: 1;
|
25
|
-
$B-counter: 1;
|
26
|
-
|
27
|
-
// Start looping through all numbers in array
|
28
|
-
@while $A-counter <= length($A) and $B-counter <= length($B) {
|
29
|
-
|
30
|
-
// Check if the A value is smaller
|
31
|
-
// Uses or equal to avoid duplicate numbers
|
32
|
-
@if nth($A, $A-counter) <= nth($B, $B-counter) {
|
33
|
-
$Return: join($Return, nth($A, $A-counter));
|
34
|
-
$A-counter: $A-counter + 1;
|
35
|
-
}
|
36
|
-
|
37
|
-
// Check if the B value is smaller
|
38
|
-
@else if nth($A, $A-counter) > nth($B, $B-counter) {
|
39
|
-
$Return: join($Return, nth($B, $B-counter));
|
40
|
-
$B-counter: $B-counter + 1;
|
41
|
-
}
|
42
|
-
}
|
43
|
-
|
44
|
-
// Run through remainder values in the list
|
45
|
-
@while $A-counter <= length($A) {
|
46
|
-
$Current: nth($A, $A-counter);
|
47
|
-
@if $Current != nth($Return, length($Return)) {
|
48
|
-
$Return: join($Return, $Current);
|
49
|
-
}
|
50
|
-
$A-counter: $A-counter + 1;
|
51
|
-
}
|
52
|
-
@while $B-counter <= length($B) {
|
53
|
-
$Current: nth($B, $B-counter);
|
54
|
-
@if $Current != nth($Return, length($Return)) {
|
55
|
-
$Return: join($Return, $Current);
|
56
|
-
}
|
57
|
-
$B-counter: $B-counter + 1;
|
58
|
-
}
|
59
|
-
|
60
|
-
// Done! return is now sorted and complete
|
61
|
-
@return $Return;
|
62
|
-
}
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
// Pull it all together
|
67
|
-
@function ms-sort-list($Lists) {
|
68
|
-
|
69
|
-
$Return: ();
|
70
|
-
|
71
|
-
@each $List in $Lists {
|
72
|
-
@if $Return == () {
|
73
|
-
$Return: $List;
|
74
|
-
}
|
75
|
-
@else {
|
76
|
-
$Return: ms-merge($List, $Return);
|
77
|
-
}
|
78
|
-
}
|
79
|
-
|
80
|
-
// final cleanup of repeated items
|
81
|
-
$Last: null;
|
82
|
-
$New-list: ();
|
83
|
-
@each $Item in $Return {
|
84
|
-
@if $Item != $Last {
|
85
|
-
$New-list: join($New-list, $Item);
|
86
|
-
}
|
87
|
-
$Last: $Item;
|
88
|
-
}
|
89
|
-
$Return: $New-list;
|
90
|
-
|
91
|
-
|
92
|
-
@return $Return;
|
93
|
-
}
|
@@ -1,22 +0,0 @@
|
|
1
|
-
// Feature testing
|
2
|
-
|
3
|
-
|
4
|
-
// Test if the pow() function exists
|
5
|
-
@function ms-pow-exists() {
|
6
|
-
@if pow(4, 2) == 16 {
|
7
|
-
@return true;
|
8
|
-
}
|
9
|
-
@return false;
|
10
|
-
}
|
11
|
-
|
12
|
-
$MS-pow-exists: ms-pow-exists();
|
13
|
-
|
14
|
-
// Test if MS was installed via the gem
|
15
|
-
@function ms-gem-exists() {
|
16
|
-
@if ms-gem-installed() == true {
|
17
|
-
@return true;
|
18
|
-
}
|
19
|
-
@return false;
|
20
|
-
}
|
21
|
-
|
22
|
-
$MS-gem-exists: ms-gem-exists();
|