archetype 0.0.1.pre.1 → 0.0.1.pre.3.00dfd9a

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 (185) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +88 -0
  3. data/LICENSE +16 -0
  4. data/README.md +87 -1
  5. data/VERSION.yml +6 -0
  6. data/lib/README.rdoc +4 -0
  7. data/lib/archetype.rb +45 -0
  8. data/lib/archetype/functions.rb +9 -0
  9. data/lib/archetype/functions/hash.rb +149 -0
  10. data/lib/archetype/functions/helpers.rb +125 -0
  11. data/lib/archetype/functions/styleguide_memoizer.rb +61 -0
  12. data/lib/archetype/sass_extensions.rb +6 -0
  13. data/lib/archetype/sass_extensions/functions.rb +14 -0
  14. data/lib/archetype/sass_extensions/functions/environment.rb +14 -0
  15. data/lib/archetype/sass_extensions/functions/lists.rb +284 -0
  16. data/lib/archetype/sass_extensions/functions/locale.rb +77 -0
  17. data/lib/archetype/sass_extensions/functions/numbers.rb +19 -0
  18. data/lib/archetype/sass_extensions/functions/styleguide.rb +406 -0
  19. data/lib/archetype/sass_extensions/functions/ui.rb +59 -0
  20. data/lib/archetype/sass_extensions/functions/version.rb +95 -0
  21. data/lib/archetype/version.rb +75 -0
  22. data/stylesheets/_archetype.scss +2 -0
  23. data/stylesheets/archetype/_base.scss +46 -0
  24. data/stylesheets/archetype/_config.scss +366 -0
  25. data/stylesheets/archetype/_grid.scss +3 -0
  26. data/stylesheets/archetype/_hacks.scss +72 -0
  27. data/stylesheets/archetype/_init.scss +23 -0
  28. data/stylesheets/archetype/_styleguide.scss +6 -0
  29. data/stylesheets/archetype/_ui.scss +326 -0
  30. data/stylesheets/archetype/_util.scss +12 -0
  31. data/stylesheets/archetype/base/_h5bp.scss +307 -0
  32. data/stylesheets/archetype/base/_hybrid.scss +25 -0
  33. data/stylesheets/archetype/base/_normalize.scss +595 -0
  34. data/stylesheets/archetype/base/_reset.scss +72 -0
  35. data/stylesheets/archetype/grid/_config.scss +14 -0
  36. data/stylesheets/archetype/grid/_grid.scss +391 -0
  37. data/stylesheets/archetype/styleguide/_components.scss +25 -0
  38. data/stylesheets/archetype/styleguide/_helpers.scss +215 -0
  39. data/stylesheets/archetype/styleguide/_primitives.scss +10 -0
  40. data/stylesheets/archetype/styleguide/_styleguide.scss +41 -0
  41. data/stylesheets/archetype/styleguide/components/_alerts.scss +59 -0
  42. data/stylesheets/archetype/styleguide/components/_annotations.scss +27 -0
  43. data/stylesheets/archetype/styleguide/components/_bristol.scss +15 -0
  44. data/stylesheets/archetype/styleguide/components/_button_groups.scss +47 -0
  45. data/stylesheets/archetype/styleguide/components/_button_toolbars.scss +17 -0
  46. data/stylesheets/archetype/styleguide/components/_buttons.scss +338 -0
  47. data/stylesheets/archetype/styleguide/components/_canvas.scss +15 -0
  48. data/stylesheets/archetype/styleguide/components/_carets.scss +336 -0
  49. data/stylesheets/archetype/styleguide/components/_closes.scss +63 -0
  50. data/stylesheets/archetype/styleguide/components/_container.scss +27 -0
  51. data/stylesheets/archetype/styleguide/components/_copy.scss +85 -0
  52. data/stylesheets/archetype/styleguide/components/_flyouts.scss +52 -0
  53. data/stylesheets/archetype/styleguide/components/_headings.scss +33 -0
  54. data/stylesheets/archetype/styleguide/components/_headlines.scss +63 -0
  55. data/stylesheets/archetype/styleguide/components/_hovercards.scss +27 -0
  56. data/stylesheets/archetype/styleguide/components/_icons.scss +17 -0
  57. data/stylesheets/archetype/styleguide/components/_identities.scss +34 -0
  58. data/stylesheets/archetype/styleguide/components/_links.scss +66 -0
  59. data/stylesheets/archetype/styleguide/components/_loaders.scss +154 -0
  60. data/stylesheets/archetype/styleguide/components/_menu_items.scss +31 -0
  61. data/stylesheets/archetype/styleguide/components/_module.scss +15 -0
  62. data/stylesheets/archetype/styleguide/components/_pullquotes.scss +29 -0
  63. data/stylesheets/archetype/styleguide/components/_punchcut.scss +18 -0
  64. data/stylesheets/archetype/styleguide/components/_tooltips.scss +28 -0
  65. data/stylesheets/archetype/styleguide/primitives/_animations.scss +17 -0
  66. data/stylesheets/archetype/styleguide/primitives/_dimensions.scss +50 -0
  67. data/stylesheets/archetype/styleguide/primitives/_glyphs.scss +11 -0
  68. data/stylesheets/archetype/styleguide/primitives/_misc.scss +8 -0
  69. data/stylesheets/archetype/styleguide/primitives/_palettes.scss +94 -0
  70. data/stylesheets/archetype/styleguide/primitives/_shadows.scss +23 -0
  71. data/stylesheets/archetype/styleguide/primitives/_sprites.scss +46 -0
  72. data/stylesheets/archetype/styleguide/primitives/_textures.scss +10 -0
  73. data/stylesheets/archetype/styleguide/primitives/_typography.scss +56 -0
  74. data/stylesheets/archetype/util/_debug.scss +40 -0
  75. data/stylesheets/archetype/util/_lists.scss +57 -0
  76. data/stylesheets/archetype/util/_misc.scss +108 -0
  77. data/stylesheets/archetype/util/_rtl.scss +279 -0
  78. data/stylesheets/archetype/util/_spacing.scss +78 -0
  79. data/stylesheets/archetype/util/_styles.scss +466 -0
  80. data/stylesheets/archetype/util/_targeting.scss +210 -0
  81. data/stylesheets/archetype/util/_units.scss +18 -0
  82. data/templates/example/index.html +40 -0
  83. data/templates/example/manifest.rb +13 -0
  84. data/templates/example/screen.scss +99 -0
  85. data/templates/example/vendor/archetype/animations/loaders/large/large.png +0 -0
  86. data/templates/example/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
  87. data/templates/example/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
  88. data/templates/example/vendor/archetype/animations/loaders/large/large_static.png +0 -0
  89. data/templates/example/vendor/archetype/animations/loaders/medium/medium.png +0 -0
  90. data/templates/example/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
  91. data/templates/example/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
  92. data/templates/example/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
  93. data/templates/example/vendor/archetype/animations/loaders/small/small.png +0 -0
  94. data/templates/example/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
  95. data/templates/example/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
  96. data/templates/example/vendor/archetype/animations/loaders/small/small_static.png +0 -0
  97. data/templates/example/vendor/archetype/fontawesome-webfont.eot +0 -0
  98. data/templates/example/vendor/archetype/fontawesome-webfont.svg +255 -0
  99. data/templates/example/vendor/archetype/fontawesome-webfont.ttf +0 -0
  100. data/templates/example/vendor/archetype/fontawesome-webfont.woff +0 -0
  101. data/templates/project/manifest.rb +9 -0
  102. data/templates/project/screen.scss +1 -0
  103. data/templates/project/vendor/archetype/animations/loaders/large/large.png +0 -0
  104. data/templates/project/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
  105. data/templates/project/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
  106. data/templates/project/vendor/archetype/animations/loaders/large/large_static.png +0 -0
  107. data/templates/project/vendor/archetype/animations/loaders/medium/medium.png +0 -0
  108. data/templates/project/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
  109. data/templates/project/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
  110. data/templates/project/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
  111. data/templates/project/vendor/archetype/animations/loaders/small/small.png +0 -0
  112. data/templates/project/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
  113. data/templates/project/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
  114. data/templates/project/vendor/archetype/animations/loaders/small/small_static.png +0 -0
  115. data/templates/project/vendor/archetype/fontawesome-webfont.eot +0 -0
  116. data/templates/project/vendor/archetype/fontawesome-webfont.svg +255 -0
  117. data/templates/project/vendor/archetype/fontawesome-webfont.ttf +0 -0
  118. data/templates/project/vendor/archetype/fontawesome-webfont.woff +0 -0
  119. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.eot +0 -0
  120. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.svg +255 -0
  121. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.ttf +0 -0
  122. data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.woff +0 -0
  123. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large.png +0 -0
  124. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
  125. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
  126. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_static.png +0 -0
  127. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium.png +0 -0
  128. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
  129. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
  130. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
  131. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small.png +0 -0
  132. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
  133. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
  134. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_static.png +0 -0
  135. data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/sprites/hovercard_tip.png +0 -0
  136. data/test/fixtures/stylesheets/archetype/config.rb +19 -0
  137. data/test/fixtures/stylesheets/archetype/expected/b.css +14 -0
  138. data/test/fixtures/stylesheets/archetype/expected/base.css +349 -0
  139. data/test/fixtures/stylesheets/archetype/expected/hacks/ie_pseudo.css +11 -0
  140. data/test/fixtures/stylesheets/archetype/expected/locale.css +23 -0
  141. data/test/fixtures/stylesheets/archetype/expected/styleguide/buttons.css +2091 -0
  142. data/test/fixtures/stylesheets/archetype/expected/styleguide/fallback_styles.css +9 -0
  143. data/test/fixtures/stylesheets/archetype/expected/styleguide/nested_styleguides.css +24 -0
  144. data/test/fixtures/stylesheets/archetype/expected/styleguide/selective_state.css +174 -0
  145. data/test/fixtures/stylesheets/archetype/expected/ui/glyph_icon.css +37 -0
  146. data/test/fixtures/stylesheets/archetype/expected/ui/hide_element.css +8 -0
  147. data/test/fixtures/stylesheets/archetype/expected/ui/stroke.css +17 -0
  148. data/test/fixtures/stylesheets/archetype/expected/ui/triangle.css +35 -0
  149. data/test/fixtures/stylesheets/archetype/expected/utilities/associative.css +9 -0
  150. data/test/fixtures/stylesheets/archetype/expected/utilities/if-set.css +9 -0
  151. data/test/fixtures/stylesheets/archetype/expected/utilities/spacing/horizontal-spacing.css +29 -0
  152. data/test/fixtures/stylesheets/archetype/expected/utilities/spacing/vertical-spacing.css +29 -0
  153. data/test/fixtures/stylesheets/archetype/expected/utilities/styles/filter.css +11 -0
  154. data/test/fixtures/stylesheets/archetype/expected/utilities/styles/font-family.css +16 -0
  155. data/test/fixtures/stylesheets/archetype/expected/utilities/styles/z-index.css +15 -0
  156. data/test/fixtures/stylesheets/archetype/expected/utilities/targeting/target-browser.css +100 -0
  157. data/test/fixtures/stylesheets/archetype/expected/utilities/targeting/target-os.css +55 -0
  158. data/test/fixtures/stylesheets/archetype/source/b.scss +9 -0
  159. data/test/fixtures/stylesheets/archetype/source/base.scss +3 -0
  160. data/test/fixtures/stylesheets/archetype/source/hacks/ie_pseudo.scss +13 -0
  161. data/test/fixtures/stylesheets/archetype/source/locale.scss +43 -0
  162. data/test/fixtures/stylesheets/archetype/source/styleguide/buttons.scss +18 -0
  163. data/test/fixtures/stylesheets/archetype/source/styleguide/fallback_styles.scss +22 -0
  164. data/test/fixtures/stylesheets/archetype/source/styleguide/nested_styleguides.scss +40 -0
  165. data/test/fixtures/stylesheets/archetype/source/styleguide/selective_state.scss +22 -0
  166. data/test/fixtures/stylesheets/archetype/source/ui/glyph_icon.scss +13 -0
  167. data/test/fixtures/stylesheets/archetype/source/ui/hide_element.scss +5 -0
  168. data/test/fixtures/stylesheets/archetype/source/ui/stroke.scss +13 -0
  169. data/test/fixtures/stylesheets/archetype/source/ui/triangle.scss +13 -0
  170. data/test/fixtures/stylesheets/archetype/source/utilities/associative.scss +24 -0
  171. data/test/fixtures/stylesheets/archetype/source/utilities/if-set.scss +16 -0
  172. data/test/fixtures/stylesheets/archetype/source/utilities/spacing/horizontal-spacing.scss +27 -0
  173. data/test/fixtures/stylesheets/archetype/source/utilities/spacing/vertical-spacing.scss +27 -0
  174. data/test/fixtures/stylesheets/archetype/source/utilities/styles/filter.scss +9 -0
  175. data/test/fixtures/stylesheets/archetype/source/utilities/styles/font-family.scss +9 -0
  176. data/test/fixtures/stylesheets/archetype/source/utilities/styles/z-index.scss +18 -0
  177. data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-browser.scss +70 -0
  178. data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-os.scss +42 -0
  179. data/test/helpers/diff.rb +49 -0
  180. data/test/helpers/io.rb +36 -0
  181. data/test/helpers/test_case.rb +62 -0
  182. data/test/integrations/archetype_test.rb +126 -0
  183. data/test/test_helper.rb +26 -0
  184. data/test/units/sass_extensions_test.rb +207 -0
  185. metadata +303 -15
@@ -0,0 +1,72 @@
1
+ // @category base
2
+
3
+ // leverage the Compass reset functions
4
+ // this is an adaptation of global-reset()
5
+ // @mixin base-reset
6
+ // @param $exclude {List} the list of features to exclude from the reset [html5|page|lists|typography|quotes|embeds|quotes|ime]
7
+ // @link http://compass-style.org/reference/compass/reset/utilities/#mixin-global-reset
8
+ @mixin base-reset($exclude: ()) {
9
+ html, body, div, span, applet, object, iframe,
10
+ h1, h2, h3, h4, h5, h6, p, blockquote, pre,
11
+ a, abbr, acronym, address, big, cite, code,
12
+ del, dfn, em, img, ins, kbd, q, s, samp,
13
+ small, strike, strong, sub, sup, tt, var,
14
+ b, u, i, center,
15
+ dl, dt, dd, ol, ul, li,
16
+ fieldset, form, label, legend,
17
+ table, caption, tbody, tfoot, thead, tr, th, td,
18
+ article, aside, canvas, details, embed,
19
+ figure, figcaption, footer, header, hgroup,
20
+ menu, nav, output, ruby, section, summary,
21
+ time, mark, audio, video {
22
+ // PAGE
23
+ @if(not index($exclude, reset-page)) {
24
+ @include reset-box-model();
25
+ }
26
+ // TYPOGRAPHY
27
+ @if(not index($exclude, reset-typography)) {
28
+ @include reset-font();
29
+ }
30
+ }
31
+ // PAGE
32
+ @if(not index($exclude, reset-page)) {
33
+ body {
34
+ @include reset-body();
35
+ }
36
+ }
37
+ // LISTS
38
+ @if(not index($exclude, reset-lists)) {
39
+ ol, ul {
40
+ @include reset-list-style();
41
+ }
42
+ }
43
+ // TABLES
44
+ @if(not index($exclude, reset-tables)) {
45
+ table {
46
+ @include reset-table();
47
+ }
48
+ caption, th, td {
49
+ @include reset-table-cell();
50
+ }
51
+ }
52
+ // QUOTES
53
+ @if(not index($exclude, reset-quotes)) {
54
+ q, blockquote {
55
+ @include reset-quotation();
56
+ }
57
+ }
58
+ // EMBEDS
59
+ @if(not index($exclude, reset-embeds)) {
60
+ a img {
61
+ @include reset-image-anchor-border();
62
+ }
63
+ }
64
+ // HTML5
65
+ @if(not index($exclude, reset-html5)) {
66
+ @include reset-html5();
67
+ }
68
+ // IME
69
+ @if(not index($exclude, reset-ime)) {
70
+ @include base-normalize-ime();
71
+ }
72
+ }
@@ -0,0 +1,14 @@
1
+ @import "../config";
2
+
3
+ // grids
4
+ $CONFIG_GRID_COLUMN: 31px !default; // column width
5
+ $CONFIG_GRID_GUTTER: 10px !default; // gutter width (margin)
6
+ $CONFIG_GRID_MAX_COLUMNS: 24 !default; // max number of columns on the grid
7
+ $CONFIG_GRID_MIN_THRESHOLD: 1.0 !default; // minimum threshold for fractional columns
8
+ $CONFIG_GRID_ALLOWED_DIVISORS: (3) !default; // allowed list of divisors e.g. (3, 4, 5) => (1/3, 2/3, 1/4, 2/4, 3/4, 1/5, 2/5, 3/5, 4/5)
9
+ $CONFIG_GRID_ALLOWED_DIVISABLE: (8, 10, 12, 14, 16, 18, 20, $CONFIG_GRID_MAX_COLUMNS) !default; // list of specific column widths
10
+ $CONFIG_GRID_OFFSET_METHOD: margin !default; // offset method to use [padding|margin|position]
11
+ $CONFIG_GRID_ALIGN_METHOD: float !default; // alignment method [float|inline-block|table-cell] (NOTE: table-cell doesn't work in all cases
12
+ $CONFIG_GRID_DIRECTION: reading-direction() !default; // direction of grid
13
+ $CONFIG_GRID_DEBUG: false !default; // debugging mode
14
+ $CONFIG_GRID_SPACING_FACTOR: 4 !default; // the factor to use when converting grid indents/outdents to horizontal units
@@ -0,0 +1,391 @@
1
+ // this is the grid framework
2
+ // @category grid
3
+ @import "config";
4
+ @import "compass";
5
+ @import "../util";
6
+
7
+ // calculate the width of a grid block
8
+ // @function _getGridWidth
9
+ // @private
10
+ // @param $columns {Number} the number or fraction of columns to span, if fraction, must specify $of
11
+ // @param $of {Number} the total number of columns spanned, only use with fractional $columns
12
+ // @param $indent {List} total indent for both left and right sides (needed to adjust for box-model padding)
13
+ // @return $width {Number} calculated width
14
+ // @usage:
15
+ // _getGridWidth(5) => width of 5 columns
16
+ // _getGridWidth(1/3, $of: 8) => splits an 8 column grid into 1/3
17
+ // _getGridWidth(5, $indent: (10px 0px)) => subtracts the $indent from the total width
18
+ @function _getGridWidth($columns, $of: false, $indent: false) {
19
+ $width: 0;
20
+ // if we're doing 1/3, 2/3, etc...
21
+ @if($of or $columns < 1) {
22
+ @if(type-of($of) != number) {
23
+ $of: $CONFIG_GRID_MAX_COLUMNS;
24
+ }
25
+
26
+ // check if the divisors conform to our restrictions
27
+ @if($CONFIG_GRID_ALLOWED_DIVISORS) {
28
+ $allowed-column-factors: ();
29
+ @each $divisor in $CONFIG_GRID_ALLOWED_DIVISORS {
30
+ $numerator: $divisor;
31
+ @while($numerator > 0) {
32
+ $numerator: ($numerator - 1);
33
+ $allowed-column-factors: append($allowed-column-factors, ($numerator / $divisor));
34
+ }
35
+ }
36
+ @if(not index($allowed-column-factors, $columns)) {
37
+ @warn "you can't divide a block into #{columns}";
38
+ $columns: 1;
39
+ }
40
+ }
41
+ // check if the specified columns are valid
42
+ @if($CONFIG_GRID_ALLOWED_DIVISABLE) {
43
+ @if(not index($CONFIG_GRID_ALLOWED_DIVISABLE, $of)) {
44
+ @warn "you can't divide #{of} columns";
45
+ $of: $CONFIG_GRID_MAX_COLUMNS;
46
+ }
47
+ }
48
+
49
+ $columns: ($columns * $of);
50
+ @if($columns < $CONFIG_GRID_MIN_THRESHOLD and $columns > 0) {
51
+ @warn "#{$columns} of #{$of} columns is too small. Use a larger column size";
52
+ $columns: $CONFIG_GRID_MIN_THRESHOLD;
53
+ }
54
+ }
55
+ // calculate
56
+ $width: ($columns * $CONFIG_GRID_COLUMN) + (($columns - 1) * $CONFIG_GRID_GUTTER);
57
+
58
+ @if(length($indent) == 2) {
59
+ $width: ($width - nth($indent,1) - nth($indent,2));
60
+ }
61
+ @return $width;
62
+ }
63
+
64
+ // abstract function to indent or outdent a grid block
65
+ // @function _gridDent
66
+ // @private
67
+ // @param $list {List} list of dents
68
+ // @param $left {Number} the number of units to dent left
69
+ // @param $right {Number} the number of units to dent right
70
+ // @param $direction {String} [in|out] the direction to dent
71
+ // @param $abuse {Bool} @see _getUnit
72
+ // @return $dent {List} list of dents
73
+ @function _gridDent($list: false, $left: 0, $right: 0, $direction: in, $abuse: false) {
74
+ $factor: if($direction == out, -1, 1) * $CONFIG_GRID_SPACING_FACTOR;
75
+ $dent: ();
76
+ $list: get-collection($list, ($left $right), $min: 2);
77
+
78
+ @each $unit in $list {
79
+ $unit: ($factor * $unit);
80
+ $dent: append($dent, horizontal-spacing($unit, $abuse: $abuse), space);
81
+ }
82
+
83
+ @if(length($dent) == 1) {
84
+ $dent: append($dent, $dent);
85
+ }
86
+
87
+ @return $dent;
88
+ }
89
+
90
+ // calculate indents on a grid block
91
+ // @function grid-indent
92
+ // @param $list {List} list of indents
93
+ // @param $left {Number} the number of units to indent left
94
+ // @param $right {Number} the number of units to indent right
95
+ // @param $abuse {Bool} @see _getUnit
96
+ // @return {List} list of indents
97
+ @function grid-indent($list: false, $left: 0, $right: 0, $abuse: false) {
98
+ @return _gridDent($list, $left, $right, $direction: in, $abuse: $abuse);
99
+ }
100
+
101
+ // calculate outdents on a grid block
102
+ // @function grid-outdent
103
+ // @param $list {List} list of outdents
104
+ // @param $left {Number} the number of units to outdent left
105
+ // @param $right {Number} the number of units to outdent right
106
+ // @param $abuse {Bool} @see _getUnit
107
+ // @return {List} list of outdents
108
+ @function grid-outdent($list: false, $left: 0, $right: 0, $abuse: false) {
109
+ @return _gridDent($list, $left, $right, $direction: out, $abuse: $abuse);
110
+ }
111
+
112
+ // generate the negative margins needed for a grid-outdent
113
+ // @mixin grid-outdent
114
+ // @param $list {List} list of outdents
115
+ // @param $left {Number} the number of units to outdent left
116
+ // @param $right {Number} the number of units to outdent right
117
+ @mixin grid-outdent($list: false, $left: 0, $right: 0) {
118
+ $outdent: grid-outdent($list, $left, $right);
119
+ @include grid-output-left-right(margin, $outdent);
120
+ @include hack-negative-margin();
121
+ }
122
+
123
+ // calculate offsets for a grid block
124
+ // @function grid-offset
125
+ // @param $list {List} list of offsets
126
+ // @param $left {Number} the number of columns to offset left
127
+ // @param $right {Number} the number of columns to offset right
128
+ // @param $of {Number} the total number of columns, used if $left/$right are fractional
129
+ // @return {List} list of offsets
130
+ @function grid-offset($list: false, $left: 0, $right: 0, $of: false) {
131
+ $list: get-collection($list, ($left, $right), $min: 2);
132
+ $left: nth($list,1);
133
+ $left: if($left > 0, _getGridWidth($columns: $left, $of: $of) + $CONFIG_GRID_GUTTER, 0);
134
+ $right: nth($list,2);
135
+ $right: if($right > 0, _getGridWidth($columns: $right, $of: $of) + $CONFIG_GRID_GUTTER, 0);
136
+ @return ($left, $right);
137
+ }
138
+ // convenience mixin for grid-offset
139
+ @mixin grid-offset($list: false, $left: 0, $right: 0, $of: false, $first: false, $method: $CONFIG_GRID_OFFSET_METHOD) {
140
+ $offset: grid-offset($list: $list, $left: $left, $right: $right, $of: $of);
141
+ @if($method == position) {
142
+ @include grid-offset-position($offset: $offset);
143
+ }
144
+ @else {
145
+ @include grid-offset-margin($offset: $offset, $first: $first);
146
+ }
147
+ }
148
+ // convenience method for using the position offset method
149
+ @mixin grid-offset-position($offset) {
150
+ position: relative;
151
+ @include grid-output-left-right($values: $offset);
152
+ }
153
+ // convenience method for using the margin offset method
154
+ @mixin grid-offset-margin($offset, $first: false, $outdent: false) {
155
+ $outdent: get-collection($outdent, 0, $min: 2);
156
+ $gutter: if($first, 0, $CONFIG_GRID_GUTTER);
157
+ @include grid-output-left-right(margin, list-add($outdent, list-add($offset, ($gutter $gutter))), $ignore: ($gutter));
158
+ @include hack-negative-margin();
159
+ }
160
+
161
+ // calculate push (offset) for a grid block
162
+ // @function grid-push
163
+ // @param $columns {List} the number of columns to offset left
164
+ // @param $of {Number} the total number of columns, used if $left is fractional
165
+ // @return {List} list of pushes
166
+ @function grid-push($columns: 0, $of: false) {
167
+ @return grid-offset($left: $columns, $of: $of);
168
+ }
169
+ // convenience mixin for grid-push
170
+ @mixin grid-push($columns:0, $of: false, $first: false, $method: position) {
171
+ @include grid-offset($left: $columns, $of: $of, $first: false, $method: $method);
172
+ }
173
+
174
+ // calculate pull (offset) for a grid block
175
+ // @function grid-pull
176
+ // @param $columns {List} the number of columns to offset right
177
+ // @param $of {Number} the total number of columns, used if $right is fractional
178
+ // @return {List} list of pulls
179
+ @function grid-pull($columns: 0, $of: false) {
180
+ @return grid-offset($right: $columns, $of: $of);
181
+ }
182
+ // convenience mixin for grid-push
183
+ @mixin grid-pull($columns: 0, $of: false, $first: false, $method: position) {
184
+ @include grid-offset($right: $columns, $of: $of, $first: false, $method: $method);
185
+ }
186
+
187
+ // this makes it possible to undo $first: true
188
+ // @mixin grid-not-first
189
+ @mixin grid-not-first() {
190
+ margin-#{rtl(left, $CONFIG_GRID_DIRECTION)}: $CONFIG_GRID_GUTTER;
191
+ }
192
+
193
+ // this makes it possible to force a non first-column to behave as a first-column
194
+ // @mixin grid-is-first
195
+ @mixin grid-is-first() {
196
+ margin-#{rtl(left, $CONFIG_GRID_DIRECTION)}: 0;
197
+ }
198
+
199
+ // given a set of values, output the left and right properties
200
+ // @mixin grid-output-left-right
201
+ // @param $property {String} prefix [margin|padding|border|etc] if false, no prefix is used
202
+ // @param $values {List} the list of values to output e.g. (10px 5px). if only one value (10px), it's used for both left and right
203
+ // @param $ignore {List} list of values to ignore, @see if-set
204
+ @mixin grid-output-left-right($property: false, $values: false, $ignore: false) {
205
+ $property: if($property, unquote('#{$property}-'), unquote(''));
206
+ $left: 0;
207
+ @if(length($values) > 0) {
208
+ $left: nth($values,1);
209
+ }
210
+ $right: 0;
211
+ @if(length($values) > 1) {
212
+ $right: nth($values,2);
213
+ }
214
+ @include if-set(#{$property}#{rtl(left, $CONFIG_GRID_DIRECTION)}, $left, $ignore: $ignore);
215
+ @include if-set(#{$property}#{rtl(right, $CONFIG_GRID_DIRECTION)}, $right, $ignore: $ignore);
216
+ }
217
+
218
+ // this lets rows clear the floated containers
219
+ // @mixin grid-row
220
+ // @param $debug {Bool} use debug stylings
221
+ @mixin grid-row($debug: false) {
222
+ @include grid-block(true);
223
+ @include debug-hover-box(rgb(255, 0, 255), $if: ($debug or $CONFIG_GRID_DEBUG));
224
+ }
225
+
226
+ // output the block methods
227
+ // @mixin grid-block
228
+ // @param $row {Bool} is this block a row
229
+ @mixin grid-block($row: false) {
230
+ // FLOAT
231
+ @if($CONFIG_GRID_ALIGN_METHOD == float){
232
+ @if($row) {
233
+ @include legacy-pie-clearfix();
234
+ }
235
+ @else {
236
+ // make it a floater
237
+ float: #{rtl(left, $CONFIG_GRID_DIRECTION)};
238
+ }
239
+ }
240
+ // INLINE-BLOCK
241
+ @else if($CONFIG_GRID_ALIGN_METHOD == inline-block) {
242
+ @if($row) {
243
+ // if the reading direction is different from the grid direction,
244
+ // we have to switch the direction of the individual rows
245
+ @if(reading-direction() != $CONFIG_GRID_DIRECTION) {
246
+ direction: $CONFIG_GRID_DIRECTION;
247
+ }
248
+ // fix to collapse white space between inline-block elements
249
+ letter-spacing: -0.313em; // webkit
250
+ @if($legacy-support-for-ie6 or $legacy-support-for-ie7) {
251
+ *letter-spacing: normal; // restore for IE6/7
252
+ }
253
+ word-spacing: -0.438em; // IE/firefox
254
+ // other methods: no browsers support this yet
255
+ // http://dev.w3.org/csswg/css3-text/#white-space-collapsing
256
+ //white-space-collapse: discard;
257
+ //text-space-collapse: collapse;
258
+ }
259
+ @else {
260
+ // if reading direction is differernt from the grid direction,
261
+ // reset the reading direction of the inner container
262
+ @if(reading-direction() != $CONFIG_GRID_DIRECTION) {
263
+ direction: reading-direction();
264
+ }
265
+ @include inline-block();
266
+ vertical-align: top;
267
+ // restore spacing @see grid-row
268
+ letter-spacing: normal;
269
+ word-spacing: normal;
270
+ }
271
+ }
272
+ // TABLE-CELL (doesn't work well)
273
+ @else if($CONFIG_GRID_ALIGN_METHOD == table-cell) {
274
+ @warn "table-cell method doesn't work yet!";
275
+ @if($row) {
276
+ // if the reading direction is different from the grid direction,
277
+ // we have to switch the direction of the individual rows
278
+ @if(reading-direction() != $CONFIG_GRID_DIRECTION) {
279
+ direction: $CONFIG_GRID_DIRECTION;
280
+ }
281
+ display: table;
282
+ // table cells don't respect margin, so we have to use border-spacing
283
+ border-spacing: $CONFIG_GRID_GUTTER 0;
284
+ }
285
+ @else {
286
+ // if reading direction is differernt from the grid direction,
287
+ // reset the reading direction of the inner container
288
+ @if(reading-direction() != $CONFIG_GRID_DIRECTION) {
289
+ direction: reading-direction();
290
+ }
291
+ @if($legacy-support-for-ie6 or $legacy-support-for-ie7) {
292
+ *display: inline;
293
+ }
294
+ display: table-cell;
295
+ vertical-align: top;
296
+ @include has-layout();
297
+ }
298
+ }
299
+ }
300
+
301
+ // convenience method for creating a grid canvas, @see grid
302
+ // @mixin grid-canvas
303
+ // @param $columns {Number} the number or fraction of columns to span, if fraction, must specify $of
304
+ // @param $of {Number} the total number of columns spanned, only use with fractional $columns
305
+ // @param $debug {Bool} use debug stylings
306
+ @mixin grid-canvas($columns: false, $of: false, $debug: false) {
307
+ @include grid($columns: $columns, $of: $of, $debug: $debug, $canvas: true);
308
+ }
309
+
310
+ // the main grid mixin
311
+ // @mixin grid
312
+ // @param $columns {Number} the number or fraction of columns to span, if fraction, must specify $of
313
+ // @param $first {Bool} is this the first grid block of a row
314
+ // @param $of {Number} the total number of columns spanned, only use with fractional $columns
315
+ // @param $indent {List} the grid indents @see grid-indent
316
+ // @param $outdent {List} the grid outdents @see grid-outdent
317
+ // @param $offset {List} the grid offsets @see grid-offset, grid-push, grid-pull
318
+ // @param $canvas {Bool} treat this grid block as a canvas; a canvas is a non-floated, centered grid-block
319
+ // @param $row {Bool} @see grid-row
320
+ // @param $center {Bool} whether or not to center the grid block
321
+ // @param $debug {Bool} use debug stylings
322
+ @mixin grid($columns: false, $first: false, $of: false, $indent: false, $outdent: false, $offset: false, $offset-method: $CONFIG_GRID_OFFSET_METHOD, $canvas: false, $row: false, $center: false, $debug: false) {
323
+ @if($row) {
324
+ @include grid-row($debug: $debug);
325
+ }
326
+ @else {
327
+ @if(not $columns) {
328
+ $columns: $CONFIG_GRID_MAX_COLUMNS;
329
+ }
330
+
331
+ $width: _getGridWidth($columns, $of, $indent);
332
+
333
+ // margin
334
+ @if(not ($first or $canvas or $center)) {
335
+ @include grid-not-first();
336
+ }
337
+
338
+ @if($canvas or $center) {
339
+ // center it
340
+ margin-left: auto;
341
+ margin-right: auto;
342
+
343
+ // debug
344
+ @if(is-debug-enabled($debug or $CONFIG_GRID_DEBUG)) {
345
+ @include column-grid-background($CONFIG_GRID_MAX_COLUMNS, $CONFIG_GRID_COLUMN, $CONFIG_GRID_GUTTER);
346
+ }
347
+
348
+ @if($CONFIG_GRID_ALIGN_METHOD == inline-block) {
349
+ // the inline-block method needs to use horizontal overflow on the canvas to prevent an unwanted scrollbar
350
+ //overflow-x: hidden;
351
+ }
352
+ }
353
+ @else {
354
+ // align the block
355
+ @include grid-block();
356
+ // debug
357
+ @include debug-hover-box($if: ($debug or $CONFIG_GRID_DEBUG));
358
+ }
359
+
360
+ // offset (push, pull)
361
+ @if($offset) {
362
+ // ... with positioning
363
+ @if($offset-method == position) {
364
+ @include grid-offset-position($offset);
365
+ }
366
+ // ... with margin (adjust outdent)
367
+ @else if($offset-method == margin) {
368
+ @include grid-offset-margin($offset: $offset, $first: $first, $outdent: $outdent);
369
+ $outdent: false;
370
+ }
371
+ // ... with padding (adjust indent)
372
+ @else {
373
+ $indent: list-add(get-collection($indent, 0, $min: 2), $offset);
374
+ }
375
+ }
376
+
377
+ // indent
378
+ @if($indent) {
379
+ @include grid-output-left-right(padding, $indent);
380
+ }
381
+
382
+ // outdent
383
+ @if($outdent) {
384
+ @include grid-output-left-right(margin, $outdent);
385
+ @include hack-negative-margin();
386
+ }
387
+
388
+ // width
389
+ width: $width;
390
+ }
391
+ }