doggystyle 0.1.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 (294) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +16 -0
  3. data/.hound.yml +5 -0
  4. data/.npmignore +18 -0
  5. data/.ruby-version +1 -0
  6. data/.scss-lint.yml +243 -0
  7. data/.travis.yml +5 -0
  8. data/CHANGELOG.md +5 -0
  9. data/Gemfile +4 -0
  10. data/LICENSE.txt +21 -0
  11. data/README.md +40 -0
  12. data/RELEASING.md +1 -0
  13. data/Rakefile +9 -0
  14. data/bin/doggystyle +5 -0
  15. data/bower.json +38 -0
  16. data/circle.yml +13 -0
  17. data/core/_imports.scss +229 -0
  18. data/core/animations/_jump.scss +7 -0
  19. data/core/animations/_shake.scss +24 -0
  20. data/core/animations/_wobble.scss +8 -0
  21. data/core/functions/_mobile-first.scss +3 -0
  22. data/core/functions/_opposite-direction.scss +45 -0
  23. data/core/functions/casts/_to-bool.scss +19 -0
  24. data/core/functions/casts/_to-color.scss +74 -0
  25. data/core/functions/casts/_to-list.scss +38 -0
  26. data/core/functions/casts/_to-map.scss +27 -0
  27. data/core/functions/casts/_to-null.scss +15 -0
  28. data/core/functions/casts/_to-number.scss +66 -0
  29. data/core/functions/casts/_to-string.scss +15 -0
  30. data/core/functions/colours/_colour-contrast.scss +61 -0
  31. data/core/functions/colours/_colour.scss +69 -0
  32. data/core/functions/colours/_random-colour.scss +78 -0
  33. data/core/functions/lists/_contains.scss +62 -0
  34. data/core/functions/lists/_first.scss +19 -0
  35. data/core/functions/lists/_insert-nth.scss +37 -0
  36. data/core/functions/lists/_last.scss +11 -0
  37. data/core/functions/lists/_merge.scss +30 -0
  38. data/core/functions/lists/_prepend.scss +11 -0
  39. data/core/functions/lists/_remove-nth.scss +53 -0
  40. data/core/functions/lists/_remove.scss +30 -0
  41. data/core/functions/lists/_replace-nth.scss +55 -0
  42. data/core/functions/lists/_replace.scss +36 -0
  43. data/core/functions/lists/_reverse.scss +31 -0
  44. data/core/functions/lists/_second.scss +19 -0
  45. data/core/functions/lists/_shift.scss +24 -0
  46. data/core/functions/lists/_slice.scss +52 -0
  47. data/core/functions/lists/_sort.scss +51 -0
  48. data/core/functions/maps/_map-deep-get.scss +51 -0
  49. data/core/functions/maps/_map-deep-set.scss +34 -0
  50. data/core/functions/maps/_map-depth.scss +23 -0
  51. data/core/functions/maps/_map-extend.scss +47 -0
  52. data/core/functions/maps/_map-has-keys.scss +23 -0
  53. data/core/functions/maps/_map-has-nested-keys.scss +24 -0
  54. data/core/functions/maps/_map-set.scss +4 -0
  55. data/core/functions/maps/_map-zip.scss +50 -0
  56. data/core/functions/numbers/_add-unit.scss +54 -0
  57. data/core/functions/numbers/_pad.scss +16 -0
  58. data/core/functions/numbers/_spacer.scss +16 -0
  59. data/core/functions/numbers/_strip.scss +29 -0
  60. data/core/functions/numbers/_units.scss +17 -0
  61. data/core/functions/svg/_dots.scss +84 -0
  62. data/core/functions/svg/_fake-radius.scss +131 -0
  63. data/core/functions/svg/_lines.scss +76 -0
  64. data/core/functions/svg/_svg.scss +12 -0
  65. data/core/functions/text/_smart-lineheight.scss +13 -0
  66. data/core/functions/text/_string-explode.scss +45 -0
  67. data/core/functions/text/_string-replace.scss +38 -0
  68. data/core/helpers/_custom-elements.scss +114 -0
  69. data/core/helpers/_eases.scss +44 -0
  70. data/core/helpers/_reset.scss +282 -0
  71. data/core/helpers/_show-breakpoints.scss +25 -0
  72. data/core/helpers/_strings.scss +648 -0
  73. data/core/helpers/_warnings.scss +3 -0
  74. data/core/helpers/checks/_check.scss +69 -0
  75. data/core/helpers/checks/_is-absolute-length.scss +25 -0
  76. data/core/helpers/checks/_is-angel.scss +25 -0
  77. data/core/helpers/checks/_is-arglist.scss +11 -0
  78. data/core/helpers/checks/_is-bool.scss +23 -0
  79. data/core/helpers/checks/_is-calc.scss +11 -0
  80. data/core/helpers/checks/_is-colour.scss +23 -0
  81. data/core/helpers/checks/_is-dark.scss +14 -0
  82. data/core/helpers/checks/_is-duration.scss +15 -0
  83. data/core/helpers/checks/_is-false.scss +13 -0
  84. data/core/helpers/checks/_is-first-character.scss +11 -0
  85. data/core/helpers/checks/_is-frequency.scss +15 -0
  86. data/core/helpers/checks/_is-function.scss +44 -0
  87. data/core/helpers/checks/_is-integer.scss +15 -0
  88. data/core/helpers/checks/_is-length.scss +16 -0
  89. data/core/helpers/checks/_is-light.scss +14 -0
  90. data/core/helpers/checks/_is-list.scss +11 -0
  91. data/core/helpers/checks/_is-map.scss +11 -0
  92. data/core/helpers/checks/_is-null.scss +11 -0
  93. data/core/helpers/checks/_is-number.scss +19 -0
  94. data/core/helpers/checks/_is-percentage.scss +13 -0
  95. data/core/helpers/checks/_is-position.scss +16 -0
  96. data/core/helpers/checks/_is-pseudo.scss +24 -0
  97. data/core/helpers/checks/_is-relative-length.scss +25 -0
  98. data/core/helpers/checks/_is-resolution.scss +15 -0
  99. data/core/helpers/checks/_is-selector.scss +3 -0
  100. data/core/helpers/checks/_is-string.scss +11 -0
  101. data/core/helpers/checks/_is-time.scss +15 -0
  102. data/core/helpers/checks/_is-unit.scss +16 -0
  103. data/core/helpers/private/_arglist-to-list.scss +36 -0
  104. data/core/helpers/private/_brightness.scss +13 -0
  105. data/core/helpers/private/_find-digits.scss +41 -0
  106. data/core/helpers/private/_find-integer.scss +40 -0
  107. data/core/helpers/private/_from-hex.scss +48 -0
  108. data/core/helpers/private/_from-hsl.scss +55 -0
  109. data/core/helpers/private/_from-rgb.scss +55 -0
  110. data/core/helpers/private/_get-color-value.scss +26 -0
  111. data/core/helpers/private/_hash-fix.scss +15 -0
  112. data/core/helpers/private/_hex-to-dec.scss +28 -0
  113. data/core/helpers/private/_length.scss +26 -0
  114. data/core/helpers/private/_lightness.scss +15 -0
  115. data/core/helpers/private/_list-items-to-strings.scss +8 -0
  116. data/core/helpers/private/_min-max-number.scss +12 -0
  117. data/core/helpers/private/_pow.scss +29 -0
  118. data/core/helpers/private/_string-compare.scss +38 -0
  119. data/core/helpers/private/_string-explode.scss +43 -0
  120. data/core/helpers/private/_sudo.scss +23 -0
  121. data/core/helpers/symbols/_arrows.scss +337 -0
  122. data/core/helpers/symbols/_block.scss +97 -0
  123. data/core/helpers/symbols/_box.scss +385 -0
  124. data/core/helpers/symbols/_common.scss +101 -0
  125. data/core/helpers/symbols/_currency.scss +82 -0
  126. data/core/helpers/symbols/_dingbats.scss +565 -0
  127. data/core/helpers/symbols/_geometric.scss +289 -0
  128. data/core/helpers/symbols/_letterlike.scss +235 -0
  129. data/core/helpers/symbols/_misc.scss +568 -0
  130. data/core/helpers/symbols/_operators.scss +766 -0
  131. data/core/helpers/symbols/_punctuation.scss +214 -0
  132. data/core/mixins/_align.scss +15 -0
  133. data/core/mixins/_animate.scss +16 -0
  134. data/core/mixins/_aspect-ratio.scss +86 -0
  135. data/core/mixins/_backface-visibility.scss +7 -0
  136. data/core/mixins/_background-image.scss +13 -0
  137. data/core/mixins/_blend.scss +10 -0
  138. data/core/mixins/_blendmodes.scss +24 -0
  139. data/core/mixins/_border-radius.scss +105 -0
  140. data/core/mixins/_browsers.scss +155 -0
  141. data/core/mixins/_bulletpoint.scss +12 -0
  142. data/core/mixins/_center.scss +3 -0
  143. data/core/mixins/_clearfix.scss +7 -0
  144. data/core/mixins/_columns.scss +22 -0
  145. data/core/mixins/_custom-property.scss +15 -0
  146. data/core/mixins/_devices.scss +97 -0
  147. data/core/mixins/_dropdown.scss +38 -0
  148. data/core/mixins/_fake-radius.scss +99 -0
  149. data/core/mixins/_filters.scss +163 -0
  150. data/core/mixins/_flip.scss +11 -0
  151. data/core/mixins/_font-face.scss +11 -0
  152. data/core/mixins/_fontsize.scss +126 -0
  153. data/core/mixins/_gallery.scss +134 -0
  154. data/core/mixins/_gradient.scss +72 -0
  155. data/core/mixins/_image-size.scss +18 -0
  156. data/core/mixins/_image.scss +12 -0
  157. data/core/mixins/_inputs.scss +18 -0
  158. data/core/mixins/_keyframes.scss +8 -0
  159. data/core/mixins/_last.scss +5 -0
  160. data/core/mixins/_nth-last.scss +7 -0
  161. data/core/mixins/_nth.scss +10 -0
  162. data/core/mixins/_placeholder.scss +15 -0
  163. data/core/mixins/_prefixer.scss +55 -0
  164. data/core/mixins/_selection.scss +15 -0
  165. data/core/mixins/_shadow.scss +7 -0
  166. data/core/mixins/_size.scss +13 -0
  167. data/core/mixins/_smart-horizontal.scss +21 -0
  168. data/core/mixins/_sudo-image.scss +12 -0
  169. data/core/mixins/_text-shadow.scss +30 -0
  170. data/core/mixins/_transforms.scss +264 -0
  171. data/core/mixins/_transition.scss +189 -0
  172. data/core/mixins/_triangle-classic.scss +170 -0
  173. data/core/mixins/_triangle.scss +250 -0
  174. data/core/mixins/_unwrap.scss +5 -0
  175. data/core/mixins/_user-select.scss +5 -0
  176. data/core/mixins/_vertical.scss +10 -0
  177. data/core/mixins/columns/_columns.scss +92 -0
  178. data/core/mixins/flexbox/_flex-container.scss +201 -0
  179. data/core/mixins/flexbox/_flex-grid.scss +235 -0
  180. data/core/mixins/flexbox/_flex-items.scss +140 -0
  181. data/core/mixins/flexbox/_flex-remove.scss +12 -0
  182. data/core/mixins/grid/_break-between.scss +6 -0
  183. data/core/mixins/grid/_grid.scss +150 -0
  184. data/core/mixins/svg/_svg-size.scss +4 -0
  185. data/core/mixins/svg/_svg.scss +9 -0
  186. data/core/placeholders/_clear.scss +27 -0
  187. data/core/placeholders/_cursor.scss +35 -0
  188. data/core/placeholders/_misc.scss +20 -0
  189. data/core/placeholders/_rendering.scss +21 -0
  190. data/core/placeholders/_text.scss +41 -0
  191. data/core/settings/_colours.scss +30 -0
  192. data/core/settings/_directories.scss +7 -0
  193. data/core/settings/_global.scss +14 -0
  194. data/core/settings/_grid.scss +24 -0
  195. data/core/settings/_padding.scss +8 -0
  196. data/core/settings/_spacing.scss +8 -0
  197. data/core/settings/_text.scss +13 -0
  198. data/doggystyle.gemspec +29 -0
  199. data/eyeglass-exports.js +7 -0
  200. data/features/install.feature +29 -0
  201. data/features/step_definitions/doggystyle_steps.rb +31 -0
  202. data/features/support/bourbon_support.rb +19 -0
  203. data/features/support/env.rb +1 -0
  204. data/features/update.feature +30 -0
  205. data/features/version.feature +5 -0
  206. data/index.js +7 -0
  207. data/lib/doggystyle.rb +7 -0
  208. data/lib/doggystyle/generator.rb +81 -0
  209. data/lib/doggystyle/version.rb +3 -0
  210. data/package.json +33 -0
  211. data/spec/doggystyle/library/border_color_spec.rb +51 -0
  212. data/spec/doggystyle/library/border_radius_spec.rb +25 -0
  213. data/spec/doggystyle/library/border_style_spec.rb +51 -0
  214. data/spec/doggystyle/library/border_width_spec.rb +51 -0
  215. data/spec/doggystyle/library/buttons_spec.rb +53 -0
  216. data/spec/doggystyle/library/clearfix_spec.rb +18 -0
  217. data/spec/doggystyle/library/contrast_switch_spec.rb +23 -0
  218. data/spec/doggystyle/library/ellipsis_spec.rb +20 -0
  219. data/spec/doggystyle/library/font_face_spec_1.rb +16 -0
  220. data/spec/doggystyle/library/font_face_spec_2.rb +21 -0
  221. data/spec/doggystyle/library/font_face_spec_3.rb +16 -0
  222. data/spec/doggystyle/library/font_face_spec_4.rb +17 -0
  223. data/spec/doggystyle/library/font_stacks_spec.rb +40 -0
  224. data/spec/doggystyle/library/hide_text_spec.rb +17 -0
  225. data/spec/doggystyle/library/hide_visually_spec.rb +35 -0
  226. data/spec/doggystyle/library/margin_spec.rb +51 -0
  227. data/spec/doggystyle/library/modular_scale_spec.rb +43 -0
  228. data/spec/doggystyle/library/padding_spec.rb +51 -0
  229. data/spec/doggystyle/library/position_spec.rb +67 -0
  230. data/spec/doggystyle/library/prefixer_spec.rb +34 -0
  231. data/spec/doggystyle/library/shade_spec.rb +31 -0
  232. data/spec/doggystyle/library/size_spec.rb +31 -0
  233. data/spec/doggystyle/library/strip_unit_spec.rb +31 -0
  234. data/spec/doggystyle/library/text_inputs_spec.rb +75 -0
  235. data/spec/doggystyle/library/tint_spec.rb +31 -0
  236. data/spec/doggystyle/library/triangle_spec.rb +31 -0
  237. data/spec/doggystyle/library/word_wrap_spec.rb +29 -0
  238. data/spec/doggystyle/utilities/assign_inputs_spec.rb +50 -0
  239. data/spec/doggystyle/utilities/collapse_directionals.rb +25 -0
  240. data/spec/doggystyle/utilities/directional_values_spec.rb +21 -0
  241. data/spec/doggystyle/utilities/font_source_declaration_spec.rb +29 -0
  242. data/spec/doggystyle/utilities/retrieve_bourbon_setting_spec.rb +31 -0
  243. data/spec/doggystyle/utilities/unpack_spec.rb +32 -0
  244. data/spec/doggystyle/validators/contains_spec.rb +27 -0
  245. data/spec/doggystyle/validators/is_length_spec.rb +49 -0
  246. data/spec/doggystyle/validators/is_light_spec.rb +37 -0
  247. data/spec/doggystyle/validators/is_number_spec.rb +43 -0
  248. data/spec/doggystyle/validators/is_size_spec.rb +43 -0
  249. data/spec/fixtures/_setup.scss +1 -0
  250. data/spec/fixtures/library/border-color.scss +26 -0
  251. data/spec/fixtures/library/border-radius.scss +17 -0
  252. data/spec/fixtures/library/border-style.scss +21 -0
  253. data/spec/fixtures/library/border-width.scss +21 -0
  254. data/spec/fixtures/library/buttons.scss +17 -0
  255. data/spec/fixtures/library/clearfix.scss +5 -0
  256. data/spec/fixtures/library/contrast-switch.scss +9 -0
  257. data/spec/fixtures/library/ellipsis.scss +5 -0
  258. data/spec/fixtures/library/font-face-1.scss +6 -0
  259. data/spec/fixtures/library/font-face-2.scss +10 -0
  260. data/spec/fixtures/library/font-face-3.scss +8 -0
  261. data/spec/fixtures/library/font-face-4.scss +7 -0
  262. data/spec/fixtures/library/font-stacks.scss +41 -0
  263. data/spec/fixtures/library/hide-text.scss +5 -0
  264. data/spec/fixtures/library/hide-visually.scss +9 -0
  265. data/spec/fixtures/library/margin.scss +21 -0
  266. data/spec/fixtures/library/modular-scale.scss +29 -0
  267. data/spec/fixtures/library/padding.scss +21 -0
  268. data/spec/fixtures/library/position.scss +25 -0
  269. data/spec/fixtures/library/prefixer.scss +13 -0
  270. data/spec/fixtures/library/shade.scss +17 -0
  271. data/spec/fixtures/library/size.scss +13 -0
  272. data/spec/fixtures/library/strip-unit.scss +17 -0
  273. data/spec/fixtures/library/text-inputs.scss +21 -0
  274. data/spec/fixtures/library/tint.scss +17 -0
  275. data/spec/fixtures/library/triangle.scss +9 -0
  276. data/spec/fixtures/library/word-wrap.scss +9 -0
  277. data/spec/fixtures/utilities/assign-inputs.scss +19 -0
  278. data/spec/fixtures/utilities/collapse-directionals.scss +17 -0
  279. data/spec/fixtures/utilities/directional-values.scss +13 -0
  280. data/spec/fixtures/utilities/font-source-declaration.scss +11 -0
  281. data/spec/fixtures/utilities/retrieve-bourbon-setting.scss +16 -0
  282. data/spec/fixtures/utilities/unpack.scss +17 -0
  283. data/spec/fixtures/validators/contains.scss +28 -0
  284. data/spec/fixtures/validators/is-length.scss +35 -0
  285. data/spec/fixtures/validators/is-light.scss +29 -0
  286. data/spec/fixtures/validators/is-number.scss +31 -0
  287. data/spec/fixtures/validators/is-size.scss +31 -0
  288. data/spec/spec_helper.rb +22 -0
  289. data/spec/support/matchers/have_rule.rb +35 -0
  290. data/spec/support/matchers/have_ruleset.rb +20 -0
  291. data/spec/support/matchers/have_value.rb +17 -0
  292. data/spec/support/parser_support.rb +16 -0
  293. data/spec/support/sass_support.rb +10 -0
  294. metadata +527 -0
@@ -0,0 +1,11 @@
1
+ /// Simple function for targeting the last list item
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#selecting-values-from-list
6
+ ///
7
+ /// @access public
8
+
9
+ @function last($list) {
10
+ @return nth($list, length($list));
11
+ }
@@ -0,0 +1,30 @@
1
+ /// Merge any number of lists together
2
+ ///
3
+ /// @author Mark Notton
4
+ ///
5
+ /// @access public
6
+ ///
7
+ /// @param (arglist) $lists - Add as many lists that you are want to merge. Separate lists should be comma-delimited.
8
+ ///
9
+ /// @example scss - Usage
10
+ /// $list1 : a b c;
11
+ /// $list2 : 1 2 3;
12
+ /// $new-list : merge($list1, $list2);
13
+ ///
14
+ /// @example scss - Usage
15
+ /// $new-list : (a b c 1 2 3);
16
+ ///
17
+ /// @return {list}
18
+
19
+ @function merge($lists...) {
20
+
21
+ $new-list : ();
22
+
23
+ @each $lists in _arglist-to-list($lists...) {
24
+ @each $list in $lists {
25
+ $new-list : join($new-list, $list);
26
+ }
27
+ }
28
+
29
+ @return $new-list;
30
+ }
@@ -0,0 +1,11 @@
1
+ /// Add an item to the begining of a list
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#adding-values-to-a-list
6
+ ///
7
+ /// @access public
8
+
9
+ @function prepend($list, $value) {
10
+ @return join($value, $list);
11
+ }
@@ -0,0 +1,53 @@
1
+ /// Remove nth item from a list
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#removing-values-from-list
6
+ ///
7
+ /// @access public
8
+ ///
9
+ /// @example scss - Usage
10
+ /// $list: a, b, z, c, d, e, f;
11
+ /// $new-list: remove-nth($list, 3);
12
+ /// $new-list: remove-nth($list, 0);
13
+ /// $new-list: remove-nth($list, -2);
14
+ /// $new-list: remove-nth($list, -10);
15
+ /// $new-list: remove-nth($list, 100);
16
+ /// $new-list: remove-nth($list, zog);
17
+ ///
18
+ /// @example scss - Output
19
+ /// $new-list: a, b, c, d, e, f
20
+ /// $new-list: error
21
+ /// $new-list: a, b, z, c, d, f
22
+ /// $new-list: error
23
+ /// $new-list: error
24
+ /// $new-list: error
25
+
26
+ @function remove-nth($list, $index) {
27
+ $result: null;
28
+
29
+ @if type-of($index) != number {
30
+ @warn "$index: #{quote($index)} is not a number for `remove-nth`.";
31
+ }
32
+
33
+ @else if $index == 0 {
34
+ @warn "List index 0 must be a non-zero integer for `remove-nth`.";
35
+ }
36
+
37
+ @else if abs($index) > length($list) {
38
+ @warn "List index is #{$index} but list is only #{length($list)} item long for `remove-nth`.";
39
+ }
40
+
41
+ @else {
42
+ $result: ();
43
+ $index: if($index < 0, length($list) + $index + 1, $index);
44
+
45
+ @for $i from 1 through length($list) {
46
+ @if $i != $index {
47
+ $result: append($result, nth($list, $i));
48
+ }
49
+ }
50
+ }
51
+
52
+ @return $result;
53
+ }
@@ -0,0 +1,30 @@
1
+ /// Remove an item from a list
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#removing-values-from-list
6
+ ///
7
+ /// @example scss - Usage
8
+ /// $list: a, b z, c, z, d, z, e, f;
9
+ /// $new-list: remove($list, z);
10
+ /// $new-list: remove($list, z, true);
11
+ ///
12
+ /// @example scss - Output
13
+ /// $new-list: a, b z, c, d, e, f;
14
+ /// $new-list: a, b, c, d, e, f
15
+
16
+ @function remove($list, $value, $recursive: false) {
17
+ $result: ();
18
+
19
+ @for $i from 1 through length($list) {
20
+ @if type-of(nth($list, $i)) == list and $recursive {
21
+ $result: append($result, remove(nth($list, $i), $value, $recursive));
22
+ }
23
+
24
+ @else if nth($list, $i) != $value {
25
+ $result: append($result, nth($list, $i));
26
+ }
27
+ }
28
+
29
+ @return $result;
30
+ }
@@ -0,0 +1,55 @@
1
+ /// Replace a value at nth index in a list
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#replacing-values-from-list
6
+ ///
7
+ /// @example scss - Usage
8
+ /// $list: a, b, z, d, e, f;
9
+ /// $new-list: replace-nth($list, 3, c);
10
+ /// $new-list: replace-nth($list, 0, c);
11
+ /// $new-list: replace-nth($list, -2, c);
12
+ /// $new-list: replace-nth($list, -10, c);
13
+ /// $new-list: replace-nth($list, 100, c);
14
+ /// $new-list: replace-nth($list, zog, c);
15
+ ///
16
+ /// @example scss - Output
17
+ /// $new-list: a, b, c, d, e, f
18
+ /// $new-list: error
19
+ /// $new-list: a, b, c, d, z, f
20
+ /// $new-list: error
21
+ /// $new-list: error
22
+ /// $new-list: error
23
+
24
+ @function replace-nth($list, $index, $value) {
25
+ $result: null;
26
+
27
+ @if type-of($index) != number {
28
+ @warn "$index: #{quote($index)} is not a number for `replace-nth`.";
29
+ }
30
+
31
+ @else if $index == 0 {
32
+ @warn "List index 0 must be a non-zero integer for `replace-nth`.";
33
+ }
34
+
35
+ @else if abs($index) > length($list) {
36
+ @warn "List index is #{$index} but list is only #{length($list)} item long for `replace-nth`.";
37
+ }
38
+
39
+ @else {
40
+ $result: ();
41
+ $index: if($index < 0, length($list) + $index + 1, $index);
42
+
43
+ @for $i from 1 through length($list) {
44
+ @if $i == $index {
45
+ $result: append($result, $value);
46
+ }
47
+
48
+ @else {
49
+ $result: append($result, nth($list, $i));
50
+ }
51
+ }
52
+ }
53
+
54
+ @return $result;
55
+ }
@@ -0,0 +1,36 @@
1
+ /// Replacing values in a list
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#replacing-values-from-list
6
+ ///
7
+ /// @example scss - Usage
8
+ /// $list: a, b, r, a, c a, d a, b, r, a;
9
+ /// $new-list1: replace($list, a, u);
10
+ /// $new-list2: replace($list, a, u, true);
11
+ ///
12
+ /// @example scss - Output
13
+ /// $new-list1: u, b, r, u, c a, d a, b, r, u;
14
+ /// $new-list2: u, b, r, u, c u, d u, b, r, u;
15
+
16
+ @function replace($list, $old-value, $new-value, $recursive: false) {
17
+ $result: ();
18
+
19
+ @for $i from 1 through length($list) {
20
+ @if type-of(nth($list, $i)) == list and $recursive {
21
+ $result: append($result, replace(nth($list, $i), $old-value, $new-value, $recursive));
22
+ }
23
+
24
+ @else {
25
+ @if nth($list, $i) == $old-value {
26
+ $result: append($result, $new-value);
27
+ }
28
+
29
+ @else {
30
+ $result: append($result, nth($list, $i));
31
+ }
32
+ }
33
+ }
34
+
35
+ @return $result;
36
+ }
@@ -0,0 +1,31 @@
1
+ /// Reverse a lsit
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#miscellaneous
6
+ ///
7
+ /// @example scss - Usage
8
+ /// $list: a, b, c d e, f, g, h;
9
+ /// $new-list: reverse($list);
10
+ /// $new-list: reverse($list, true);
11
+ ///
12
+ /// @example scss - Output
13
+ /// $list: a, b, c d e, f, g, h;
14
+ /// $new-list: h, g, f, c d e, b, a
15
+ /// $new-list: h, g, f, e d c, b, a
16
+
17
+ @function reverse($list, $recursive: false) {
18
+ $result: ();
19
+
20
+ @for $i from length($list)*-1 through -1 {
21
+ @if type-of(nth($list, abs($i))) == list and $recursive {
22
+ $result: append($result, reverse(nth($list, abs($i)), $recursive));
23
+ }
24
+
25
+ @else {
26
+ $result: append($result, nth($list, abs($i)));
27
+ }
28
+ }
29
+
30
+ @return $result;
31
+ }
@@ -0,0 +1,19 @@
1
+ /// Simple function for targeting the second list item
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#selecting-values-from-list
6
+ ///
7
+ /// @access public
8
+ ///
9
+ /// @param {list}
10
+ ///
11
+ /// @return {list}
12
+
13
+ @function second($list) {
14
+ @if length($list) >= 2 {
15
+ @return nth($list, 2);
16
+ } @else {
17
+ @return null;
18
+ }
19
+ }
@@ -0,0 +1,24 @@
1
+ /// Shift the index of a list
2
+ ///
3
+ /// @author Ana Tudor
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#miscellaneous
6
+ ///
7
+ /// @example scss - Usage
8
+ /// $list: a, b, c, d, e, f;
9
+ /// $new-list: loop($list, 1);
10
+ /// $new-list: loop($list, -3);
11
+ ///
12
+ /// @example scss - Output
13
+ /// $new-list: f, a, b, c, d, e
14
+ /// $new-list: d, e, f, a, b, c
15
+
16
+ @function loop($list, $value: 1) {
17
+ $result: ();
18
+
19
+ @for $i from 0 to length($list) {
20
+ $result: append($result, nth($list, ($i - $value) % length($list) + 1));
21
+ }
22
+
23
+ @return $result;
24
+ }
@@ -0,0 +1,52 @@
1
+ /// Slice a list
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://hugogiraudel.com/2013/08/08/advanced-sass-list-functions/#miscellaneous
6
+ ///
7
+ /// @example scss - Usage
8
+ /// $list: a, b, c, d, e, f;
9
+ /// $new-list: slice($list, 3, 5);
10
+ /// $new-list: slice($list, 4, 4);
11
+ /// $new-list: slice($list, 5, 3);
12
+ /// $new-list: slice($list, -1, 10);
13
+ ///
14
+ /// @example scss - Output
15
+ /// $new-list: c, d, e
16
+ /// $new-list: d
17
+ /// $new-list: error
18
+ /// $new-list: error
19
+
20
+ @function slice($list, $start: 1, $end: length($list)) {
21
+ $result: null;
22
+
23
+ @if type-of($start) != number or type-of($end) != number {
24
+ @warn "Either $start or $end are not a number for `slice`.";
25
+ }
26
+
27
+ @else if $start > $end {
28
+ @warn "The start index has to be lesser than or equals to the end index for `slice`.";
29
+ }
30
+
31
+ @else if $start < 1 or $end < 1 {
32
+ @warn "List indexes must be non-zero integers for `slice`.";
33
+ }
34
+
35
+ @else if $start > length($list) {
36
+ @warn "List index is #{$start} but list is only #{length($list)} item long for `slice`.";
37
+ }
38
+
39
+ @else if $end > length($list) {
40
+ @warn "List index is #{$end} but list is only #{length($list)} item long for `slice`.";
41
+ }
42
+
43
+ @else {
44
+ $result: ();
45
+
46
+ @for $i from $start through $end {
47
+ $result: append($result, nth($list, $i));
48
+ }
49
+ }
50
+
51
+ @return $result;
52
+ }
@@ -0,0 +1,51 @@
1
+ /// Default order used to determine which string comes first
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link https://css-tricks.com/snippets/sass/sorting-function/
6
+ ///
7
+ /// @type list
8
+
9
+ $default-order: "!" "#" "$" "%" "&" "'" "(" ")" "*" "+" "," "-" "." "/" "[" "]" "^" "_" "{" "|" "}" "~" "0" "1" "2" "3" "4" "5" "6" "7" "8" "9" "a" "b" "c" "d" "e" "f" "g" "h" "i" "j" "k" "l" "m" "n" "o" "p" "q" "r" "s" "t" "u" "v" "w" "x" "y" "z" !default;
10
+
11
+
12
+ /// Sort list in a particular order.
13
+ ///
14
+ /// @author Hugo Giraudel
15
+ ///
16
+ /// @link https://css-tricks.com/snippets/sass/sorting-function/
17
+ ///
18
+ /// @access public
19
+ ///
20
+ /// @param {list} $list - list to sort
21
+ ///
22
+ /// @param {list} $order - Order to use for sorting - Default is $default-order;
23
+ ///
24
+ /// @require {function} _string-compare
25
+ /// @require {variable} default-order
26
+ ///
27
+ /// @return {list}
28
+
29
+ @function sort($list, $order: $default-order) {
30
+ $less: ();
31
+ $equal: ();
32
+ $large: ();
33
+
34
+ @if length($list) > 1 {
35
+ $seed: nth($list, ceil(length($list) / 2));
36
+
37
+ @each $item in $list {
38
+ @if $item == $seed {
39
+ $equal: append($equal, $item, list-separator($list));
40
+ } @else if _string-compare($item, $seed, $order) {
41
+ $less: append($less, $item, list-separator($list));
42
+ } @else if not _string-compare($item, $seed, $order) {
43
+ $large: append($large, $item, list-separator($list));
44
+ }
45
+ }
46
+
47
+ @return join(join(sort($less, $order), $equal), sort($large, $order));
48
+ }
49
+
50
+ @return $list;
51
+ }
@@ -0,0 +1,51 @@
1
+ /// Fetch nested keys in a map
2
+ ///
3
+ /// @author Hugo Giraudel
4
+ ///
5
+ /// @link http://www.sitepoint.com/extra-map-functions-sass
6
+ ///
7
+ /// @access public
8
+ ///
9
+ /// @param (map) $map - Usually a variable name
10
+ ///
11
+ /// @param (arglist) $keys - With comma delimination write the path to the disired map element
12
+ ///
13
+ /// @return {*}
14
+ ///
15
+ /// @example scss - Usage
16
+ /// $foo: (
17
+ /// bar: (
18
+ /// lorem : (
19
+ /// test1: #dcfac0,
20
+ /// test2: #00968b,
21
+ /// ),
22
+ /// ipsom: (
23
+ /// test1: #f4fac7,
24
+ /// test2: #c2454e,
25
+ /// )
26
+ /// )
27
+ /// );
28
+ /// color: map-fetch($foo, bar, lorem, test1);
29
+ ///
30
+ /// @example css - Output
31
+ /// color:#dcfac0;
32
+
33
+ @function map-deep-get($map, $keys...) {
34
+ @each $key in $keys {
35
+ $map: map-get($map, $key);
36
+ }
37
+ @return $map;
38
+ }
39
+
40
+
41
+ /// @alias map-deep-get
42
+ ///
43
+ /// @access public
44
+ ///
45
+ /// @require {function} map-deep-get
46
+ ///
47
+ /// @return {*}
48
+
49
+ @function map-fetch($map, $keys...) {
50
+ @return map-deep-get($map, $keys...);
51
+ }