dashy 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/.gitignore +17 -0
- data/.npmignore +12 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +22 -0
- data/README.md +31 -0
- data/Rakefile +9 -0
- data/app/assets/stylesheets/_dashy.scss +14 -0
- data/app/assets/stylesheets/dashy/_color.scss +5 -0
- data/app/assets/stylesheets/dashy/_corner.scss +15 -0
- data/app/assets/stylesheets/dashy/_default.scss +14 -0
- data/app/assets/stylesheets/dashy/_define.scss +157 -0
- data/app/assets/stylesheets/dashy/_direction.scss +36 -0
- data/app/assets/stylesheets/dashy/_font-family.scss +36 -0
- data/app/assets/stylesheets/dashy/_is.scss +81 -0
- data/app/assets/stylesheets/dashy/_line-height.scss +10 -0
- data/app/assets/stylesheets/dashy/_list.scss +161 -0
- data/app/assets/stylesheets/dashy/_number.scss +79 -0
- data/app/assets/stylesheets/dashy/_opposite.scss +36 -0
- data/app/assets/stylesheets/dashy/_select.scss +124 -0
- data/app/assets/stylesheets/dashy/_set.scss +79 -0
- data/app/assets/stylesheets/dashy/_side.scss +23 -0
- data/bin/dashy +8 -0
- data/dashy.gemspec +30 -0
- data/dashy.json +34 -0
- data/lib/dashy/engine.rb +7 -0
- data/lib/dashy/generator.rb +82 -0
- data/lib/dashy/version.rb +5 -0
- data/lib/dashy.rb +30 -0
- data/lib/sass/script/functions.rb +275 -0
- data/lib/tasks/install.rake +22 -0
- data/package.json +28 -0
- data/sache.json +5 -0
- metadata +134 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f00a1bf21b2a312b22a76c281eb8baefab10e532
|
4
|
+
data.tar.gz: f2c80c1c86bdf524bcbe639a2fdd4a3e54fdfa28
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 2c86ae1d952fbfd586dca71b94f97cca13342704ba10b9618a6f6082c81963fd4c16bd113ffa39ea9c3c0388cb7b6984071073ecb28e208b0b40ff10f7ea3f1f
|
7
|
+
data.tar.gz: e187aaa08aca674ef10379dd8d4a896f77b32353b1af1d334922e5b07f0867aa0d64903b53c745b014419ed1b258b52b5016ea9e64e8d2cbace59634c2dd3b7b
|
data/.gitignore
ADDED
data/.npmignore
ADDED
data/Gemfile
ADDED
data/LICENSE.txt
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
Copyright (c) 2014 tosyx
|
2
|
+
|
3
|
+
MIT License
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
6
|
+
a copy of this software and associated documentation files (the
|
7
|
+
"Software"), to deal in the Software without restriction, including
|
8
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
9
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
10
|
+
permit persons to whom the Software is furnished to do so, subject to
|
11
|
+
the following conditions:
|
12
|
+
|
13
|
+
The above copyright notice and this permission notice shall be
|
14
|
+
included in all copies or substantial portions of the Software.
|
15
|
+
|
16
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
17
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
18
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
19
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
20
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
21
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
22
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,31 @@
|
|
1
|
+
# Dashy
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem 'dashy'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
$ bundle
|
16
|
+
|
17
|
+
Or install it yourself as:
|
18
|
+
|
19
|
+
$ gem install dashy
|
20
|
+
|
21
|
+
## Usage
|
22
|
+
|
23
|
+
TODO: Write usage instructions here
|
24
|
+
|
25
|
+
## Contributing
|
26
|
+
|
27
|
+
1. Fork it ( https://github.com/[my-github-username]/dashy/fork )
|
28
|
+
2. Create your feature branch (`git checkout -b my-new-feature`)
|
29
|
+
3. Commit your changes (`git commit -am 'Add some feature'`)
|
30
|
+
4. Push to the branch (`git push origin my-new-feature`)
|
31
|
+
5. Create a new Pull Request
|
data/Rakefile
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
@import "dash/color";
|
2
|
+
@import "dash/corner";
|
3
|
+
@import "dash/default";
|
4
|
+
@import "dash/define";
|
5
|
+
@import "dash/direction";
|
6
|
+
@import "dash/font-family";
|
7
|
+
@import "dash/is";
|
8
|
+
@import "dash/line-height";
|
9
|
+
@import "dash/list";
|
10
|
+
@import "dash/number";
|
11
|
+
@import "dash/opposite";
|
12
|
+
@import "dash/select";
|
13
|
+
@import "dash/set";
|
14
|
+
@import "dash/side";
|
@@ -0,0 +1,15 @@
|
|
1
|
+
@import "dashy/list";
|
2
|
+
|
3
|
+
$corners: top-left top-right bottom-right bottom-left;
|
4
|
+
|
5
|
+
$corners-moz:
|
6
|
+
(top-left topleft)
|
7
|
+
(top-right topright)
|
8
|
+
(bottom-left bottomleft)
|
9
|
+
(bottom-right bottomright)
|
10
|
+
;
|
11
|
+
|
12
|
+
@function corner-moz($corner)
|
13
|
+
{
|
14
|
+
@return list-lookup($corners-moz, $corner);
|
15
|
+
}
|
@@ -0,0 +1,14 @@
|
|
1
|
+
$default-font-size: 16px !default;
|
2
|
+
$default-line-height: 1.618 !default;
|
3
|
+
$default-text-align: left !default;
|
4
|
+
$default-vertical-align: top !default;
|
5
|
+
|
6
|
+
$default-grid-gutter-width: 2.5% !default;
|
7
|
+
$default-grid-gutter-widths: default !default;
|
8
|
+
$default-grid-gutter-height-ratio: "0" !default;
|
9
|
+
$default-grid-gutter-height-ratios: default "1/1" "1/2" "1/3" "1/4" !default;
|
10
|
+
|
11
|
+
$default-limit-odd: 19 !default;
|
12
|
+
$default-limit-even: 20 !default;
|
13
|
+
|
14
|
+
$default-page-width: 840px !default;
|
@@ -0,0 +1,157 @@
|
|
1
|
+
@mixin define-box($selector, $position:(), $top:(), $left:(), $right:(), $bottom:(), $width:(), $height:$width)
|
2
|
+
{
|
3
|
+
#{ $selector }
|
4
|
+
{
|
5
|
+
@if is($top) { top : $top ; }
|
6
|
+
@if is($left) { top : $left ; }
|
7
|
+
@if is($right) { top : $right ; }
|
8
|
+
@if is($bottom) { top : $bottom ; }
|
9
|
+
@if is($position) { position : $position ; }
|
10
|
+
@if is($height) { height : $height ; }
|
11
|
+
@if is($width) { width : $width ; }
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
@mixin define-bar($selector, $width:(), $height:())
|
16
|
+
{
|
17
|
+
#{ select($selector) }
|
18
|
+
{
|
19
|
+
@if is($height) { height : $height ; }
|
20
|
+
@if is($width) { width : $width ; }
|
21
|
+
}
|
22
|
+
}
|
23
|
+
|
24
|
+
@mixin define-positioned-bar($selector, $top:(), $left:(), $right:(), $bottom:(), $width:(), $height:())
|
25
|
+
{
|
26
|
+
@include define-bar($selector:$selector, $width:$width, $height:$height)
|
27
|
+
{
|
28
|
+
@if is($top) { top : $top ; }
|
29
|
+
@if is($left) { top : $left ; }
|
30
|
+
@if is($right) { top : $right ; }
|
31
|
+
@if is($bottom) { top : $bottom ; }
|
32
|
+
}
|
33
|
+
}
|
34
|
+
|
35
|
+
@mixin define-fixed-position-bar($selector, $top:(), $left:(), $right:(), $bottom:(), $width:(), $height:())
|
36
|
+
{
|
37
|
+
@include define-positioned-bar($selector, $top:$top, $left:$left, $right:$right, $bottom:$bottom, $width:$width, $height:$height)
|
38
|
+
{
|
39
|
+
position:fixed;
|
40
|
+
}
|
41
|
+
@if 100% == $width
|
42
|
+
{
|
43
|
+
@if is-zero($top) body { margin-top : $height ; }
|
44
|
+
@else if is-zero($bottom) body { margin-bottom : $height ; }
|
45
|
+
}
|
46
|
+
@if 100% == $height
|
47
|
+
{
|
48
|
+
@if is-zero($left) body { margin-left : $width ; }
|
49
|
+
@else if is-zero($right) body { margin-right : $width ; }
|
50
|
+
}
|
51
|
+
}
|
52
|
+
|
53
|
+
@mixin define-sticky-bar()
|
54
|
+
{
|
55
|
+
|
56
|
+
}
|
57
|
+
|
58
|
+
@mixin define-sticky-footer($height:0)
|
59
|
+
{
|
60
|
+
body
|
61
|
+
{
|
62
|
+
margin-top:$header-toolbar-height; margin-bottom:$footer-toolbar-height;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
|
66
|
+
@mixin define-grid($gutter-widths:$default-grid-gutter-widths, $gutter-height-ratios:$default-grid-gutter-height-ratios)
|
67
|
+
{
|
68
|
+
@each $gutter-width in $gutter-widths
|
69
|
+
{
|
70
|
+
$gutter-width-name: $gutter-width;
|
71
|
+
@if default == $gutter-width { $gutter-width: $default-grid-gutter-width; }
|
72
|
+
|
73
|
+
@each $gutter-height-ratio in $gutter-height-ratios
|
74
|
+
{
|
75
|
+
$gutter-height-ratio-name: $gutter-height-ratio;
|
76
|
+
@if default == $gutter-height-ratio { $gutter-height-ratio: $default-grid-gutter-height-ratio; }
|
77
|
+
$gutter-height-ratio: number-from-fraction($gutter-height-ratio);
|
78
|
+
$gutter-height: $gutter-height-ratio * $gutter-width;
|
79
|
+
|
80
|
+
#{ select-grids($gutter-width:$gutter-width-name, $gutter-height-ratio:$gutter-height-ratio-name) }
|
81
|
+
{
|
82
|
+
margin-top: - $gutter-height;
|
83
|
+
> *
|
84
|
+
{
|
85
|
+
margin-top: $gutter-height;
|
86
|
+
&.gutter-overflow-top { margin-top: - $gutter-height; } // these should be part of select-grid-cells
|
87
|
+
&.gutter-overflow-bottom { margin-bottom: - $gutter-height; } // these should be part of select-grid-cells
|
88
|
+
}
|
89
|
+
}
|
90
|
+
}
|
91
|
+
|
92
|
+
#{ select-grids($gutter-width:$gutter-width-name) }
|
93
|
+
{
|
94
|
+
@each $span-width in $define-grid-span-widths
|
95
|
+
{
|
96
|
+
$nominal-width: nth($span-width, 1);
|
97
|
+
$actual-width: $nominal-width + ($nominal-width * $gutter-width)/100% - $gutter-width;
|
98
|
+
$fractions: nth($span-width, 2);
|
99
|
+
$cell: select-class(width $fractions); // these should be part of select-grid-cells
|
100
|
+
$overflow-left: select-class(gutter-overflow left); // these should be part of select-grid-cells
|
101
|
+
$overflow-right: select-class(gutter-overflow right); // these should be part of select-grid-cells
|
102
|
+
|
103
|
+
#{ select-children( $cell ) } { width: $actual-width; }
|
104
|
+
#{ select-children(select($cell $overflow-left) ) } { width: $actual-width + $gutter-width; margin-left: - $gutter-width; }
|
105
|
+
#{ select-children(select($cell $overflow-right) ) } { width: $actual-width + $gutter-width; margin-right: - $gutter-width; }
|
106
|
+
#{ select-children(select($cell $overflow-left $overflow-right) ) } { width: $actual-width + $gutter-width * 2; }
|
107
|
+
}
|
108
|
+
}
|
109
|
+
}
|
110
|
+
}
|
111
|
+
|
112
|
+
$define-grid-span-widths:
|
113
|
+
(008.33% ("1/12"))
|
114
|
+
(009.09% ("1/11"))
|
115
|
+
(011.11% ("1/9"))
|
116
|
+
(012.50% ("1/8"))
|
117
|
+
(014.29% ("1/7"))
|
118
|
+
(016.67% ("1/6" "2/12"))
|
119
|
+
(018.18% ("2/11"))
|
120
|
+
(020.00% ("2/10" "1/5"))
|
121
|
+
(022.22% ("2/9"))
|
122
|
+
(025.00% ("3/12" "2/8" "1/4"))
|
123
|
+
(027.27% ("3/11"))
|
124
|
+
(028.57% ("2/7"))
|
125
|
+
(030.00% ("3/10"))
|
126
|
+
(033.33% ("1/3" "2/6" "4/12" "3/9"))
|
127
|
+
(036.36% ("4/11"))
|
128
|
+
(037.50% ("3/8"))
|
129
|
+
(040.00% ("4/10" "2/5"))
|
130
|
+
(041.67% ("5/12"))
|
131
|
+
(042.86% ("3/7"))
|
132
|
+
(044.44% ("4/9"))
|
133
|
+
(045.45% ("5/11"))
|
134
|
+
(050.00% ("4/8" "2/4" "1/2" "5/10" "6/12" "3/6"))
|
135
|
+
(054.55% ("6/11"))
|
136
|
+
(055.56% ("5/9"))
|
137
|
+
(057.14% ("4/7"))
|
138
|
+
(058.33% ("7/12"))
|
139
|
+
(060.00% ("6/10" "3/5"))
|
140
|
+
(062.50% ("5/8"))
|
141
|
+
(063.64% ("7/11"))
|
142
|
+
(066.67% ("6/9" "8/12" "4/6" "2/3"))
|
143
|
+
(070.00% ("7/10"))
|
144
|
+
(071.43% ("5/7"))
|
145
|
+
(072.73% ("8/11"))
|
146
|
+
(075.00% ("3/4" "6/8" "9/12"))
|
147
|
+
(077.78% ("7/9"))
|
148
|
+
(080.00% ("4/5" "8/10"))
|
149
|
+
(081.82% ("9/11"))
|
150
|
+
(083.33% ("5/6" "10/12"))
|
151
|
+
(085.71% ("6/7"))
|
152
|
+
(087.50% ("7/8"))
|
153
|
+
(088.89% ("8/9"))
|
154
|
+
(090.00% ("9/10"))
|
155
|
+
(090.91% ("10/11"))
|
156
|
+
(091.67% ("11/12"))
|
157
|
+
(100.00% ("6/6" "10/10" "9/9" "8/8" "7/7" "11/11" "5/5" "2/2" "1/1" "4/4" "3/3" "12/12"));
|
@@ -0,0 +1,36 @@
|
|
1
|
+
@import "dashy/list";
|
2
|
+
|
3
|
+
$directions-horizontal:
|
4
|
+
up
|
5
|
+
down
|
6
|
+
;
|
7
|
+
|
8
|
+
$directions-vertical:
|
9
|
+
left
|
10
|
+
right
|
11
|
+
;
|
12
|
+
|
13
|
+
$directions-vectors:
|
14
|
+
(up (+0.0 -1.0))
|
15
|
+
(down (+0.0 +1.0))
|
16
|
+
(left (-1.0 +0.0))
|
17
|
+
(right (+1.0 +0.0))
|
18
|
+
;
|
19
|
+
|
20
|
+
$directions: join($directions-horizontal, $directions-vertical);
|
21
|
+
|
22
|
+
$directions-sides:
|
23
|
+
(up top)
|
24
|
+
(down bottom)
|
25
|
+
(left left)
|
26
|
+
(right right);
|
27
|
+
|
28
|
+
@function direction-vector($dir)
|
29
|
+
{
|
30
|
+
@return list-lookup($directions-vectors, $dir);
|
31
|
+
}
|
32
|
+
|
33
|
+
@function direction-of-side($side)
|
34
|
+
{
|
35
|
+
@return list-lookup($directions-sides, $side);
|
36
|
+
}
|
@@ -0,0 +1,36 @@
|
|
1
|
+
$font-family-garamond: "Garamond", "Baskerville", "Baskerville Old Face", "Hoefler Text", "Times New Roman", "serif";
|
2
|
+
$font-family-lucida-bright: "Lucida Bright", "Georgia", "serif";
|
3
|
+
$font-family-palatino: "Palatino", "Palatino Linotype", "Palatino LT STD", "Book Antiqua", "Georgia", "serif";
|
4
|
+
$font-family-big-caslon: "Big Caslon", "Book Antiqua", "Palatino Linotype", "Georgia", "serif";
|
5
|
+
$font-family-didot: "Didot", "Didot LT STD", "Hoefler Text", "Garamond", "Times New Roman", "serif";
|
6
|
+
$font-family-baskerville: "Baskerville", "Baskerville old face", "Hoefler Text", "Garamond", "Times New Roman", "serif";
|
7
|
+
$font-family-hoefler-text: "Hoefler Text", "Baskerville old face", "Garamond", "Times New Roman", "serif";
|
8
|
+
$font-family-bodoni: "Bodoni MT", "Didot", "Didot LT STD", "Hoefler Text", "Garamond", "Times New Roman", "serif";
|
9
|
+
$font-family-goudy-old-style: "Goudy Old Style", "Garamond", "Big Caslon", "Times New Roman", "serif";
|
10
|
+
$font-family-constantia: "Constantia", "Palatino", "Palatino Linotype", "Palatino LT STD", "Georgia", "serif";
|
11
|
+
$font-family-cambria: "Cambria", "Georgia", "serif";
|
12
|
+
$font-family-book-antiqua: "Book Antiqua", "Palatino", "Palatino Linotype", "Palatino LT STD", "Georgia", "serif";
|
13
|
+
|
14
|
+
$font-family-optima: "Optima", "Segoe", "Segoe UI", "Candara", "Calibri", "Arial", "sans-serif";
|
15
|
+
$font-family-futura: "Futura", "Trebuchet MS", "Arial", "sans-serif";
|
16
|
+
$font-family-gill-sans: "Gill Sans", "Gill Sans MT", "Calibri", "sans-serif";
|
17
|
+
$font-family-trebuchet: "Trebuchet MS", "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "Tahoma", "sans-serif";
|
18
|
+
$font-family-helvetica: "Helvetica Neue", "Arial", "sans-serif";
|
19
|
+
$font-family-verdana: "Verdana", "Geneva", "sans-serif";
|
20
|
+
$font-family-lucida: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "Geneva", "Verdana", "sans-serif";
|
21
|
+
$font-family-geneva: "Geneva", "Tahoma", "Verdana", "sans-serif";
|
22
|
+
$font-family-segoe: "Segoe", "Segoe UI", "Helvetica Neue", "Arial", "sans-serif";
|
23
|
+
$font-family-candara: "Candara", "Calibri", "Segoe", "Segoe UI", "Optima", "Arial", "sans-serif";
|
24
|
+
$font-family-calibri: "Calibri", "Candara", "Segoe", "Segoe UI", "Optima", "Arial", "sans-serif";
|
25
|
+
$font-family-franklin-gothic: "Franklin Gothic Medium", "Arial", "sans-serif";
|
26
|
+
$font-family-tahoma: "Tahoma", "Geneva", "Verdana", "sans-serif";
|
27
|
+
|
28
|
+
$font-family-proxima-nova: "Proxima Nova" /* adobe */, "Montserrat" /* google */, "sans-serif";
|
29
|
+
$font-family-gill-sans: "Gill Sans" /* adobe */, "Lato" /* google */, "sans-serif";
|
30
|
+
|
31
|
+
$font-family-headings: $font-family-hoefler-text;
|
32
|
+
$font-family-body: $font-family-optima;
|
33
|
+
$font-family-labels: $font-family-optima;
|
34
|
+
$font-family-fine-print: $font-family-optima;
|
35
|
+
|
36
|
+
$font-family-avenir: "Avenir", "Nunito" /* google */;
|
@@ -0,0 +1,81 @@
|
|
1
|
+
@function is($val)
|
2
|
+
{
|
3
|
+
@return not is-null($val);
|
4
|
+
}
|
5
|
+
|
6
|
+
@function is-null($val)
|
7
|
+
{
|
8
|
+
@return is-blank($val) or is-empty($val);
|
9
|
+
}
|
10
|
+
|
11
|
+
@function is-blank($val)
|
12
|
+
{
|
13
|
+
@if is-string($val) { @return $val == ""; }
|
14
|
+
@return false;
|
15
|
+
}
|
16
|
+
|
17
|
+
@function is-empty($val)
|
18
|
+
{
|
19
|
+
@if is-list($val) { @return list-length($val) == 0; }
|
20
|
+
@return false;
|
21
|
+
}
|
22
|
+
|
23
|
+
@function is-unitless($val)
|
24
|
+
{
|
25
|
+
@return unitless($val);
|
26
|
+
}
|
27
|
+
|
28
|
+
@function is-unitful($val)
|
29
|
+
{
|
30
|
+
@return is-number($val) and not is-blank(unit($val));
|
31
|
+
}
|
32
|
+
|
33
|
+
@function is-unit($unit, $val)
|
34
|
+
{
|
35
|
+
@return is-number($val) and $unit == unit($val);
|
36
|
+
}
|
37
|
+
|
38
|
+
@function is-px($val)
|
39
|
+
{
|
40
|
+
@return is-unit(px, $val);
|
41
|
+
}
|
42
|
+
|
43
|
+
@function is-em($val)
|
44
|
+
{
|
45
|
+
@return is-unit(em, $val);
|
46
|
+
}
|
47
|
+
|
48
|
+
@function is-ex($val)
|
49
|
+
{
|
50
|
+
@return is-unit(ex, $val);
|
51
|
+
}
|
52
|
+
|
53
|
+
@function is-percent($val)
|
54
|
+
{
|
55
|
+
@return is-unit("%", $val);
|
56
|
+
}
|
57
|
+
|
58
|
+
@function is-number($val)
|
59
|
+
{
|
60
|
+
@return type-of($val) == number;
|
61
|
+
}
|
62
|
+
|
63
|
+
@function is-string($val)
|
64
|
+
{
|
65
|
+
@return type-of($val) == string;
|
66
|
+
}
|
67
|
+
|
68
|
+
@function is-color($val)
|
69
|
+
{
|
70
|
+
@return type-of($val) == color;
|
71
|
+
}
|
72
|
+
|
73
|
+
@function is-boolean($val)
|
74
|
+
{
|
75
|
+
@return type-of($val) == bool;
|
76
|
+
}
|
77
|
+
|
78
|
+
@function is-list($val)
|
79
|
+
{
|
80
|
+
@return type-of($val) == list;
|
81
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
@function line-height-ideal($font-size)
|
2
|
+
{
|
3
|
+
@return $number-golden-ratio * $font-size;
|
4
|
+
}
|
5
|
+
|
6
|
+
@function line-height-optimal($font-size, $line-width)
|
7
|
+
{
|
8
|
+
@return $number-golden-ratio - (1 / $number-golden-ratio-doubled) * (1 - $line-width / number-squared(line-height-ideal($font-size)));
|
9
|
+
}
|
10
|
+
|
@@ -0,0 +1,161 @@
|
|
1
|
+
@function list-append($list, $value, $separator:comma)
|
2
|
+
{
|
3
|
+
@return append($list, $value, $separator);
|
4
|
+
}
|
5
|
+
|
6
|
+
@function list-length($list)
|
7
|
+
{
|
8
|
+
@return length($list);
|
9
|
+
}
|
10
|
+
|
11
|
+
@function list-nth($list, $index)
|
12
|
+
{
|
13
|
+
@return nth($list, $index);
|
14
|
+
}
|
15
|
+
|
16
|
+
@function list-first($list)
|
17
|
+
{
|
18
|
+
@return list-nth($list, 1);
|
19
|
+
}
|
20
|
+
|
21
|
+
@function list-second($list)
|
22
|
+
{
|
23
|
+
@return list-nth($list, 2);
|
24
|
+
}
|
25
|
+
|
26
|
+
@function list-last($list)
|
27
|
+
{
|
28
|
+
@return list-nth($list, list-length($list));
|
29
|
+
}
|
30
|
+
|
31
|
+
@function list-head ($list)
|
32
|
+
{
|
33
|
+
@return list-first($list);
|
34
|
+
}
|
35
|
+
|
36
|
+
@function list-tail($list)
|
37
|
+
{
|
38
|
+
$result: ();
|
39
|
+
@for $i from 2 through list-length($list)
|
40
|
+
{
|
41
|
+
$result: list-append($result, list-nth($list, $i));
|
42
|
+
}
|
43
|
+
@return $result;
|
44
|
+
}
|
45
|
+
|
46
|
+
@function list-maybe-nth($list, $i)
|
47
|
+
{
|
48
|
+
@if is-list($list)
|
49
|
+
{
|
50
|
+
@if list-length($list) < $i { @return (); }
|
51
|
+
@return list-nth($list, $i);
|
52
|
+
}
|
53
|
+
}
|
54
|
+
|
55
|
+
@function list-maybe-first($list)
|
56
|
+
{
|
57
|
+
@return list-maybe-nth($list, 1);
|
58
|
+
}
|
59
|
+
|
60
|
+
@function list-maybe-second($list)
|
61
|
+
{
|
62
|
+
@return list-maybe-nth($list, 2);
|
63
|
+
}
|
64
|
+
|
65
|
+
@function list-compact($list)
|
66
|
+
{
|
67
|
+
$result: ();
|
68
|
+
@each $item in $list
|
69
|
+
{
|
70
|
+
@if not is-empty($item) and not is-blank($item)
|
71
|
+
{
|
72
|
+
$result: append($result, $item);
|
73
|
+
}
|
74
|
+
}
|
75
|
+
@return $result;
|
76
|
+
}
|
77
|
+
|
78
|
+
@function list-flatten($values)
|
79
|
+
{
|
80
|
+
$result: ();
|
81
|
+
@each $value in $values
|
82
|
+
{
|
83
|
+
@if is-list($value)
|
84
|
+
{
|
85
|
+
@each $x in list-flatten($value) { $result: list-append($result, $x); }
|
86
|
+
}
|
87
|
+
@else
|
88
|
+
{
|
89
|
+
$result: list-append($result, $value);
|
90
|
+
}
|
91
|
+
}
|
92
|
+
@return $result;
|
93
|
+
}
|
94
|
+
|
95
|
+
// search //////////////////////////////////////////////////////////////////
|
96
|
+
|
97
|
+
@function list-contains-none($items, $these)
|
98
|
+
{
|
99
|
+
@return not list-contains-any($items, $these);
|
100
|
+
}
|
101
|
+
|
102
|
+
@function list-contains-any($items, $these)
|
103
|
+
{
|
104
|
+
@each $item in $items
|
105
|
+
{
|
106
|
+
@if list-contains($these, $item) { @return true; }
|
107
|
+
}
|
108
|
+
@return false;
|
109
|
+
}
|
110
|
+
|
111
|
+
@function list-contains($items, $this)
|
112
|
+
{
|
113
|
+
@each $item in $items
|
114
|
+
{
|
115
|
+
@if $this == $item { @return true; }
|
116
|
+
}
|
117
|
+
@return false;
|
118
|
+
}
|
119
|
+
|
120
|
+
@function list-find-by-nth($lists, $i, $val)
|
121
|
+
{
|
122
|
+
@each $list in $lists
|
123
|
+
{
|
124
|
+
@if $val == list-nth($list, $i) { @return $list; }
|
125
|
+
}
|
126
|
+
@return ();
|
127
|
+
}
|
128
|
+
|
129
|
+
@function list-find-by-first($pairs, $first)
|
130
|
+
{
|
131
|
+
@return list-find-by-nth($pairs, 1, $first);
|
132
|
+
}
|
133
|
+
|
134
|
+
@function list-find-by-second($pairs, $second)
|
135
|
+
{
|
136
|
+
@return list-find-by-nth($pairs, 2, $second);
|
137
|
+
}
|
138
|
+
|
139
|
+
@function list-lookup($pairs, $first)
|
140
|
+
{
|
141
|
+
@return list-second(list-find-by-first($pairs, $first));
|
142
|
+
}
|
143
|
+
|
144
|
+
@function list-reverse-lookup($pairs, $second)
|
145
|
+
{
|
146
|
+
@return list-first(list-find-by-second($pairs, $second));
|
147
|
+
}
|
148
|
+
|
149
|
+
@function list-find-opposite($pairs, $first-or-second)
|
150
|
+
{
|
151
|
+
@return list-find-either(list-lookup($pairs, $first-or-second), list-reverse-lookup($pairs, $first-or-second));
|
152
|
+
}
|
153
|
+
|
154
|
+
@function list-find-either($possibilities)
|
155
|
+
{
|
156
|
+
@each $possibility in $possibilities
|
157
|
+
{
|
158
|
+
@if not is-null($possibility) { @return $possibility; }
|
159
|
+
}
|
160
|
+
@return ();
|
161
|
+
}
|