singularitygs 0.1.alpha → 1.0.alpha.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.
Files changed (42) hide show
  1. data/lib/singularitygs.rb +2 -2
  2. data/stylesheets/_singularitygs.scss +68 -0
  3. data/stylesheets/singularitygs/_background-grid.scss +49 -0
  4. data/stylesheets/singularitygs/_column.scss +51 -0
  5. data/stylesheets/singularitygs/_grid-plugins.scss +3 -0
  6. data/stylesheets/singularitygs/{_grid-test.sass → _grid-test.scss} +22 -13
  7. data/stylesheets/singularitygs/_grid.scss +6 -0
  8. data/stylesheets/singularitygs/_gutter.scss +45 -0
  9. data/stylesheets/singularitygs/_helpers.scss +3 -0
  10. data/stylesheets/singularitygs/_mixins.scss +7 -0
  11. data/stylesheets/singularitygs/grid-plugins/_compound.scss +49 -0
  12. data/stylesheets/singularitygs/grid-plugins/_ratio-spiral.scss +42 -0
  13. data/stylesheets/singularitygs/grid-plugins/_ratio.scss +4 -0
  14. data/stylesheets/singularitygs/grid-structure/_display-table.scss +1 -0
  15. data/stylesheets/singularitygs/grid-structure/_flexbox.scss +0 -0
  16. data/stylesheets/singularitygs/grid-structure/_float.scss +94 -0
  17. data/stylesheets/singularitygs/grid-structure/_grid-layout.scss +1 -0
  18. data/stylesheets/singularitygs/grid-structure/_isolation.scss +145 -0
  19. data/stylesheets/singularitygs/helpers/_grids.scss +34 -0
  20. data/stylesheets/singularitygs/helpers/_gridsets.scss +362 -0
  21. data/stylesheets/singularitygs/helpers/_lists.scss +29 -0
  22. data/stylesheets/singularitygs/mixins/_base-font-size.scss +63 -0
  23. data/stylesheets/singularitygs/mixins/_container.scss +63 -0
  24. data/stylesheets/singularitygs/mixins/_grid-build.scss +16 -0
  25. data/stylesheets/singularitygs/mixins/_grid-objects.scss +26 -0
  26. data/stylesheets/singularitygs/mixins/_grid-padding.scss +8 -0
  27. data/stylesheets/singularitygs/mixins/_grid-span.scss +9 -0
  28. data/stylesheets/singularitygs/mixins/_push-pull.scss +41 -0
  29. data/templates/project/behaviors/box-sizing/boxsizing.htc +399 -0
  30. data/templates/project/behaviors/box-sizing/boxsizing.php +23 -0
  31. data/templates/project/manifest.rb +4 -0
  32. metadata +39 -22
  33. data/stylesheets/singularitygs.sass +0 -40
  34. data/stylesheets/singularitygs/_background-grid.sass +0 -19
  35. data/stylesheets/singularitygs/_column.sass +0 -25
  36. data/stylesheets/singularitygs/_grid-plugins.sass +0 -2
  37. data/stylesheets/singularitygs/_grid.sass +0 -2
  38. data/stylesheets/singularitygs/_gridsets.scss +0 -242
  39. data/stylesheets/singularitygs/_gutter.sass +0 -4
  40. data/stylesheets/singularitygs/_helpers.sass +0 -37
  41. data/stylesheets/singularitygs/_mixins.sass +0 -75
  42. data/stylesheets/singularitygs/grid-plugins/_compound.sass +0 -30
data/lib/singularitygs.rb CHANGED
@@ -5,6 +5,6 @@ require 'breakpoint'
5
5
  Compass::Frameworks.register("singularitygs", :path => "#{File.dirname(__FILE__)}/..")
6
6
 
7
7
  module SingularityGS
8
- VERSION = "0.1.alpha"
9
- DATE = "2012-08-06"
8
+ VERSION = "1.0.alpha.0"
9
+ DATE = "2012-11-06"
10
10
  end
@@ -0,0 +1,68 @@
1
+ /*! SINGULARITY -- http://singularity.gs/ */
2
+ @import "compass";
3
+ @import "modular-scale";
4
+ @import "breakpoint";
5
+
6
+ // Singularity debug output
7
+ $singularity-debug: false !default;
8
+
9
+ // Can be a number or a list of non-uniform column widths
10
+ $columns: 12 !default;
11
+
12
+ // Must be of the same unit type of defined columns
13
+ $gutter: .25 !default;
14
+
15
+ // Grid padding can be any type of unit
16
+ $padding: 0 !default;
17
+
18
+ // Layout direction?
19
+ // options are ltr, rtl, both
20
+ $dir: ltr !default;
21
+
22
+ // Choose a selector for rtl layouts when using 'both'
23
+ $rtl-selector: '[dir="rtl"]' !default;
24
+
25
+ // Options for Multiple Grids
26
+ $grids: () !default;
27
+ $gutters: () !default;
28
+ $paddings: () !default;
29
+
30
+ $grids-mobile-first: true !default;
31
+
32
+ // Container Nonsense
33
+ $container: 100% !default;
34
+ $containers: () !default;
35
+ $container-to-ems: false !default;
36
+
37
+ // Base Font Size
38
+ $base-font-size: 1em !default;
39
+
40
+ // Structural templates for grid
41
+ $grouped-styles: false !default;
42
+ $output: 'isolation' !default;
43
+ @import "singularitygs/grid-structure/isolation";
44
+ @import "singularitygs/grid-structure/float";
45
+
46
+ // Helpers return think like list sums and column counts
47
+ @import "singularitygs/helpers";
48
+
49
+ // Compound grid calculation function
50
+ @import "singularitygs/grid-plugins";
51
+
52
+ // Column math is isolated
53
+ @import "singularitygs/column";
54
+
55
+ // Gutter math is isolated
56
+ @import "singularitygs/gutter";
57
+
58
+ // Grid math combines column and gutter math
59
+ @import "singularitygs/grid";
60
+
61
+ // Mixins to write
62
+ @import "singularitygs/mixins";
63
+
64
+ // Mixins to write
65
+ @import "singularitygs/grid-test";
66
+
67
+ // Mixins to write
68
+ @import "singularitygs/background-grid";
@@ -0,0 +1,49 @@
1
+ // Write stops for single columns
2
+ @function grid-gradient-stop($location, $columns, $gutter, $color) {
3
+ @if $location == 1 {
4
+ @return $color 0%, $color column-span(1, 1, $columns), transparentize($color, 1) column-span(1, 1, $columns);
5
+ }
6
+ @if $location == column-count($columns) {
7
+ @return transparentize($color, 1) column-span($location - 1, 1, $columns) + gutter-span($gutter, $columns), $color column-span($location - 1, 1, $columns) + gutter-span($gutter, $columns), $color 100%;
8
+ }
9
+ @if $location > 1 {
10
+ @return transparentize($color, 1) column-span($location - 1, 1, $columns) + gutter-span($gutter, $columns), $color column-span($location - 1, 1, $columns) + gutter-span($gutter, $columns), $color column-span($location, 1, $columns), transparentize($color, 1) column-span($location, 1, $columns);
11
+ }
12
+ }
13
+
14
+ // Compiling grid stops
15
+ @function grid-gradient-stops($columns, $gutter, $color) {
16
+ $list: ();
17
+ @for $i from 1 through column-count($columns) {
18
+ $list: join($list, grid-gradient-stop($i, $columns, $gutter, $color), comma);
19
+ }
20
+ @return $list;
21
+ }
22
+
23
+ // Pull in grid stops to make a background gradient
24
+ @mixin background-grid($columns: false, $gutter: false, $color: rgba(#69aedb, 0.5)) {
25
+ $gl: length($grids);
26
+
27
+ @if $gl == 0 {
28
+ $columns: find-grid($columns);
29
+ $gutter: find-gutter($gutter);
30
+ @include background(linear-gradient(left, grid-gradient-stops($columns, $gutter, $color)));
31
+ }
32
+ @else {
33
+ @for $i from 1 through $gl {
34
+ @if $i == 1 {
35
+ $grid: nth($grids, 1);
36
+ $gutter: find-gutter($gutter);
37
+ @include background(linear-gradient(left, grid-gradient-stops($grid, $gutter, $color)));
38
+ }
39
+ @else {
40
+ $grid: nth(nth($grids, $i), 1);
41
+ $mq: nth(nth($grids, $i), 2);
42
+ @include breakpoint($mq) {
43
+ $gutter: find-gutter($gutter);
44
+ @include background(linear-gradient(left, grid-gradient-stops($grid, $gutter, $color)));
45
+ }
46
+ }
47
+ }
48
+ }
49
+ }
@@ -0,0 +1,51 @@
1
+ // Calculate the width spanning multiple columns
2
+ @function column-span($span, $location: 1, $columns: $columns, $gutter: $gutter) {
3
+ // if the gutter is a percent, convert it to a ratio
4
+
5
+ @if unit($gutter) == '%' {
6
+ $gutter: percentage-gutter-conversion($gutter, $columns);
7
+ }
8
+
9
+ // gutters are a type of column
10
+ $columns-and-gutters: column-sum($columns, $gutter);
11
+
12
+ // Equal width columns
13
+ @if type-of($columns) == number {
14
+ $span-and-gutter: $span + (($span - 1) * $gutter);
15
+ @return $span-and-gutter / $columns-and-gutters * 100%;
16
+ }
17
+ // Variable width columns
18
+ @if type-of($columns) == list {
19
+ // zero out initial sum
20
+ $sum: 0;
21
+ $holder: ();
22
+ // from start point to end point
23
+ @for $i from $location to $location + $span {
24
+ $holder: append($holder, nth(nth($columns, $i), 1), comma);
25
+ }
26
+
27
+ @return column-sum($holder, $gutter) / $columns-and-gutters * 100%;
28
+ }
29
+
30
+ @return 10%;
31
+ }
32
+
33
+ @function column-sum($columns: $columns, $gutter: $gutter) {
34
+
35
+ // if the gutter is a percent, convert it to a ratio
36
+ @if unit($gutter) == percentage {
37
+ $gutter: percentage-gutter-conversion($gutter, $columns);
38
+ }
39
+
40
+ @if type-of($columns) == 'number' {
41
+ @return $columns + ((column-count($columns) - 1) * $gutter);
42
+ }
43
+ @else if type-of($columns) == 'list' {
44
+ $sum: 0;
45
+ @each $column in $columns {
46
+ $sum: $sum + nth($column, 1);
47
+ }
48
+ $sum: $sum + (column-count($columns) - 1) * $gutter;
49
+ @return $sum;
50
+ }
51
+ }
@@ -0,0 +1,3 @@
1
+ @import "grid-plugins/compound";
2
+ @import "grid-plugins/ratio-spiral";
3
+ @import "grid-plugins/ratio";
@@ -1,16 +1,25 @@
1
- =test-grid($columns: $columns, $gutter: $gutter, $padding: $padding, $prefix: a, $color: #6bb)
2
- .test-grid
3
- height: 200px
4
- width: 100%
5
- $grid-counter: 1
6
- @for $i from 1 through column-count($columns)
7
- .test.#{$prefix}#{$i}
8
- height: 100%
9
- +grid-span(1, $i, $columns: $columns, $gutter: $gutter, $padding: $padding)
10
- background-color: transparentize($color, .5)
11
- .inner
12
- height: 100%
13
- background-color: transparentize($color, .5)
1
+ @mixin test-grid($columns: $columns, $gutter: $gutter, $padding: $padding, $prefix: a, $color: #66bbbb) {
2
+ .test-grid {
3
+ height: 200px;
4
+ width: 100%;
5
+ }
6
+ $grid-counter: 1;
7
+ @for $i from 1 through column-count($columns) {
8
+ .test.#{$prefix}#{$i} {
9
+ height: 100%;
10
+ @include grid-span(1, $i, $columns, $gutter, $padding);
11
+ // ie fallback
12
+ background-color: $color;
13
+ background-color: transparentize($color, 0.5);
14
+ .inner {
15
+ height: 100%;
16
+ // ie fallback
17
+ background-color: lighten($color, 10%);
18
+ background-color: transparentize($color, 0.5);
19
+ }
20
+ }
21
+ }
22
+ }
14
23
 
15
24
  // Need this markup to test
16
25
  //<div class="test-grid">
@@ -0,0 +1,6 @@
1
+ @function grid-span($span, $location: 1, $columns: false, $gutter: false) {
2
+ $columns: find-grid($columns);
3
+ $gutter: find-gutter($gutter);
4
+
5
+ @return column-span($span, $location, $columns, $gutter);
6
+ }
@@ -0,0 +1,45 @@
1
+ // percentage conversion
2
+ @function percentage-gutter-conversion($percent-gutter, $columns) {
3
+
4
+ // find the resolution of the grids
5
+ $resolution: 0;
6
+ @if length($columns) == 1 {
7
+ $resolution: $columns;
8
+ }
9
+ @else {
10
+ @each $column in $columns {
11
+ $resolution: $resolution + $column;
12
+ }
13
+ }
14
+
15
+ // divide the percentage gutter by 100% to get the offset
16
+ // then multiply be resolution for the full conversion
17
+ $new-gutter: ($percent-gutter / 100%) * $resolution;
18
+
19
+ @return $new-gutter;
20
+ }
21
+
22
+
23
+ // Gutters to be removed from columns
24
+ @function gutter-offset($gutter, $columns) {
25
+
26
+ // if the gutter is a percent, convert it to a ratio
27
+ @if unit($gutter) == percentage {
28
+ $gutter: percentage-gutter-conversion($gutter, $columns);
29
+ }
30
+
31
+ $gutter-sum: $gutter * (column-count($columns) - 1);
32
+ @return $gutter-sum / column-count($columns);
33
+ }
34
+
35
+ @function gutter-span($gutter, $columns) {
36
+
37
+ // if the gutter is a percent, convert it to a ratio
38
+ @if unit($gutter) == percentage {
39
+ $gutter: percentage-gutter-conversion($gutter, $columns);
40
+ }
41
+
42
+ $columns-and-gutters: column-sum($columns, $gutter);
43
+
44
+ @return $gutter / $columns-and-gutters * 100%;
45
+ }
@@ -0,0 +1,3 @@
1
+ @import "helpers/lists";
2
+ @import "helpers/grids";
3
+ @import "helpers/gridsets";
@@ -0,0 +1,7 @@
1
+ @import 'mixins/grid-span';
2
+ @import 'mixins/base-font-size';
3
+ @import 'mixins/grid-build';
4
+ @import 'mixins/container';
5
+ @import 'mixins/grid-objects';
6
+ @import 'mixins/grid-padding';
7
+ @import "mixins/push-pull";
@@ -0,0 +1,49 @@
1
+ // 16 arguments can be passed into this function
2
+ // a max of 16 comma seperated grids
3
+ @function compound($cg1: 1, $cg2: 1, $cg3: 1, $cg4: 1, $cg5: 1, $cg6: 1, $cg7: 1, $cg8: 1, $cg9: 1, $cg10: 1, $cg11: 1, $cg12: 1, $cg13: 1, $cg14: 1, $cg15: 1, $cg16: 1) {
4
+
5
+ // merge arguments into a single list.
6
+ $compound-grids: $cg1, $cg2, $cg3, $cg4, $cg5, $cg6, $cg7, $cg8, $cg9, $cg10, $cg11, $cg12, $cg13, $cg14, $cg15, $cg16;
7
+
8
+ // Find the base resolution of grid
9
+ $resolution: 1;
10
+ @each $item in $compound-grids {
11
+ $resolution: $resolution * $item;
12
+ }
13
+
14
+ $compound-grid: ();
15
+ $compound-counter: 1;
16
+ // cycle through each step in grid resolution
17
+ @for $i from 1 through $resolution {
18
+
19
+ // dont add a column by default
20
+ $add-col: false;
21
+
22
+ // cycle through all grids to see if any grids match
23
+ @each $grid in $compound-grids {
24
+
25
+ // if the grid divides evenly into the resolution, add a column
26
+ // divide the resolution by number of columns to get the column resolution
27
+ @if $i / ($resolution / $grid) == round($i / ($resolution / $grid)) {
28
+ $add-col: true;
29
+ }
30
+ }
31
+
32
+ // add the counter value to the compound grid list, reset counter
33
+ // this marks where one column ends and a new one begins
34
+ @if $add-col {
35
+ $compound-grid: join($compound-grid, $compound-counter, comma);
36
+ $compound-counter: 1;
37
+ }
38
+ // if no column is added, bump up counter
39
+ @else {
40
+ $compound-counter: $compound-counter + 1;
41
+ }
42
+ }
43
+
44
+ @if $singularity-debug {
45
+ @debug "Grid compounded to #{length($compound-grid)} columns";
46
+ }
47
+
48
+ @return $compound-grid;
49
+ }
@@ -0,0 +1,42 @@
1
+ // centralize spiral steps.
2
+ @function ratio-spiral-i($i) {
3
+ @return (($i * 2) + 1);
4
+ }
5
+
6
+ @function ratio-spiral($depth: 5, $ratio: golden(), $invert: false) {
7
+
8
+ // write the middle most column, a little out of step from the other columns.
9
+ $list: ms(ratio-spiral-i(-$depth) + 1, 100, $ratio);
10
+
11
+ // flip the direction the order columns are written in.
12
+ @if $invert == false {
13
+ @for $i from -($depth - 1) to 0 {
14
+ // if the number is even
15
+ @if $i/2 == round($i/2) {
16
+ // append after the list
17
+ $list: append($list, ms(ratio-spiral-i($i), 100, $ratio));
18
+ }
19
+ @else {
20
+ // append before the list
21
+ $list: append(ms(ratio-spiral-i($i), 100, $ratio), $list);
22
+ }
23
+ }
24
+ }
25
+
26
+ @else {
27
+ @for $i from -($depth - 1) to 0 {
28
+ @if $i/2 == round($i/2) {
29
+ $list: append(ms(ratio-spiral-i($i), 100, $ratio), $list);
30
+ }
31
+ @else {
32
+ $list: append($list, ms(ratio-spiral-i($i), 100, $ratio));
33
+ }
34
+ }
35
+ }
36
+
37
+ @if $singularity-debug {
38
+ @debug "Grid compounded to #{length($list)} columns";
39
+ }
40
+
41
+ @return $list;
42
+ }
@@ -16,5 +16,9 @@
16
16
  $return: reverse($return);
17
17
  }
18
18
 
19
+ @if $singularity-debug {
20
+ @debug "Grid compounded to #{length($return)} columns";
21
+ }
22
+
19
23
  @return $return;
20
24
  }
@@ -0,0 +1,94 @@
1
+ @mixin float-clear($dir) {
2
+ @if $dir == 'left' {
3
+ clear: right;
4
+ }
5
+ @else if $dir == 'right' {
6
+ clear: left;
7
+ }
8
+ @else if $dir == 'both' {
9
+ clear: both;
10
+ }
11
+
12
+ @include clearfix;
13
+ }
14
+
15
+ @mixin float-common($columns: $columns, $gutter: $gutter, $padding: $padding, $grouped-styles: $grouped-styles) {
16
+ @include box-sizing(border-box);
17
+ *behavior: url("../behaviors/box-sizing/boxsizing.php");
18
+ overflow: hidden;
19
+ *zoom: 1;
20
+
21
+ @if $grouped-styles and $padding != 0 {
22
+ padding-left: $padding;
23
+ padding-right: $padding;
24
+ }
25
+ @if $grouped-styles == false and $padding != 0 {
26
+
27
+ }
28
+ }
29
+
30
+
31
+
32
+ @mixin float-section($span, $location: $grid-counter, $columns: $columns, $gutter: $gutter, $padding: $padding, $grouped-styles: $grouped-styles) {
33
+ width: grid-span($span, $location, $columns, $gutter);
34
+ // add special left padding
35
+ @include grid-location($span, $location, $columns);
36
+
37
+ @if $dir == ltr or $dir == both {
38
+ @if $grid-location == 'middle' or $grid-location == 'first'{
39
+ float: left;
40
+ margin-right: gutter-span($gutter, $columns);
41
+ }
42
+ @else if $grid-location == 'last' {
43
+ float: right;
44
+ }
45
+ @include float-clear('left');
46
+ }
47
+ @if $dir == rtl {
48
+ @if $grid-location == 'middle' or $grid-location == 'first' {
49
+ float: right;
50
+ margin-left: gutter-span($gutter, $columns);
51
+ }
52
+ @else if $grid-location == 'last' {
53
+ float: left;
54
+ }
55
+ @include float-clear('right');
56
+ }
57
+ @if $dir == both {
58
+ #{$rtl-selector} & {
59
+ @if $grid-location == 'middle' or $grid-location == 'first' {
60
+ float: right;
61
+ margin-left: gutter-span($gutter, $columns);
62
+ }
63
+ @else if $grid-location == 'last' {
64
+ float: left;
65
+ }
66
+ @include float-clear('right');
67
+ }
68
+ }
69
+
70
+ // Padding
71
+ @if type-of($columns) == list {
72
+ @if type-of(nth($columns, $location)) == list {
73
+ padding-left: nth(nth($columns, $location), 2);
74
+ }
75
+ @else if $padding != 0 {
76
+ padding-left: $padding;
77
+ }
78
+ // add special right padding
79
+ @if type-of(nth($columns, $location + $span - 1)) == list {
80
+ padding-right: nth(nth($columns, $location + $span - 1), 2);
81
+ }
82
+ @else if $padding != 0 {
83
+ padding-right: $padding;
84
+ }
85
+ }
86
+ }
87
+
88
+ @mixin float-structure($span, $location, $columns, $gutter, $padding) {
89
+ // common components
90
+ @include float-common($columns, $gutter);
91
+
92
+ // specific styles
93
+ @include float-section($span, $location, $columns, $gutter);
94
+ }