dashy 0.0.1
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/.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
|
+
}
|