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

Sign up to get free protection for your applications and to get access to all the features.
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,78 @@
1
+ // @category utilities/spacing
2
+
3
+ // abstract spacing calculations
4
+ // @function _spacing
5
+ // @private
6
+ // @param $unit {Number} unit of measurement
7
+ // @param $direction {String} [horizontal|vertical] spacing
8
+ // @param $abuse {Bool} @see _getUnit
9
+ // @return {String} the calculated spacing
10
+ @function _spacing($unit: nil, $direction: horizontal, $abuse: false) {
11
+ @if $unit == nil {
12
+ @return nil;
13
+ }
14
+ $unit: _getUnit($unit, $abuse);
15
+ $spacing: if($direction == vertical, $CONFIG_VERTICAL_SPACING, $CONFIG_HORIZONTAL_SPACING);
16
+ @return ($unit * $spacing);
17
+ }
18
+
19
+ // horizonatl spacing calculations
20
+ // @function horizontal-spacing
21
+ // @param $unit {Number} unit of measurement
22
+ // @param $abuse {Bool} @see _getUnit
23
+ // @return {String} the calculated horizontal spacing
24
+ @function horizontal-spacing($unit, $abuse: false) {
25
+ @return _spacing($unit, $abuse: $abuse);
26
+ }
27
+
28
+ // vertical spacing calculations
29
+ // @function vertical-spacing
30
+ // @param $unit {Number} unit of measurement
31
+ // @param $abuse {Bool} @see _getUnit
32
+ // @return {String} the calculated vertical spacing
33
+ @function vertical-spacing($unit, $abuse: false) {
34
+ @return _spacing($unit, $direction: vertical, $abuse: $abuse);
35
+ }
36
+
37
+ // generate the vertical spacing offset
38
+ // @mixin vertical-spacing
39
+ // @param $list {List} the list of units e.g. (1) => $top:1 $bottom:1; (1 0) => $top:1 $bottom:0;
40
+ // @param $top {Number} the units to offset from the top
41
+ // @param $bottom {Number} the units to offset from the bottom
42
+ // @param $method {String} [margin|padding] offset method
43
+ // @param $abuse {Bool} @see _getUnit
44
+ @mixin vertical-spacing($list: false, $top: nil, $bottom: nil, $method: false, $abuse: false) {
45
+ $list: get-collection($list, ($top $bottom), $min: 2);
46
+ @include _spacing($list, vertical, $method: $method, $abuse: $abuse);
47
+ }
48
+ // generate the horizontal spacing offset
49
+ // @mixin horizontal-spacing
50
+ // @param $list {List} the list of units e.g. (1) => $left:1 $right:1; (1 0) => $left:1 $right:0;
51
+ // @param $left {Number} the units to offset from the left
52
+ // @param $right {Number} the units to offset from the right
53
+ // @param $method {String} [margin|padding] offset method
54
+ // @param $abuse {Bool} @see _getUnit
55
+ @mixin horizontal-spacing($list: false, $left: nil, $right: nil, $method: false, $abuse: false) {
56
+ $list: get-collection($list, ($left $right), $min: 2);
57
+ @include _spacing($list, $method: $method, $abuse: $abuse);
58
+ }
59
+
60
+ // generate the spacing output
61
+ // @mixin spacing
62
+ // @private
63
+ // @param $units {List} the list of units e.g. (1) => $left:1 $right:1; (1 0) => $left:1 $right:0;
64
+ // @param $method {String} [margin|padding] offset method
65
+ // @param $abuse {Bool} @see _getUnit
66
+ @mixin _spacing($units, $direction: horizontal, $method: false, $abuse: false) {
67
+ @if(not $method) {
68
+ $method: $CONFIG_SPACING_METHOD;
69
+ }
70
+ @if($direction == vertical) {
71
+ @include if-set(#{$method}-top, vertical-spacing(nth($units,1), $abuse: $abuse), $ignore: nil);
72
+ @include if-set(#{$method}-bottom, vertical-spacing(nth($units,2), $abuse: $abuse), $ignore: nil);
73
+ }
74
+ @else {
75
+ @include if-set(#{$method}-#{rtl(left)}, horizontal-spacing(nth($units,1), $abuse: $abuse), $ignore: nil);
76
+ @include if-set(#{$method}-#{rtl(right)}, horizontal-spacing(nth($units,2), $abuse: $abuse), $ignore: nil);
77
+ }
78
+ }
@@ -0,0 +1,466 @@
1
+ @import "compass/layout/stretching";
2
+
3
+ // @category utilities/styles
4
+
5
+ // this is a proxy for output-style
6
+ // we need this to prevent Sass from throwing an error as you currently can't use recursive mixins :/
7
+ // @mixin _outputStyle
8
+ // @private
9
+ // @param $property {String} the CSS property to output
10
+ // @param $value {*} the CSS value to output
11
+ @mixin _outputStyle($property, $value: nil) {
12
+ @if($value != nil) {
13
+ @if($property == target-browser) {
14
+ @include target-browser(nth($value,1), nth($value,2), nth($value,3));
15
+ }
16
+ @else if($property == font-family) {
17
+ @include font-family($value);
18
+ }
19
+ @else if($property == font-style) {
20
+ @include font-style($value);
21
+ }
22
+ @else {
23
+ @include output-style($property, $value);
24
+ }
25
+ }
26
+ }
27
+
28
+ // output a property or augment it to use a mixin
29
+ // @mixin output-style
30
+ // @param $property {String} the CSS property to output
31
+ // @param $value {*} the CSS value to output
32
+ @mixin output-style($property, $value: nil) {
33
+ @if($property != nil and nth(-compass-list($value), 1) != nil and not index($CONFIG_DISABLED_CSS, $property)) {
34
+ // for mixins, we need to do some custom work
35
+ // border-radius
36
+ @if($property == border-radius) { @include border-radius(rtl($value, border-radius)); }
37
+ // box-sizing
38
+ @else if($property == box-sizing) { @include box-sizing($value); }
39
+ // box-shadow
40
+ @else if($property == box-shadow) { @include box-shadow($value); }
41
+ // text-shadow
42
+ @else if($property == text-shadow) { @include text-shadow($value); }
43
+ // filter-gradient
44
+ @else if($property == filter-gradient) { @include filter-gradient(nth($value,1), nth($value,2), nth($value,3)); }
45
+ // background
46
+ @else if($property == background) { @include background($value); }
47
+ // background-image
48
+ @else if($property == background-image or $property == gradient) { @include background-image($value); }
49
+ // background-clip
50
+ @else if($property == background-clip) { @include background-clip($value); }
51
+ // background-size
52
+ @else if($property == background-size) { @include background-size($value); }
53
+ // background-origin
54
+ @else if($property == background-origin) { @include background-origin($value); }
55
+ // IE filters
56
+ @else if($property == ie-filter) { @include ie-filter($value); }
57
+ // hide-text
58
+ @else if($property == hide-text) { @include hide-text($direction: if($value == true, $hide-text-direction, $value)); }
59
+ // inline-block
60
+ @else if($property == inline-block) { @include inline-block(); }
61
+ // opacity
62
+ @else if($property == opacity) { @include opacity($value); }
63
+ // min-width
64
+ @else if($property == min-width) { @include min-width($value); }
65
+ // min-height
66
+ @else if($property == min-height) { @include min-height($value); }
67
+ // max-width
68
+ @else if($property == max-width) { @include max-width($value); }
69
+ // max-height
70
+ @else if($property == max-height) { @include max-height($value); }
71
+ // stretch
72
+ @else if($property == stretch) { @include stretch(); }
73
+ // bunch of RTL support
74
+ @else if($property == margin) { @include margin($value); }
75
+ @else if($property == margin-left) { @include margin-left($value); }
76
+ @else if($property == margin-right) { @include margin-right($value); }
77
+ @else if($property == padding) { @include padding($value); }
78
+ @else if($property == padding-left) { @include padding-left($value); }
79
+ @else if($property == padding-right) { @include padding-right($value); }
80
+ @else if($property == border-width) { @include border-width($value); }
81
+ @else if($property == border-left-width) { @include border-left-width($value); }
82
+ @else if($property == border-right-width) { @include border-right-width($value); }
83
+ @else if($property == border-color) { @include border-color($value); }
84
+ @else if($property == border-left-color) { @include border-left-color($value); }
85
+ @else if($property == border-right-color) { @include border-right-color($value); }
86
+ @else if($property == border-style) { @include border-style($value); }
87
+ @else if($property == border-left-style) { @include border-left-style($value); }
88
+ @else if($property == border-right-style) { @include border-right-style($value); }
89
+ @else if($property == clear) { @include clear($value); }
90
+ @else if($property == float) { @include float($value); }
91
+ @else if($property == text-align) { @include text-align($value); }
92
+ @else if($property == background-position) { @include background-position($value); }
93
+ @else if($property == left) { @include left($value); }
94
+ @else if($property == right) { @include right($value); }
95
+ @else if($property == glyph-icon) { @include glyph-icon(nth($value, 1), nth($value, 2), nth($value, 3), nth($value, 4), nth($value, 5)); }
96
+ // animations
97
+ @else if($property == animation) {
98
+ @if archetype-version('compass >= 0.13') {
99
+ @include animation($value);
100
+ }
101
+ @else {
102
+ -webkit-animation: $value;
103
+ -moz-animation: $value;
104
+ -ms-animation: $value;
105
+ -o-animation: $value;
106
+ animation: $value;
107
+ }
108
+ }
109
+ // hasLayout
110
+ @else if($property == has-layout) {
111
+ // if value is true, don't pass it along
112
+ @if($value == true) {
113
+ @include has-layout();
114
+ }
115
+ @else {
116
+ @include has-layout($value);
117
+ }
118
+ }
119
+ // clearfix
120
+ @else if($property == clearfix) {
121
+ @if($value == legacy-pie-clearfix) {
122
+ @include legacy-pie-clearfix();
123
+ }
124
+ @else if($value == pie-clearfix) {
125
+ @include pie-clearfix();
126
+ }
127
+ @else {
128
+ @include clearfix();
129
+ }
130
+ }
131
+ // z-index
132
+ @else if($property == z-index) {
133
+ $value: -compass-list($value);
134
+ @if(length($value) > 1) { @include z-index(nth($value, 1), nth($value, 2)); }
135
+ @else { @include z-index($value); }
136
+ }
137
+ // make sure content is always quoted
138
+ @else if($property == content) { #{$property}: quote($value); }
139
+ // :before/:after
140
+ @else if($property == ie-pseudo-before or $property == ie-pseudo-after) {
141
+ $value: -compass-list($value);
142
+ $content: false;
143
+ $tag: '';
144
+ @if length($value) > 1 {
145
+ $content: nth($value, 2);
146
+ @if length($value) > 2 {
147
+ $tag: nth($value, 3);
148
+ }
149
+ }
150
+ @if $property == ie-pseudo-before {
151
+ @include ie-pseudo-before(nth($value, 1), $content, $tag);
152
+ }
153
+ @else {
154
+ @include ie-pseudo-after(nth($value, 1), $content, $tag);
155
+ }
156
+ }
157
+ // otherwise just use a key-value pair
158
+ @else { #{$property}: $value; }
159
+ }
160
+ }
161
+
162
+ // convert a list of key-value pairs into CSS rules
163
+ // @mixin to-styles
164
+ // @param $list {List} a key-value paired list of ($property $value)
165
+ // @param $states {Bool|List} if true, output all states; if false, output no states; if a list, output only the states in the list
166
+ // @param $exclude {List} a list of styles to exclude from output
167
+ @mixin to-styles($list: (), $states: true, $selectors: true, $exclude: ()) {
168
+ $exclude: -compass-list($exclude);
169
+ $states-data: ();
170
+ $selectors-data: ();
171
+ @each $item in $list {
172
+ @if(length($item) > 1) {
173
+ $property: nth($item, 1);
174
+ $value: nth($item, 2);
175
+ @if(not index($exclude, $property)) {
176
+ @if($property == states and $states != false) {
177
+ $states-data: $value;
178
+ }
179
+ @else if($property == selectors and $selectors != false) {
180
+ $selectors-data: $value;
181
+ }
182
+ @else if($selectors == true and $states == true) {
183
+ @include _outputStyle($property, unquote($value));
184
+ }
185
+ }
186
+ }
187
+ }
188
+ // deal with the states
189
+ @if length($states-data) > 0 {
190
+ @each $state in $states-data {
191
+ $value: nth($state, 2);
192
+ $state: first-value-of($state);
193
+ @if(index(-compass-list($states), $state) or $states == true) {
194
+ #{_getStateSelector($state)} {
195
+ @include _toStyles2($value, true, true, $exclude);
196
+ }
197
+ }
198
+ }
199
+ }
200
+ // deal with the nested selectors
201
+ @if length($selectors-data) > 0 {
202
+ @each $selector in $selectors-data {
203
+ @if(index(-compass-list($selectors), $selector) or $selectors == true) {
204
+ #{first-value-of($selector)} {
205
+ @include _toStyles2(nth($selector, 2), true, true, $exclude);
206
+ }
207
+ }
208
+ }
209
+ }
210
+ }
211
+
212
+ // this is identical to to-styles, but we need to avoid Sass' recursion check :(
213
+ @mixin _toStyles2($list: (), $states: true, $selectors: true, $exclude: ()) {
214
+ $exclude: -compass-list($exclude);
215
+ $states-data: ();
216
+ $selectors-data: ();
217
+ @each $item in $list {
218
+ @if(length($item) > 1) {
219
+ $property: nth($item, 1);
220
+ $value: nth($item, 2);
221
+ @if(not index($exclude, $property)) {
222
+ @if($property == states and $states != false) {
223
+ $states-data: $value;
224
+ }
225
+ @else if($property == selectors and $selectors != false) {
226
+ $selectors-data: $value;
227
+ }
228
+ @else if($selectors == true and $states == true) {
229
+ @include _outputStyle($property, unquote($value));
230
+ }
231
+ }
232
+ }
233
+ }
234
+ // deal with the states
235
+ @if length($states-data) > 0 {
236
+ @each $state in $states-data {
237
+ $value: nth($state, 2);
238
+ $state: first-value-of($state);
239
+ @if(index(-compass-list($states), $state) or $states == true) {
240
+ #{_getStateSelector($state)} {
241
+ @include _toStyles_final($value, $exclude);
242
+ }
243
+ }
244
+ }
245
+ }
246
+ // deal with the nested selectors
247
+ @if length($selectors-data) > 0 {
248
+ @each $selector in $selectors-data {
249
+ @if(index(-compass-list($selectors), $selector) or $selectors == true) {
250
+ #{first-value-of($selector)} {
251
+ @include _toStyles_final(nth($selector, 2), $exclude);
252
+ }
253
+ }
254
+ }
255
+ }
256
+ }
257
+ // this is a dumbed down version of to-styles. this is the final step and won't go any deeper
258
+ @mixin _toStyles_final($list: (), $exclude: ()) {
259
+ $exclude: -compass-list($exclude);
260
+ @each $item in $list {
261
+ @if(length($item) > 1) {
262
+ $property: nth($item, 1);
263
+ $value: nth($item, 2);
264
+ @if(not index($exclude, $property)) {
265
+ @include _outputStyle($property, unquote($value));
266
+ }
267
+ }
268
+ }
269
+ }
270
+
271
+ // helper function to compute the selector for various states
272
+ // @function _getStateSelector
273
+ // @private
274
+ // @param $state {String} the state to select
275
+ // @param $prefix {String} the prefix to append to the state (for class names only)
276
+ @function _getStateSelector($state, $prefix: $CONFIG_STATE_PREFIX) {
277
+ $selector: associative($CONFIG_STATE_MAPPINGS, $state, $strict: true);
278
+ @if $selector == nil or length($selector) == 0 {
279
+ $selector: '&.#{if(index(-compass-list($CONFIG_STATE_NO_PREFIX), $state), $prefix, "")}#{$state}';
280
+ }
281
+ @return $selector;
282
+ }
283
+
284
+ // mixin for outputting filters in legacy IE
285
+ // @mixin ie-filter
286
+ // @param $value {String|List} a set of filters to output, sans `progid:DXImageTransform.Microsoft` prefix
287
+ @mixin ie-filter($value, $use-prefix: false) {
288
+ $out: false;
289
+ $value: -compass-list($value);
290
+ $ms-filter-prefix: 'progid:DXImageTransform.Microsoft.';
291
+ @each $item in $value {
292
+ @if($item != none) {
293
+ $item: #{$ms-filter-prefix}#{$item};
294
+ }
295
+ $out: if($out, '#{$out},#{$item}', '#{$item}');
296
+ }
297
+ @if($out) {
298
+ @if $use-prefix != only {
299
+ filter: unquote($out);
300
+ }
301
+ @if $use-prefix {
302
+ -ms-filter: quote($out);
303
+ }
304
+ }
305
+ }
306
+
307
+ // mixin for generating a pseudo-element
308
+ // @mixin pseudo-element
309
+ // @param $width {String} width (default 0 for positioning in FF3)
310
+ // @param $height {String} height
311
+ // @param $content {String} content (this should be quoted)
312
+ // @param $display {String} display [block|inline|etc]
313
+ // @param $position {String} positioning [absolute|relative|etc]
314
+ @mixin pseudo-element($width: 0, $height: auto, $content: $CONTENT_PLACEHOLDER, $display: block, $position: false) {
315
+ @include if-set(content, quote($content));
316
+ @include if-set(display, $display);
317
+ @include if-set(width, $width);
318
+ @include if-set(height, $height);
319
+ @include if-set(position, $position);
320
+ }
321
+
322
+ // this is a helper for simple gradients when a direction is desired in degrees,
323
+ // but we still want to support old webkit browsers
324
+ // @mixin gradient-with-deg
325
+ // @param $deg {Number} the direction degree
326
+ // @param $start {Color} the start color
327
+ // @param $end {Color} the end color
328
+ @mixin gradient-with-deg($deg, $start, $end) {
329
+ // make sure it's a deg
330
+ $deg: if(unitless($deg), $deg * 1deg, $deg);
331
+ // we'll divide the circle into sections
332
+ $sector: (360deg / 8);
333
+ // offset it for calculations
334
+ $tmp: $deg - ($sector / 2);
335
+ $map: (
336
+ (right top),
337
+ (right),
338
+ (right bottom),
339
+ (bottom),
340
+ (left bottom),
341
+ (left),
342
+ (left top),
343
+ (top)
344
+ );
345
+ // compute the region it falls in
346
+ $region: nth($map, ceil(if($tmp < 0deg, 360 - $tmp, $tmp) / $sector));
347
+ // NOTE: we temporarily disable old webkit gradients as they don't support degrees
348
+ // this is a fallback for old webkit
349
+ @if($support-for-original-webkit-gradients) {
350
+ background-image: -owg(linear-gradient($region, $start, $end));
351
+ }
352
+ $tmp: $support-for-original-webkit-gradients;
353
+ $support-for-original-webkit-gradients: false;
354
+ // now the others
355
+ @include background-image(linear-gradient($deg, $start, $end));
356
+ // restore the old webkit value
357
+ $support-for-original-webkit-gradients: $tmp;
358
+ }
359
+
360
+ // abstract common issues and generate safe styles
361
+ @mixin safe($property: nil, $value: nil) {
362
+ @if($property != nil and $value != nil) {
363
+ // os friendly font stacks
364
+ @if($property == font-family) {
365
+ $stack: associative($CONFIG_SAFE_FONTS, $value, $strict: true);
366
+ @if($stack != nil and length($stack) > 0) {
367
+ // first, step through the list of os safe fonts
368
+ @each $collection in $stack {
369
+ @if(length($collection) > 1) {
370
+ $default: nil;
371
+ $os: nth($collection, 1);
372
+ $fonts: nth($collection, 2);
373
+ $family: nil;
374
+ // next, step through the list of lang safe fonts
375
+ @each $item in $fonts {
376
+ @if($item != nil) {
377
+ $lang: nth($item, 1);
378
+ $font: nth($item, 2);
379
+ // check if the language matches or it's the default
380
+ @if($lang == default or lang($lang)) {
381
+ $family: $font;
382
+ }
383
+ // if it's the default, keep track of it
384
+ @if($lang == default) {
385
+ $default: $font;
386
+ }
387
+ // if the keyword `default` is in the font-stack, substitute it with the default font-stack
388
+ $family: list-replace($family, index(-compass-list($family), default), $default, comma);
389
+ }
390
+ }
391
+ @include target-os($os, font-family, $family);
392
+ }
393
+ }
394
+ $value: nil;
395
+ }
396
+ }
397
+ // text-transform: uppercase isn't friendly to turkish
398
+ @else if($property == text-transform and $value == uppercase and lang(tr_TR)) {
399
+ // TODO - more investigation, this may affect other locales as well
400
+ // @link http://www.w3.org/International/tests/html-css/text-transform/results-text-transform
401
+ // @link https://developer.mozilla.org/en/CSS/text-transform
402
+ $value: nil;
403
+ }
404
+ @else if($property == font-variant and $value == small-caps and lang(tr_TR)) {
405
+ // TODO - more investigation, this may affect other locales as well
406
+ // @link https://developer.mozilla.org/en/CSS/font-variant
407
+ $value: nil;
408
+ }
409
+ // italics aren't pretty in CJK
410
+ @else if($property == font-style and $value == italic and lang(CJK)) {
411
+ $value: nil;
412
+ }
413
+ // if $value was set to `nil`, this does nothing
414
+ @include output-style($property, $value);
415
+ }
416
+ }
417
+
418
+ // web-safe font stacks, if no safe fonts are found, use the raw `$family` as output
419
+ // @mixin font-family
420
+ // @param $family {String} the font stack to output
421
+ @mixin font-family($family: nil) {
422
+ @include safe(font-family, $family);
423
+ }
424
+
425
+ // safely use text-transform:uppercase without localization issues
426
+ // @mixin uppercase
427
+ @mixin uppercase() {
428
+ @include safe(text-transform, uppercase);
429
+ }
430
+
431
+ // safely use font-variant:small-caps without localization issues
432
+ // @mixin small-caps
433
+ @mixin small-caps() {
434
+ @include safe(font-variant, small-caps);
435
+ }
436
+
437
+ // safely use font-style without localization issues
438
+ // @mixin font-style
439
+ // @param $style {String} the style
440
+ @mixin font-style($style: nil) {
441
+ @include safe(font-style, $style);
442
+ }
443
+
444
+ // a method for maintaining z-index order
445
+ // @mixin z-index
446
+ // @param $value {Number} the z-index offset
447
+ // @param $layer {String|Number} the initial z-index layer to start from
448
+ @mixin z-index($value: 0, $layer: 0) {
449
+ @if(type-of($layer) == string) {
450
+ $layer: index($CONFIG_Z_LAYERS, $layer);
451
+ $layer: if($layer, $layer - 1, 0) * $CONFIG_Z_LAYERS_OFFSET;
452
+ }
453
+ z-index: ($value + $layer);
454
+ }
455
+
456
+ // generate a tag name with a prefix
457
+ // @function prefixed-tag
458
+ // @param $tag {String} the tag to prefix
459
+ // @param $prefix {String} the prefix to prepend to the tag
460
+ // @return {String} the prefix joined with the tag
461
+ @function prefixed-tag($tag: '', $prefix: $CONFIG_GENERATED_TAG_PREFIX) {
462
+ @if $tag != '' {
463
+ $tag: '-#{$tag}';
464
+ }
465
+ @return '#{$prefix}#{$tag}';
466
+ }