neat 1.1.0 → 1.2.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.
- data/.rspec +2 -0
- data/CONTRIBUTING.md +4 -2
- data/NEWS.md +17 -12
- data/README.md +7 -9
- data/Rakefile +20 -0
- data/app/assets/stylesheets/_neat.scss +8 -0
- data/app/assets/stylesheets/grid/_fill-parent.scss +7 -0
- data/app/assets/stylesheets/grid/_global-variables.scss +4 -0
- data/app/assets/stylesheets/grid/_grid.scss +0 -205
- data/app/assets/stylesheets/grid/_media.scss +51 -0
- data/app/assets/stylesheets/grid/_outer-container.scss +8 -0
- data/app/assets/stylesheets/grid/_pad.scss +8 -0
- data/app/assets/stylesheets/grid/_row.scss +16 -0
- data/app/assets/stylesheets/grid/_shift.scss +6 -0
- data/app/assets/stylesheets/grid/_span-columns.scss +58 -0
- data/app/assets/stylesheets/grid/_to-deprecate.scss +52 -0
- data/lib/neat/version.rb +1 -1
- data/lib/tasks/install.rake +0 -2
- data/neat.gemspec +4 -0
- data/spec/neat/columns_spec.rb +61 -0
- data/spec/neat/container_spec.rb +17 -0
- data/spec/neat/media_spec.rb +47 -0
- data/spec/neat/omega_spec.rb +57 -0
- data/spec/neat/pad_spec.rb +34 -0
- data/spec/neat/row_spec.rb +41 -0
- data/spec/neat/shift_spec.rb +37 -0
- data/spec/spec_helper.rb +25 -0
- data/spec/support/bourbon_support.rb +9 -0
- data/spec/support/matchers/be_contained_in.rb +10 -0
- data/spec/support/matchers/have_rule.rb +33 -0
- data/spec/support/parser_support.rb +9 -0
- data/spec/support/sass_support.rb +10 -0
- data/test/_setup.scss +4 -0
- data/test/media.scss +31 -0
- data/test/omega.scss +35 -0
- data/test/outer-container.scss +7 -0
- data/test/pad.scss +17 -0
- data/test/row.scss +26 -0
- data/test/shift.scss +27 -0
- data/test/span-columns.scss +17 -0
- metadata +108 -13
@@ -0,0 +1,58 @@
|
|
1
|
+
@mixin span-columns($span: $columns of $container-columns, $display: block) {
|
2
|
+
|
3
|
+
$columns: nth($span, 1);
|
4
|
+
$container-columns: container-span($span);
|
5
|
+
$display-table: false;
|
6
|
+
|
7
|
+
@if $container-columns != $grid-columns {
|
8
|
+
$parent-columns: $container-columns;
|
9
|
+
}
|
10
|
+
|
11
|
+
@else {
|
12
|
+
$parent-columns: $grid-columns;
|
13
|
+
}
|
14
|
+
|
15
|
+
@if $container-display-table == true {
|
16
|
+
$display-table: true;
|
17
|
+
}
|
18
|
+
|
19
|
+
@else if $display == table {
|
20
|
+
$display-table: true;
|
21
|
+
}
|
22
|
+
|
23
|
+
@else {
|
24
|
+
$display-table: false;
|
25
|
+
}
|
26
|
+
|
27
|
+
@if $display-table {
|
28
|
+
display: table-cell;
|
29
|
+
padding-right: flex-gutter($container-columns);
|
30
|
+
width: flex-grid($columns, $container-columns) + flex-gutter($container-columns);
|
31
|
+
|
32
|
+
&:last-child {
|
33
|
+
width: flex-grid($columns, $container-columns);
|
34
|
+
padding-right: 0;
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
@else if $display == inline-block {
|
39
|
+
@include inline-block;
|
40
|
+
margin-right: flex-gutter($container-columns);
|
41
|
+
width: flex-grid($columns, $container-columns);
|
42
|
+
|
43
|
+
&:last-child {
|
44
|
+
margin-right: 0;
|
45
|
+
}
|
46
|
+
}
|
47
|
+
|
48
|
+
@else {
|
49
|
+
display: block;
|
50
|
+
float: left;
|
51
|
+
margin-right: flex-gutter($container-columns);
|
52
|
+
width: flex-grid($columns, $container-columns);
|
53
|
+
|
54
|
+
&:last-child {
|
55
|
+
margin-right: 0;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
@@ -0,0 +1,52 @@
|
|
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
|
+
}
|
data/lib/neat/version.rb
CHANGED
data/lib/tasks/install.rake
CHANGED
data/neat.gemspec
CHANGED
@@ -26,4 +26,8 @@ Neat is an open source grid framework built on top of Bourbon with the aim of be
|
|
26
26
|
|
27
27
|
s.add_development_dependency('aruba', '~> 0.4')
|
28
28
|
s.add_development_dependency('rake')
|
29
|
+
s.add_development_dependency('css_parser')
|
30
|
+
s.add_development_dependency('rspec')
|
31
|
+
s.add_development_dependency('rdoc')
|
32
|
+
s.add_development_dependency('bundler')
|
29
33
|
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include span-columns()" do
|
4
|
+
let (:identifier) {"span-columns"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "with argument '6' in a twelve-column grid" do
|
11
|
+
it "sets width in percentage" do
|
12
|
+
expect('.span-columns-default').to have_rule('width: 48.82117%')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "sets gutter in percentage" do
|
16
|
+
expect('.span-columns-default').to have_rule('margin-right: 2.35765%')
|
17
|
+
end
|
18
|
+
|
19
|
+
it "sets display to block" do
|
20
|
+
expect('.span-columns-default').to have_rule('display: block')
|
21
|
+
end
|
22
|
+
|
23
|
+
it "sets float to left" do
|
24
|
+
expect('.span-columns-default').to have_rule('float: left')
|
25
|
+
end
|
26
|
+
|
27
|
+
it "removes gutter from last element" do
|
28
|
+
expect('.span-columns-default:last-child').to have_rule('margin-right: 0')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
32
|
+
context "when nested" do
|
33
|
+
it "sets relative width in percentage" do
|
34
|
+
expect('.span-columns-default .span-columns-nested').to have_rule('width: 30.11389%')
|
35
|
+
end
|
36
|
+
|
37
|
+
it "sets relative gutter in percentage" do
|
38
|
+
expect('.span-columns-default .span-columns-nested').to have_rule('margin-right: 4.82916%')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with argument 'table'" do
|
43
|
+
it "sets display to table-cell" do
|
44
|
+
expect('.span-columns-table').to have_rule('display: table-cell')
|
45
|
+
end
|
46
|
+
|
47
|
+
it "sets padding in percentage" do
|
48
|
+
expect('.span-columns-table').to have_rule('padding-right: 2.35765%')
|
49
|
+
end
|
50
|
+
|
51
|
+
it "substracts gutter from width of last element" do
|
52
|
+
expect('.span-columns-table:last-child').to have_rule('width: 48.82117%')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
context "with argument 'inline-block'" do
|
57
|
+
it "sets display to inline-block" do
|
58
|
+
expect('.span-columns-inline-block').to have_rule('display: inline-block')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include outer-container()" do
|
4
|
+
let (:identifier) {"outer-container"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "adds clearfix" do
|
11
|
+
expect('.container-default:after').to have_rule('clear: both')
|
12
|
+
end
|
13
|
+
|
14
|
+
it "sets max-width" do
|
15
|
+
expect('.container-default').to have_rule('max-width: 960px')
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include media()" do
|
4
|
+
let (:identifier) {"media"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "with argument '481px'" do
|
11
|
+
it "outputs (min-width: 481px)" do
|
12
|
+
expect('.media-default').to be_contained_in('screen and (min-width: 481px)')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "with argument 'max-width 480px'" do
|
17
|
+
it "outputs (max-width: 480px)" do
|
18
|
+
expect('.media-max-width').to be_contained_in('screen and (max-width: 480px)')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with argument 'min-width 320px max-width 480px'" do
|
23
|
+
it "outputs (min-width: 320px) and (max-width: 480px)" do
|
24
|
+
expect('.media-min-max-width').to be_contained_in('screen and (min-width: 320px) and (max-width: 480px)')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with argument '481px, 6'" do
|
29
|
+
it "outputs (min-width: 481px)" do
|
30
|
+
expect('.change-media-context').to be_contained_in('screen and (min-width: 481px)')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "uses a 6-column grid" do
|
34
|
+
expect('.change-media-context').to have_rule('width: 100%')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
context "with argument 'max-width 480px 6'" do
|
39
|
+
it "outputs (max-width: 480px)" do
|
40
|
+
expect('.change-media-context-shorthand').to be_contained_in('screen and (max-width: 480px)')
|
41
|
+
end
|
42
|
+
|
43
|
+
it "uses a 6-column grid" do
|
44
|
+
expect('.change-media-context').to have_rule('width: 100%')
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include omega()" do
|
4
|
+
let (:identifier) {"omega"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "with no argument" do
|
11
|
+
it "removes right margin" do
|
12
|
+
expect('.omega-default').to have_rule('margin-right: 0')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "with argument 'table'" do
|
17
|
+
it "removes right padding" do
|
18
|
+
expect('.omega-table').to have_rule('padding-right: 0')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with argument 'block, left'" do
|
23
|
+
it "removes left margin" do
|
24
|
+
expect('.omega-block-left').to have_rule('margin-left: 0')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with argument 'table, left'" do
|
29
|
+
it "removes left padding" do
|
30
|
+
expect('.omega-table-left').to have_rule('padding-left: 0')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with argument '4n'" do
|
35
|
+
it "removes right margin of nth-child(4n)" do
|
36
|
+
expect('.omega-nth-default:nth-child(4n)').to have_rule('margin-right: 0')
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "with argument '4n table'" do
|
41
|
+
it "removes right padding of nth-child(4n)" do
|
42
|
+
expect('.omega-nth-table:nth-child(4n)').to have_rule('padding-right: 0')
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
context "with argument '4n block, left'" do
|
47
|
+
it "removes left margin of nth-child(4n)" do
|
48
|
+
expect('.omega-nth-default-left:nth-child(4n)').to have_rule('margin-left: 0')
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
context "with argument '4n table, left'" do
|
53
|
+
it "removes left padding of nth-child(4n)" do
|
54
|
+
expect('.omega-nth-table-left:nth-child(4n)').to have_rule('padding-left: 0')
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include pad()" do
|
4
|
+
let (:identifier) {"pad"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "with no argument" do
|
11
|
+
it "sets padding to gutter percentage" do
|
12
|
+
expect('.pad-default').to have_rule('padding: 2.35765%')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "with argument '20px'" do
|
17
|
+
it "sets padding to '20px'" do
|
18
|
+
expect('.pad-explicit').to have_rule('padding: 20px')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with argument '30px 20px 10px 5px'" do
|
23
|
+
it "sets padding to '30px 20px 10px 5px'" do
|
24
|
+
expect('.pad-shorthand').to have_rule('padding: 30px 20px 10px 5px')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "with argument 'default' keyword" do
|
29
|
+
it "replaces 'default' with gutter percentage" do
|
30
|
+
expect('.pad-shorthand-default').to have_rule('padding: 30px 2.35765% 10px 2.35765%')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include row()" do
|
4
|
+
let (:identifier) {"row"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "with no argument" do
|
11
|
+
it "adds clearfix" do
|
12
|
+
expect('.row-default:after').to have_rule('clear: both')
|
13
|
+
end
|
14
|
+
|
15
|
+
it "sets display to block" do
|
16
|
+
expect('.row-default').to have_rule('display: block')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
context "with argument 'table'" do
|
21
|
+
it "sets display to table" do
|
22
|
+
expect('.row-table').to have_rule('display: table')
|
23
|
+
end
|
24
|
+
|
25
|
+
it "forces table-cell display on child elements" do
|
26
|
+
expect('.row-table-reset .block-child').to have_rule('display: table-cell')
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
context "with reset-display()" do
|
31
|
+
it "resets display to block" do
|
32
|
+
expect('.no-row').to have_rule('display: block')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
context "with invalid display argument" do
|
37
|
+
it "sets display to block" do
|
38
|
+
expect('.row-invalid-display').to have_rule('display: block')
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "@include shift()" do
|
4
|
+
let (:identifier) {"shift"}
|
5
|
+
|
6
|
+
before(:all) do
|
7
|
+
ParserSupport.parse_file(identifier)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "with no argument" do
|
11
|
+
it "shifts element one column to the left" do
|
12
|
+
expect('.shift-default').to have_rule('margin-left: 8.5298%')
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
context "with argument '2'" do
|
17
|
+
it "shifts element 2 column to the left" do
|
18
|
+
expect('.shift-positive').to have_rule('margin-left: 17.05961%')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
context "with argument '-3'" do
|
23
|
+
it "shifts element 3 column to the right" do
|
24
|
+
expect('.shift-negative').to have_rule('margin-left: -25.58941%')
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when nested" do
|
29
|
+
it "shifts element relative to its parent" do
|
30
|
+
expect('.shifted-parent .shifted-child').to have_rule('margin-left: 34.94305%')
|
31
|
+
end
|
32
|
+
|
33
|
+
it "resets nesting context" do
|
34
|
+
expect('.post-nested-shift').to have_rule('margin-left: 17.05961%')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,25 @@
|
|
1
|
+
$LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
|
2
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__))
|
3
|
+
require 'rspec'
|
4
|
+
require 'neat'
|
5
|
+
require 'aruba/api'
|
6
|
+
require 'css_parser'
|
7
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
8
|
+
|
9
|
+
RSpec.configure do |config|
|
10
|
+
config.include BourbonSupport
|
11
|
+
config.include SassSupport
|
12
|
+
config.include CssParser
|
13
|
+
config.include ParserSupport
|
14
|
+
config.include Aruba::Api
|
15
|
+
|
16
|
+
config.before(:all) do
|
17
|
+
install_bourbon_files
|
18
|
+
generate_css
|
19
|
+
end
|
20
|
+
|
21
|
+
config.after(:all) do
|
22
|
+
remove_bourbon_files
|
23
|
+
clean_up
|
24
|
+
end
|
25
|
+
end
|