dendron-jekyll 0.3.2

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 (141) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.txt +21 -0
  3. data/README.md +68 -0
  4. data/Rakefile +1 -0
  5. data/_includes/active.html +8 -0
  6. data/_includes/archive-single.html +33 -0
  7. data/_includes/crumbs.html +15 -0
  8. data/_includes/css/custom.scss.liquid +1 -0
  9. data/_includes/css/just-the-docs.scss.liquid +7 -0
  10. data/_includes/documents-collection.html +25 -0
  11. data/_includes/figure +9 -0
  12. data/_includes/head.html +40 -0
  13. data/_includes/head_custom.html +0 -0
  14. data/_includes/js/custom.js +0 -0
  15. data/_includes/nav.html +37 -0
  16. data/_includes/sidebar.html +19 -0
  17. data/_includes/title.html +5 -0
  18. data/_includes/toc +7 -0
  19. data/_includes/toc-mm.html +96 -0
  20. data/_includes/toc.html +16 -0
  21. data/_includes/vendor/anchor_headings.html +100 -0
  22. data/_layouts/about.html +5 -0
  23. data/_layouts/archive.html +30 -0
  24. data/_layouts/default.html +160 -0
  25. data/_layouts/home.html +5 -0
  26. data/_layouts/page.html +5 -0
  27. data/_layouts/post.html +5 -0
  28. data/_layouts/single.html +97 -0
  29. data/_layouts/table_wrappers.html +7 -0
  30. data/_layouts/vendor/compress.html +10 -0
  31. data/_sass/base.scss +108 -0
  32. data/_sass/buttons.scss +118 -0
  33. data/_sass/code.scss +261 -0
  34. data/_sass/color_schemes/dark.scss +17 -0
  35. data/_sass/color_schemes/light.scss +0 -0
  36. data/_sass/content.scss +196 -0
  37. data/_sass/custom/custom.scss +0 -0
  38. data/_sass/labels.scss +37 -0
  39. data/_sass/layout.scss +205 -0
  40. data/_sass/minimal-mistakes/_animations.scss +21 -0
  41. data/_sass/minimal-mistakes/_archive.scss +455 -0
  42. data/_sass/minimal-mistakes/_base.scss +357 -0
  43. data/_sass/minimal-mistakes/_buttons.scss +97 -0
  44. data/_sass/minimal-mistakes/_footer.scss +86 -0
  45. data/_sass/minimal-mistakes/_forms.scss +393 -0
  46. data/_sass/minimal-mistakes/_masthead.scss +93 -0
  47. data/_sass/minimal-mistakes/_mixins.scss +92 -0
  48. data/_sass/minimal-mistakes/_navigation.scss +566 -0
  49. data/_sass/minimal-mistakes/_notices.scss +105 -0
  50. data/_sass/minimal-mistakes/_page.scss +553 -0
  51. data/_sass/minimal-mistakes/_print.scss +252 -0
  52. data/_sass/minimal-mistakes/_reset.scss +187 -0
  53. data/_sass/minimal-mistakes/_search.scss +132 -0
  54. data/_sass/minimal-mistakes/_sidebar.scss +347 -0
  55. data/_sass/minimal-mistakes/_syntax.scss +324 -0
  56. data/_sass/minimal-mistakes/_tables.scss +39 -0
  57. data/_sass/minimal-mistakes/_utilities.scss +593 -0
  58. data/_sass/minimal-mistakes/_variables.scss +169 -0
  59. data/_sass/minimal-mistakes/skins/_air.scss +23 -0
  60. data/_sass/minimal-mistakes/skins/_aqua.scss +30 -0
  61. data/_sass/minimal-mistakes/skins/_contrast.scss +51 -0
  62. data/_sass/minimal-mistakes/skins/_dark.scss +28 -0
  63. data/_sass/minimal-mistakes/skins/_default.scss +5 -0
  64. data/_sass/minimal-mistakes/skins/_dirt.scss +33 -0
  65. data/_sass/minimal-mistakes/skins/_mint.scss +23 -0
  66. data/_sass/minimal-mistakes/skins/_neon.scss +57 -0
  67. data/_sass/minimal-mistakes/skins/_plum.scss +64 -0
  68. data/_sass/minimal-mistakes/skins/_sunrise.scss +44 -0
  69. data/_sass/minimal-mistakes/vendor/breakpoint/_breakpoint.scss +114 -0
  70. data/_sass/minimal-mistakes/vendor/breakpoint/_context.scss +95 -0
  71. data/_sass/minimal-mistakes/vendor/breakpoint/_helpers.scss +151 -0
  72. data/_sass/minimal-mistakes/vendor/breakpoint/_legacy-settings.scss +50 -0
  73. data/_sass/minimal-mistakes/vendor/breakpoint/_no-query.scss +15 -0
  74. data/_sass/minimal-mistakes/vendor/breakpoint/_parsers.scss +215 -0
  75. data/_sass/minimal-mistakes/vendor/breakpoint/_respond-to.scss +82 -0
  76. data/_sass/minimal-mistakes/vendor/breakpoint/_settings.scss +71 -0
  77. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/_double.scss +33 -0
  78. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/_query.scss +82 -0
  79. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/_resolution.scss +31 -0
  80. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/_single.scss +26 -0
  81. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/_triple.scss +36 -0
  82. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default-pair.scss +21 -0
  83. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_default.scss +22 -0
  84. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/double/_double-string.scss +22 -0
  85. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/resolution/_resolution.scss +60 -0
  86. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/single/_default.scss +13 -0
  87. data/_sass/minimal-mistakes/vendor/breakpoint/parsers/triple/_default.scss +18 -0
  88. data/_sass/minimal-mistakes/vendor/magnific-popup/_magnific-popup.scss +649 -0
  89. data/_sass/minimal-mistakes/vendor/magnific-popup/_settings.scss +46 -0
  90. data/_sass/minimal-mistakes/vendor/susy/_su.scss +4 -0
  91. data/_sass/minimal-mistakes/vendor/susy/_susy-prefix.scss +13 -0
  92. data/_sass/minimal-mistakes/vendor/susy/_susy.scss +5 -0
  93. data/_sass/minimal-mistakes/vendor/susy/plugins/_svg-grid.scss +5 -0
  94. data/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_prefix.scss +7 -0
  95. data/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-api.scss +114 -0
  96. data/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-grid-math.scss +67 -0
  97. data/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-settings.scss +14 -0
  98. data/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-unprefix.scss +18 -0
  99. data/_sass/minimal-mistakes/vendor/susy/plugins/svg-grid/_svg-utilities.scss +133 -0
  100. data/_sass/minimal-mistakes/vendor/susy/susy/_api.scss +318 -0
  101. data/_sass/minimal-mistakes/vendor/susy/susy/_normalize.scss +261 -0
  102. data/_sass/minimal-mistakes/vendor/susy/susy/_parse.scss +163 -0
  103. data/_sass/minimal-mistakes/vendor/susy/susy/_settings.scss +329 -0
  104. data/_sass/minimal-mistakes/vendor/susy/susy/_su-math.scss +441 -0
  105. data/_sass/minimal-mistakes/vendor/susy/susy/_su-validate.scss +213 -0
  106. data/_sass/minimal-mistakes/vendor/susy/susy/_syntax-helpers.scss +191 -0
  107. data/_sass/minimal-mistakes/vendor/susy/susy/_unprefix.scss +56 -0
  108. data/_sass/minimal-mistakes/vendor/susy/susy/_utilities.scss +167 -0
  109. data/_sass/modules.scss +25 -0
  110. data/_sass/navigation.scss +196 -0
  111. data/_sass/print.scss +40 -0
  112. data/_sass/search.scss +323 -0
  113. data/_sass/support/_functions.scss +9 -0
  114. data/_sass/support/_variables.scss +135 -0
  115. data/_sass/support/mixins/_buttons.scss +27 -0
  116. data/_sass/support/mixins/_layout.scss +34 -0
  117. data/_sass/support/mixins/_typography.scss +86 -0
  118. data/_sass/support/mixins/mixins.scss +3 -0
  119. data/_sass/support/support.scss +3 -0
  120. data/_sass/tables.scss +58 -0
  121. data/_sass/typography.scss +60 -0
  122. data/_sass/utilities/_colors.scss +239 -0
  123. data/_sass/utilities/_layout.scss +95 -0
  124. data/_sass/utilities/_lists.scss +17 -0
  125. data/_sass/utilities/_spacing.scss +165 -0
  126. data/_sass/utilities/_typography.scss +91 -0
  127. data/_sass/utilities/utilities.scss +5 -0
  128. data/_sass/vendor/normalize.scss/README.md +78 -0
  129. data/_sass/vendor/normalize.scss/normalize.scss +427 -0
  130. data/_sass/vendor/normalize.scss/package.json +70 -0
  131. data/assets/css/just-the-docs-dark.scss +3 -0
  132. data/assets/css/just-the-docs-default.scss +8 -0
  133. data/assets/css/just-the-docs-light.scss +3 -0
  134. data/assets/images/just-the-docs.png +0 -0
  135. data/assets/images/search.svg +1 -0
  136. data/assets/js/just-the-docs.js +473 -0
  137. data/assets/js/vendor/lunr.min.js +6 -0
  138. data/assets/js/zzzz-search-data.json +60 -0
  139. data/bin/just-the-docs +16 -0
  140. data/lib/tasks/search.rake +74 -0
  141. metadata +245 -0
@@ -0,0 +1,261 @@
1
+ /// Syntax Normalization
2
+ /// ====================
3
+ /// Susy is divided into two layers:
4
+ /// "Su" provides the core math functions with a stripped-down syntax,
5
+ /// while "Susy" adds global settings, shorthand syntax,
6
+ /// and other helpers.
7
+ /// Each setting (e.g. span, location, columns, spread, etc.)
8
+ /// has a single canonical syntax in Su.
9
+ ///
10
+ /// This normalization module helps translate between those layers,
11
+ /// transforming parsed Susy input into
12
+ /// values that Su will understand.
13
+ ///
14
+ /// @group x-normal
15
+ ///
16
+ /// @see susy-normalize
17
+ /// @see susy-normalize-span
18
+ /// @see susy-normalize-columns
19
+ /// @see susy-normalize-spread
20
+ /// @see susy-normalize-location
21
+
22
+
23
+
24
+ // Susy Normalize
25
+ // --------------
26
+ /// Normalize the values in a configuration map.
27
+ /// In addition to the global `$susy` properties,
28
+ /// this map can include local span-related imformation,
29
+ /// like `span` and `location`.
30
+ ///
31
+ /// Normalization does not check that values are valid,
32
+ /// which will happen in the Su math layer.
33
+ /// These functions merely look for known Susy syntax –
34
+ /// returning a map with those shorthand values
35
+ /// converted into low-level data for Su.
36
+ /// For example `span: all` and `location: first`
37
+ /// will be converted into specific numbers.
38
+ ///
39
+ /// @group x-normal
40
+ /// @see $susy
41
+ /// @see susy-parse
42
+ ///
43
+ /// @param {map} $config -
44
+ /// Map of Susy configuration settings to normalize.
45
+ /// See `$susy` and `susy-parse()` documentation for details.
46
+ /// @param {map | null} $context [null] -
47
+ /// Map of Susy configuration settings to use as global reference,
48
+ /// or `null` to use global settings.
49
+ ///
50
+ /// @return {map} -
51
+ /// Map of Susy configuration settings,
52
+ /// with all values normalized for Su math functions.
53
+ @function susy-normalize(
54
+ $config,
55
+ $context: null
56
+ ) {
57
+ // Spread
58
+ @each $setting in ('spread', 'container-spread') {
59
+ $value: map-get($config, $setting);
60
+
61
+ @if $value {
62
+ $value: susy-normalize-spread($value);
63
+ $config: map-merge($config, ($setting: $value));
64
+ }
65
+ }
66
+
67
+ // Columns
68
+ $columns: map-get($config, 'columns');
69
+
70
+ @if $columns {
71
+ $columns: susy-normalize-columns($columns, $context);
72
+ $config: map-merge($config, ('columns': $columns));
73
+ }
74
+
75
+ @if not $columns {
76
+ $map: type-of($context) == 'map';
77
+ $columns: if($map, map-get($context, 'columns'), null);
78
+ $columns: $columns or susy-get('columns');
79
+ }
80
+
81
+ // Span
82
+ $span: map-get($config, 'span');
83
+
84
+ @if $span {
85
+ $span: susy-normalize-span($span, $columns);
86
+ $config: map-merge($config, ('span': $span));
87
+ }
88
+
89
+ // Location
90
+ $location: map-get($config, 'location');
91
+
92
+ @if $location {
93
+ $location: susy-normalize-location($span, $location, $columns);
94
+ $config: map-merge($config, ('location': $location));
95
+ }
96
+
97
+ @return $config;
98
+ }
99
+
100
+
101
+
102
+ // Normalize Span
103
+ // --------------
104
+ /// Normalize `span` shorthand for Su.
105
+ /// Su span syntax allows an explicit length (e.g. `3em`),
106
+ /// unitless column-span number (e.g. `3` columns),
107
+ /// or an explicit list of columns (e.g. `(3 5 8)`).
108
+ ///
109
+ /// Susy span syntax also allows the `all` keyword,
110
+ /// which will be converted to a slice of the context
111
+ /// in normalization.
112
+ ///
113
+ /// @group x-normal
114
+ ///
115
+ /// @param {number | list | 'all'} $span -
116
+ /// Span value to normalize.
117
+ /// @param {list} $columns -
118
+ /// Normalized list of columns in the grid
119
+ ///
120
+ /// @return {number | list} -
121
+ /// Number or list value for `$span`
122
+ @function susy-normalize-span(
123
+ $span,
124
+ $columns: susy-get('columns')
125
+ ) {
126
+ @if ($span == 'all') {
127
+ @return length($columns);
128
+ }
129
+
130
+ @return $span;
131
+ }
132
+
133
+
134
+
135
+ // Normalize Columns
136
+ // -----------------
137
+ /// Normalize `column` shorthand for Su.
138
+ /// Su column syntax only allows column lists (e.g. `120px 1 1 1 120px`).
139
+ ///
140
+ /// Susy span syntax also allows a unitless `slice` number (e.g `of 5`),
141
+ /// which will be converted to a slice of the context
142
+ /// in normalization.
143
+ ///
144
+ /// @group x-normal
145
+ ///
146
+ /// @param {list | integer} $columns -
147
+ /// List of available columns,
148
+ /// or unitless integer representing a slice of
149
+ /// the available context.
150
+ /// @param {map | null} $context [null] -
151
+ /// Map of Susy configuration settings to use as global reference,
152
+ /// or `null` to access global settings.
153
+ ///
154
+ /// @return {list} -
155
+ /// Columns list value, normalized for Su input.
156
+ ///
157
+ /// @throws
158
+ /// when attempting to access a slice of asymmetrical context
159
+ @function susy-normalize-columns(
160
+ $columns,
161
+ $context: null
162
+ ) {
163
+ $context: $context or susy-settings();
164
+
165
+ @if type-of($columns) == 'list' {
166
+ @return _susy-flatten($columns);
167
+ }
168
+
169
+ @if (type-of($columns) == 'number') and (unitless($columns)) {
170
+ $span: $columns;
171
+ $context: map-get($context, 'columns');
172
+ $symmetrical: susy-repeat(length($context), nth($context, 1));
173
+
174
+ @if ($context == $symmetrical) {
175
+ @return susy-repeat($span, nth($context, 1));
176
+ } @else {
177
+ $actual: 'of `#{$span}`';
178
+ $columns: 'grid-columns `#{$context}`';
179
+ @return _susy-error(
180
+ 'context-slice #{$actual} can not be determined based on #{$columns}.',
181
+ 'susy-normalize-columns');
182
+ }
183
+ }
184
+
185
+ @return $columns;
186
+ }
187
+
188
+
189
+
190
+ // Normalize Spread
191
+ // ----------------
192
+ /// Normalize `spread` shorthand for Su.
193
+ /// Su spread syntax only allows the numbers `-1`, `0`, or `1` –
194
+ /// representing the number of gutters covered
195
+ /// in relation to columns spanned.
196
+ ///
197
+ /// Susy spread syntax also allows keywords for each value –
198
+ /// `narrow` for `-1`, `wide` for `0`, or `wider` for `1` –
199
+ /// which will be converted to their respective integers
200
+ /// in normalization.
201
+ ///
202
+ /// @group x-normal
203
+ ///
204
+ /// @param {0 | 1 | -1 | 'narrow' | 'wide' | 'wider'} $spread -
205
+ /// Spread across adjacent gutters, relative to a column-count —
206
+ /// either `narrow` (-1), `wide` (0), or `wider` (1)
207
+ ///
208
+ /// @return {number} -
209
+ /// Numeric value for `$spread`
210
+ @function susy-normalize-spread(
211
+ $spread
212
+ ) {
213
+ $normal-spread: (
214
+ 'narrow': -1,
215
+ 'wide': 0,
216
+ 'wider': 1,
217
+ );
218
+
219
+ @return map-get($normal-spread, $spread) or $spread;
220
+ }
221
+
222
+
223
+
224
+ // Normalize Location
225
+ // ------------------
226
+ /// Normalize `location` shorthand for Su.
227
+ /// Su location syntax requires the (1-indexed) number for a column.
228
+ ///
229
+ /// Susy also allows the `first` and `last` keywords,
230
+ /// where `first` is always `1`,
231
+ /// and `last` is calculated based on span and column values.
232
+ /// Both keywords are normalized into an integer index
233
+ /// in normalization.
234
+ ///
235
+ /// @group x-normal
236
+ ///
237
+ /// @param {number} $span -
238
+ /// Number of grid-columns to be spanned
239
+ /// @param {integer | 'first' | 'last'} $location -
240
+ /// Starting (1-indexed) column position of a span,
241
+ /// or a named location keyword.
242
+ /// @param {list} $columns -
243
+ /// Already-normalized list of columns in the grid.
244
+ ///
245
+ /// @return {integer} -
246
+ /// Numeric value for `$location`
247
+ @function susy-normalize-location(
248
+ $span,
249
+ $location,
250
+ $columns
251
+ ) {
252
+ $count: length($columns);
253
+ $normal-locations: (
254
+ 'first': 1,
255
+ 'alpha': 1,
256
+ 'last': $count - $span + 1,
257
+ 'omega': $count - $span + 1,
258
+ );
259
+
260
+ @return map-get($normal-locations, $location) or $location;
261
+ }
@@ -0,0 +1,163 @@
1
+ /// Shorthand Syntax Parser
2
+ /// =======================
3
+ /// The syntax parser converts [shorthand syntax][short]
4
+ /// into a map of settings that can be compared/merged with
5
+ /// other config maps and global setting.
6
+ ///
7
+ /// [short]: b-api.html
8
+ ///
9
+ /// @group x-parser
10
+
11
+
12
+
13
+ // Parse
14
+ // -----
15
+ /// The `parse` function provides all the syntax-sugar in Susy,
16
+ /// converting user shorthand
17
+ /// into a usable map of keys and values
18
+ /// that can be normalized and passed to Su.
19
+ ///
20
+ /// @group x-parser
21
+ /// @see $susy
22
+ ///
23
+ /// @param {list} $shorthand -
24
+ /// Shorthand expression to define the width of the span,
25
+ /// optionally containing:
26
+ /// - a count, length, or column-list span;
27
+ /// - `at $n`, `first`, or `last` location on asymmetrical grids;
28
+ /// - `narrow`, `wide`, or `wider` for optionally spreading
29
+ /// across adjacent gutters;
30
+ /// - `of $n <spread>` for available grid columns
31
+ /// and spread of the container
32
+ /// (span counts like `of 6` are only valid
33
+ /// in the context of symmetrical grids);
34
+ /// - and `set-gutters $n` to override global gutter settings
35
+ /// @param {bool} $context-only [false] -
36
+ /// Allow the parser to ignore span and span-spread values,
37
+ /// only parsing context and container-spread.
38
+ /// This makes it possible to accept spanless values,
39
+ /// like the `gutters()` syntax.
40
+ /// When parsing context-only,
41
+ /// the `of` indicator is optional.
42
+ ///
43
+ /// @return {map} -
44
+ /// Map of span and grid settings
45
+ /// parsed from shorthand input –
46
+ /// including all the properties available globally –
47
+ /// `columns`, `gutters`, `spread`, `container-spread` –
48
+ /// along with the span-specific properties
49
+ /// `span`, and `location`.
50
+ ///
51
+ /// @throw
52
+ /// when a shorthand value is not recognized
53
+ @function susy-parse(
54
+ $shorthand,
55
+ $context-only: false
56
+ ) {
57
+ $parse-error: 'Unknown shorthand property:';
58
+ $options: (
59
+ 'first': 'location',
60
+ 'last': 'location',
61
+ 'alpha': 'location',
62
+ 'omega': 'location',
63
+ 'narrow': 'spread',
64
+ 'wide': 'spread',
65
+ 'wider': 'spread',
66
+ );
67
+
68
+ $return: ();
69
+ $span: null;
70
+ $columns: null;
71
+
72
+ $of: null;
73
+ $next: false;
74
+
75
+ // Allow context-only shorthand, without span
76
+ @if ($context-only) and (not index($shorthand, 'of')) {
77
+ @if su-valid-columns($shorthand, 'fail-silent') {
78
+ $shorthand: 'of' $shorthand;
79
+ } @else {
80
+ $shorthand: join('of', $shorthand);
81
+ }
82
+ }
83
+
84
+ // loop through the shorthand list
85
+ @for $i from 1 through length($shorthand) {
86
+ $item: nth($shorthand, $i);
87
+ $type: type-of($item);
88
+ $error: false;
89
+ $details: '[#{$type}] `#{$item}`';
90
+
91
+ // if we know what's supposed to be coming next…
92
+ @if $next {
93
+
94
+ // Add to the return map
95
+ $return: map-merge($return, ($next: $item));
96
+
97
+ // Reset next to `false`
98
+ $next: false;
99
+
100
+ } @else { // If we don't know what's supposed to be coming…
101
+
102
+ // Keywords…
103
+ @if ($type == 'string') {
104
+ // Check the map for keywords…
105
+ @if map-has-key($options, $item) {
106
+ $setting: map-get($options, $item);
107
+
108
+ // Spread could be on the span or the container…
109
+ @if ($setting == 'spread') and ($of) {
110
+ $return: map-merge($return, ('container-spread': $item));
111
+ } @else {
112
+ $return: map-merge($return, ($setting: $item));
113
+ }
114
+
115
+ } @else if ($item == 'all') {
116
+ // `All` is a span shortcut
117
+ $span: 'all';
118
+ } @else if ($item == 'at') {
119
+ // Some keywords setup what's next…
120
+ $next: 'location';
121
+ } @else if ($item == 'set-gutters') {
122
+ $next: 'gutters';
123
+ } @else if ($item == 'of') {
124
+ $of: true;
125
+ } @else {
126
+ $error: true;
127
+ }
128
+
129
+ } @else if ($type == 'number') or ($type == 'list') { // Numbers & lists…
130
+
131
+ @if not ($span or $of) {
132
+ // We don't have a span, and we're not expecting context…
133
+ $span: $item;
134
+ } @else if ($of) and (not $columns) {
135
+ // We are expecting context…
136
+ $columns: $item;
137
+ } @else {
138
+ $error: true;
139
+ }
140
+
141
+ } @else {
142
+ $error: true;
143
+ }
144
+ }
145
+
146
+ @if $error {
147
+ @return _susy-error('#{$parse-error} #{$details}', 'susy-parse');
148
+ }
149
+ }
150
+
151
+ // If we have span, merge it in
152
+ @if $span {
153
+ $return: map-merge($return, ('span': $span));
154
+ }
155
+
156
+ // If we have columns, merge them in
157
+ @if $columns {
158
+ $return: map-merge($return, ('columns': $columns));
159
+ }
160
+
161
+ // Return the map of settings…
162
+ @return $return;
163
+ }
@@ -0,0 +1,329 @@
1
+ /// Susy3 Configuration
2
+ /// ===================
3
+ /// Susy3 has 4 core settings, in a single settings map.
4
+ /// You'll notice a few differences from Susy2:
5
+ ///
6
+ /// **Columns** no longer accept a single number, like `12`,
7
+ /// but use a syntax more similar to the new
8
+ /// CSS [grid-template-columns][columns] –
9
+ /// a list of relative sizes for each column on the grid.
10
+ /// Unitless numbers in Susy act very similar to `fr` units in CSS,
11
+ /// and the `susy-repeat()` function (similar to the css `repeat()`)
12
+ /// helps quickly establish equal-width columns.
13
+ ///
14
+ /// [columns]: https://developer.mozilla.org/en-US/docs/Web/CSS/grid-template-columns
15
+ ///
16
+ /// - `susy-repeat(12)` will create 12 fluid, equal-width columns
17
+ /// - `susy-repeat(6, 120px)` will create 6 equal `120px`-wide columns
18
+ /// - `120px susy-repeat(4) 120px` will create 6 columns,
19
+ /// the first and last are `120px`,
20
+ /// while the middle 4 are equal fractions of the remainder.
21
+ /// Susy will output `calc()` values in order to achieve this.
22
+ ///
23
+ /// **Gutters** haven't changed –
24
+ /// a single fraction or explicit width –
25
+ /// but the `calc()` output feature
26
+ /// means you can now use any combination of units and fractions
27
+ /// to create static-gutters on a fluid grid, etc.
28
+ ///
29
+ /// **Spread** existed in the Susy2 API as a span option,
30
+ /// and was otherwise handled behind the scenes.
31
+ /// Now we're giving you full control over all spread issues.
32
+ /// You can find a more [detailed explanation of spread on the blog][spread].
33
+ ///
34
+ /// [spread]: http://oddbird.net/2017/06/13/susy-spread/
35
+ ///
36
+ /// You can access your global settings at any time
37
+ /// with the `susy-settings()` function,
38
+ /// or grab a single setting from the global scope
39
+ /// with `susy-get('columns')`, `susy-get('gutters')` etc.
40
+ ///
41
+ /// @group a-config
42
+ /// @link http://oddbird.net/2017/06/13/susy-spread/
43
+ /// Article: Understanding Spread in Susy3
44
+ ///
45
+ /// @see $susy
46
+ /// @see susy-settings
47
+ /// @see susy-get
48
+
49
+
50
+
51
+ // Susy
52
+ // ----
53
+ /// The grid is defined in a single map variable,
54
+ /// with four initial properties:
55
+ /// `columns`, `gutters`, `spread` and `container-spread`.
56
+ /// Anything you put in the root `$susy` variable map
57
+ /// will be treated as a global project default.
58
+ /// You can create similar configuration maps
59
+ /// under different variable names,
60
+ /// to override the defaults as-needed.
61
+ ///
62
+ /// @group a-config
63
+ /// @type Map
64
+ ///
65
+ /// @see $_susy-defaults
66
+ /// @see {function} susy-repeat
67
+ /// @link
68
+ /// https://codepen.io/mirisuzanne/pen/EgmJJp?editors=1100
69
+ /// Spread examples on CodePen
70
+ ///
71
+ /// @prop {list} columns -
72
+ /// Columns are described by a list of numbers,
73
+ /// representing the relative width of each column.
74
+ /// The syntax is a simplified version of CSS native
75
+ /// `grid-template-columns`,
76
+ /// expecting a list of grid-column widths.
77
+ /// Unitless numbers create fractional fluid columns
78
+ /// (similar to the CSS-native `fr` unit),
79
+ /// while length values (united numbers)
80
+ /// are used to define static columns.
81
+ /// You can mix-and match units and fractions,
82
+ /// to create a mixed grid.
83
+ /// Susy will generate `calc()` values when necessary,
84
+ /// to make all your units work together.
85
+ ///
86
+ /// Use the `susy-repeat($count, $value)` function
87
+ /// to more easily repetative columns,
88
+ /// similar to the CSS-native `repeat()`.
89
+ ///
90
+ /// - `susy-repeat(8)`:
91
+ /// an 8-column, symmetrical, fluid grid.
92
+ /// <br />Identical to `(1 1 1 1 1 1 1 1)`.
93
+ /// - `susy-repeat(6, 8em)`:
94
+ /// a 6-column, symmetrical, em-based grid.
95
+ /// <br />Identical to `(8em 8em 8em 8em 8em 8em)`.
96
+ /// - `(300px susy-repeat(4) 300px)`:
97
+ /// a 6-column, asymmetrical, mixed fluid/static grid
98
+ /// using `calc()` output.
99
+ /// <br />Identical to `(300px 1 1 1 1 300px)`.
100
+ ///
101
+ /// **NOTE** that `12` is no longer a valid 12-column grid definition,
102
+ /// and you must list all the columns individually
103
+ /// (or by using the `susy-repeat()` function).
104
+ ///
105
+ /// @prop {number} gutters -
106
+ /// Gutters are defined as a single width,
107
+ /// or fluid ratio, similar to the native-CSS
108
+ /// `grid-column-gap` syntax.
109
+ /// Similar to columns,
110
+ /// gutters can use any valid CSS length unit,
111
+ /// or unitless numbers to define a relative fraction.
112
+ ///
113
+ /// - `0.5`:
114
+ /// a fluid gutter, half the size of a single-fraction column.
115
+ /// - `1em`:
116
+ /// a static gutter, `1em` wide.
117
+ ///
118
+ /// Mix static gutters with fluid columns, or vice versa,
119
+ /// and Susy will generate the required `calc()` to make it work.
120
+ ///
121
+ /// @prop {string} spread [narrow] -
122
+ /// Spread of an element across adjacent gutters:
123
+ /// either `narrow` (none), `wide` (one), or `wider` (two)
124
+ ///
125
+ /// - Both spread settings default to `narrow`,
126
+ /// the most common use-case.
127
+ /// A `narrow` spread only has gutters *between* columns
128
+ /// (one less gutter than columns).
129
+ /// This is how all css-native grids work,
130
+ /// and most margin-based grid systems.
131
+ /// - A `wide` spread includes the same number of gutters as columns,
132
+ /// spanning across a single side-gutter.
133
+ /// This is how most padding-based grid systems often work,
134
+ /// and is also useful for pushing and pulling elements into place.
135
+ /// - The rare `wider` spread includes gutters
136
+ /// on both sides of the column-span
137
+ /// (one more gutters than columns).
138
+ ///
139
+ /// @prop {string} container-spread [narrow] -
140
+ /// Spread of a container around adjacent gutters:
141
+ /// either `narrow` (none), `wide` (one), or `wider` (two).
142
+ /// See `spread` property for details.
143
+ ///
144
+ /// @since 3.0.0-beta.1 -
145
+ /// `columns` setting no longer accepts numbers
146
+ /// (e.g. `12`) for symmetrical fluid grids,
147
+ /// or the initial `12 x 120px` syntax for
148
+ /// symmetrical fixed-unit grids.
149
+ /// Use `susy-repeat(12)` or `susy-repeat(12, 120px)` instead.
150
+ ///
151
+ /// @example scss - default values
152
+ /// // 4 symmetrical, fluid columns
153
+ /// // gutters are 1/4 the size of a column
154
+ /// // elements span 1 less gutter than columns
155
+ /// // containers span 1 less gutter as well
156
+ /// $susy: (
157
+ /// 'columns': susy-repeat(4),
158
+ /// 'gutters': 0.25,
159
+ /// 'spread': 'narrow',
160
+ /// 'container-spread': 'narrow',
161
+ /// );
162
+ ///
163
+ /// @example scss - inside-static gutters
164
+ /// // 6 symmetrical, fluid columns…
165
+ /// // gutters are static, triggering calc()…
166
+ /// // elements span equal columns & gutters…
167
+ /// // containers span equal columns & gutters…
168
+ /// $susy: (
169
+ /// 'columns': susy-repeat(6),
170
+ /// 'gutters': 0.5em,
171
+ /// 'spread': 'wide',
172
+ /// 'container-spread': 'wide',
173
+ /// );
174
+ $susy: () !default;
175
+
176
+
177
+
178
+ // Susy Repeat
179
+ // -----------
180
+ /// Similar to the `repeat(<count>, <value>)` function
181
+ /// that is available in native CSS Grid templates,
182
+ /// the `susy-repeat()` function helps generate repetative layouts
183
+ /// by repeating any value a given number of times.
184
+ /// Where Susy previously allowed `8` as a column definition
185
+ /// for 8 equal columns, you should now use `susy-repeat(8)`.
186
+ ///
187
+ /// @group a-config
188
+ ///
189
+ /// @param {integer} $count -
190
+ /// The number of repetitions, e.g. `12` for a 12-column grid.
191
+ /// @param {*} $value [1] -
192
+ /// The value to be repeated.
193
+ /// Technically any value can be repeated here,
194
+ /// but the function exists to repeat column-width descriptions:
195
+ /// e.g. the default `1` for single-fraction fluid columns,
196
+ /// `5em` for a static column,
197
+ /// or even `5em 120px` if you are alternating column widths.
198
+ ///
199
+ /// @return {list} -
200
+ /// List of repeated values
201
+ ///
202
+ /// @example scss
203
+ /// // 12 column grid, with 5em columns
204
+ /// $susy: (
205
+ /// columns: susy-repeat(12, 5em),
206
+ /// );
207
+ ///
208
+ /// @example scss
209
+ /// // asymmetrical 5-column grid
210
+ /// $susy: (
211
+ /// columns: 20px susy-repeat(3, 100px) 20px,
212
+ /// );
213
+ ///
214
+ /// /* result: #{susy-get('columns')} */
215
+ @function susy-repeat(
216
+ $count,
217
+ $value: 1
218
+ ) {
219
+ $return: ();
220
+
221
+ @for $i from 1 through $count {
222
+ $return: join($return, $value);
223
+ }
224
+
225
+ @return $return;
226
+ }
227
+
228
+
229
+
230
+ // Susy Defaults
231
+ // -------------
232
+ /// Configuration map of Susy factory defaults.
233
+ /// Do not override this map directly –
234
+ /// use `$susy` for user and project setting overrides.
235
+ ///
236
+ /// @access private
237
+ /// @type Map
238
+ ///
239
+ /// @see $susy
240
+ ///
241
+ /// @prop {number | list} columns [susy-repeat(4)]
242
+ /// @prop {number} gutters [0.25]
243
+ /// @prop {string} spread ['narrow']
244
+ /// @prop {string} container-spread ['narrow']
245
+ $_susy-defaults: (
246
+ 'columns': susy-repeat(4),
247
+ 'gutters': 0.25,
248
+ 'spread': 'narrow',
249
+ 'container-spread': 'narrow',
250
+ );
251
+
252
+
253
+
254
+ // Susy Settings
255
+ // -------------
256
+ /// Return a combined map of Susy settings,
257
+ /// based on the factory defaults (`$_susy-defaults`),
258
+ /// user-defined project configuration (`$susy`),
259
+ /// and any local overrides required –
260
+ /// such as a configuration map passed into a function.
261
+ ///
262
+ /// @group a-config
263
+ ///
264
+ /// @param {maps} $overrides… -
265
+ /// Optional map override of global configuration settings.
266
+ /// See `$susy` above for properties.
267
+ ///
268
+ /// @return {map} -
269
+ /// Combined map of Susy configuration settings,
270
+ /// in order of specificity:
271
+ /// any `$overrides...`,
272
+ /// then `$susy` project settings,
273
+ /// and finally the `$_susy-defaults`
274
+ ///
275
+ /// @example scss - global settings
276
+ /// @each $key, $value in susy-settings() {
277
+ /// /* #{$key}: #{$value} */
278
+ /// }
279
+ ///
280
+ /// @example scss - local settings
281
+ /// $local: ('columns': 1 2 3 5 8);
282
+ ///
283
+ /// @each $key, $value in susy-settings($local) {
284
+ /// /* #{$key}: #{$value} */
285
+ /// }
286
+ @function susy-settings(
287
+ $overrides...
288
+ ) {
289
+ $settings: map-merge($_susy-defaults, $susy);
290
+
291
+ @each $config in $overrides {
292
+ $settings: map-merge($settings, $config);
293
+ }
294
+
295
+ @return $settings;
296
+ }
297
+
298
+
299
+
300
+ // Susy Get
301
+ // --------
302
+ /// Return the current global value of any Susy setting
303
+ ///
304
+ /// @group a-config
305
+ ///
306
+ /// @param {string} $key -
307
+ /// Setting to retrieve from the configuration.
308
+ ///
309
+ /// @return {*} -
310
+ /// Value mapped to `$key` in the configuration maps,
311
+ /// in order of specificity:
312
+ /// `$susy`, then `$_susy-defaults`
313
+ ///
314
+ /// @example scss -
315
+ /// /* columns: #{susy-get('columns')} */
316
+ /// /* gutters: #{susy-get('gutters')} */
317
+ @function susy-get(
318
+ $key
319
+ ) {
320
+ $settings: susy-settings();
321
+
322
+ @if not map-has-key($settings, $key) {
323
+ @return _susy-error(
324
+ 'There is no Susy setting called `#{$key}`',
325
+ 'susy-get');
326
+ }
327
+
328
+ @return map-get($settings, $key);
329
+ }