flint-gs 1.5.0 → 1.6.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 86f446a4c55cb2d708fe52353d16116ca09b852a
4
- data.tar.gz: 356f208c87bd7861cba705549c2657a304cd4955
3
+ metadata.gz: 3df9a000607508b222c3f0ca47374869bb6696b7
4
+ data.tar.gz: c6d90d4634bc5b5a9f88a5ce6748165f400c865e
5
5
  SHA512:
6
- metadata.gz: 3bdccfc0a8c3515397f08419773009f35e0b769b9f2c1a80eec9789e05001805a9c70ddd3d548b9892ad6e069c87c677df32561bae48a946c75b5c7b70981d22
7
- data.tar.gz: 4dbfa15f7d4d1f5ebeb1f0232f16bf879362460a1955052009d45342214fa16a3537388e6279a81ca12123deae0400d86d1aef0f339ac4a6b604c5ebf12d8458
6
+ metadata.gz: 66f5a7f7c80c192a9120d82bcd6ad354389e7f9c858ddb31105a67a0217fc139855ac140fe6673d7e761c55bb4b7188b8e4bf6464a9daeb6f5685a87831b9dc8
7
+ data.tar.gz: fe967308897a78afcd87a83409712efbf937d9abf7ea62ba200e47f532a72331929c03ef4a2006600d55f7c187c2d25546b907707c86100125afe039de33f43d
data/README.md CHANGED
@@ -1,11 +1,33 @@
1
1
  # Flint [![Gem Version](https://badge.fury.io/rb/flint-gs.svg)](http://badge.fury.io/rb/flint-gs)
2
2
 
3
- **Flint is designed to be a flexible layout toolkit that developers can use for any responsive grid-based project.** Built on Sass 3.3, Flint is capable of complex responsive layouts customized at each breakpoint; all while using a single mixin, having minimal output, as well as being completely semantic. All of your layout settings are housed in a simple config file and is immensely customizable. Flint will only output the code you need, and nothing else. We handle the hard stuff, so you can focus on the rest.
3
+ **Flint is designed to be a flexible layout toolkit that developers can use for any responsive grid-based project.** Built on Sass 3.3, Flint is capable of complex responsive layouts customized at each breakpoint; all while using a single mixin, having minimal output, as well as being completely semantic. All of your layout settings are housed in a simple config file that is immensely customizable. Flint will only output the code you need, and nothing else. We handle the hard stuff, so you can focus on the rest.
4
4
 
5
5
  Take it for a spin on [SassMeister.com](http://sassmeister.com/gist/11489231)!
6
6
 
7
7
  Enjoy.
8
8
 
9
+ ## Table of Contents
10
+
11
+ 1. [Requirements](#requirements)
12
+ 1. [Installation](#installation)
13
+ 1. [Documentation](#documentation)
14
+ * [Config](#config)
15
+ * [Foundation](#foundation)
16
+ * [Container](#container)
17
+ * [Clearfix](#clear)
18
+ * [Recursive shorthand](#recursive-shorthand)
19
+ * [Recursive shorthand with identical context](#recursive-shorthand-with-identical-context)
20
+ * [Recursive shorthand with variable context](#recursive-shorthand-with-variable-context)
21
+ * [Variable shorthand](#variable-shorthand)
22
+ * [Variable shorthand with context](#variable-shorthand-with-context)
23
+ * [Wrapping in media queries](#wrapping-in-media-queries)
24
+ * [Call by alias](#call-by-alias)
25
+ * [Gutter modifiers](#gutter-modifiers)
26
+ * [Shift modifiers](#shift)
27
+ 1. [Syntax support](#syntax-support)
28
+ 1. [Authors](#authors)
29
+ 1. [License](#license)
30
+
9
31
  ## Requirements
10
32
 
11
33
  * Sass ~> 3.3.0
@@ -13,11 +35,11 @@ Enjoy.
13
35
 
14
36
  ## Installation
15
37
 
16
- 1. `gem install flint-gs`
38
+ 1. Install via Ruby `gem install flint-gs`, or Bower `bower install flint`
17
39
  2. Add `require "flint"` to your `config.rb`
18
- 3. Import it in your stylesheets with `@import "flint";`
40
+ 3. Import it in your stylesheets with `@import "flint"`
19
41
 
20
- If you don't want to install the gem, download or clone the current build files and use the starter `config.rb` to require any custom Ruby functions Flint uses. Currently this is required, as we're making use of custom SassScript functions until the script '&' [returns to Sass](https://gist.github.com/nex3/8050187). Adjust the paths according to your project.
42
+ If you don't want to install it, then simply download or clone the current build files. Use the starter `config.rb` to require any custom functions Flint uses; currently this is required, as we're making use of custom SassScript functions until the 'script `&`' [returns to Sass](https://gist.github.com/nex3/8050187). Adjust the paths according to your project.
21
43
 
22
44
  ## Documentation
23
45
 
@@ -27,7 +49,7 @@ Flint's `config` map is unique in the ability that you may define an unlimited n
27
49
 
28
50
  Speaking of not being like most frameworks, Flint does not require you to set a ridiculous amount of variables just to use a single breakpoint. It actually doesn't require you to set *any* variables. It also doesn't require you to install a seperate extension so that you can define your breakpoints; *all of these features are baked into Flint.* Your columns are fully related to your breakpoints, so that there is never any confusion and everything is kept nice and simple.
29
51
 
30
- #### Usage
52
+ ##### Usage
31
53
 
32
54
  To begin, you can either use the default `config` (below) which comes baked in, or you can define your own using the `$flint` variable, using the default config as a template. Settings may be entered in `px` or `em`, and Flint will do the rest.
33
55
 
@@ -35,13 +57,13 @@ To begin, you can either use the default `config` (below) which comes baked in,
35
57
 
36
58
  ```scss
37
59
  // Configuration map
38
- //--------------------------------------------------------------------------------
39
- // @param [map] : Here you can set up your various breakpoints for your
60
+ // -------------------------------------------------------------------------------
61
+ // @param breakpoint [map] : Here you can set up your various breakpoints for your
40
62
  // project. Any number of breakpoints is acceptable. You must include a column
41
63
  // count and breakpoint value for each listed breakpoint. The order does have
42
64
  // to follow a `DESC` order. Unit (px | em) chosen here must be used consistently
43
65
  // throughout the rest of the config map.
44
- //--------------------------------------------------------------------------------
66
+ // -------------------------------------------------------------------------------
45
67
  // @param default [string] : alias of breakpoint that is your grid default
46
68
  // @param grid [string] : style of grid
47
69
  // @param gutter [number | false] : contextual size of gutter
@@ -49,69 +71,74 @@ To begin, you can either use the default `config` (below) which comes baked in,
49
71
  // @param max-width [number | bool] : max-width for containers
50
72
  // @param center-container [bool] : if you want a centered container
51
73
  // @param border-box-sizing [bool] : if you want box-sizing: border-box applied
74
+ // @param support-syntax [string | false] : syntax to support
52
75
  // @param debug-mode [bool] : ouputs debug properties
53
76
  // -------------------------------------------------------------------------------
54
77
 
55
78
  $flint: (
56
79
 
57
- // Grid configuration
58
- "config": (
80
+ // Grid configuration
81
+ "config": (
82
+
83
+ // Define breakpoints [any amount of breakpoints]
84
+ // Any alias you like, minus reserved Flint words [i.e. "settings", "config", etc.]
85
+ "desktop": (
59
86
 
60
- // Define breakpoints (any amount of breakpoints)
61
- // Any alias you like, minus reserved Flint words (i.e. "settings", "config", etc.)
62
- "desktop": (
87
+ // Options: 0-infinity
88
+ "columns": 16,
63
89
 
64
- // Options: 0-infinity
65
- "columns": 16,
90
+ // Options: number[unit]
91
+ "breakpoint": 80em,
92
+ ),
66
93
 
67
- // Options: value(unit)
68
- "breakpoint": 1280px,
69
- ),
94
+ // Same applies for other breakpoints
95
+ // ----
96
+ // Remember, you're not fixed to just 4 breakpoints like we have here
97
+ "laptop": (
98
+ "columns": 12,
99
+ "breakpoint": 60em,
100
+ ),
101
+ "tablet": (
102
+ "columns": 8,
103
+ "breakpoint": 40em,
104
+ ),
105
+ "mobile": (
106
+ "columns": 4,
107
+ "breakpoint": 20em,
108
+ ),
70
109
 
71
- // Same applies for other breakpoints
72
- // Remember, you're not fixed to just 4 breakpoints like we have here
73
- "laptop": (
74
- "columns": 12,
75
- "breakpoint": 960px,
76
- ),
77
- "tablet": (
78
- "columns": 8,
79
- "breakpoint": 640px,
80
- ),
81
- "mobile": (
82
- "columns": 4,
83
- "breakpoint": 320px,
84
- ),
110
+ // Additional grid settings [required]
111
+ "settings": (
85
112
 
86
- // Additional grid settings (required)
87
- "settings": (
113
+ // Any breakpoint's alias
114
+ "default": "mobile",
88
115
 
89
- // Any breakpoint's alias
90
- "default": "mobile",
116
+ // Options: fluid | fixed
117
+ "grid": "fluid",
91
118
 
92
- // Options: fluid | fixed
93
- "grid": "fluid",
119
+ // Options: number[unit]
120
+ "gutter": 0.625em,
94
121
 
95
- // Options: value(unit)
96
- "gutter": 10px,
122
+ // Options: left | right
123
+ "float-style": "left",
97
124
 
98
- // Options: left | right
99
- "float-style": "left",
125
+ // Options: true [uses highest breakpoint] | false | number[unit]
126
+ "max-width": true,
100
127
 
101
- // Options: true (uses highest breakpoint) | false | value(unit)
102
- "max-width": true,
128
+ // Options: true | false
129
+ "center-container": true,
103
130
 
104
- // Options: true | false
105
- "center-container": true,
131
+ // Options: true | false
132
+ "border-box-sizing": true,
106
133
 
107
- // Options: true | false
108
- "border-box-sizing": true,
134
+ // Syntax support: string | false
135
+ "support-syntax": false,
109
136
 
110
- // Options: true | false
111
- "debug-mode": false,
112
- ),
113
- ),
114
- );
137
+ // Options: true | false
138
+ "debug-mode": false,
139
+ ),
140
+ ),
141
+ ) !default;
115
142
  ```
116
143
 
117
144
  ### Foundation
@@ -140,6 +167,7 @@ Outputs,
140
167
  display: block;
141
168
  float: none;
142
169
  width: 100%;
170
+ max-width: 1280px
143
171
  margin-right: auto;
144
172
  margin-left: auto;
145
173
  }
@@ -171,7 +199,7 @@ Outputs,
171
199
  }
172
200
  ```
173
201
 
174
- ###Recursive shorthand
202
+ ### Recursive shorthand
175
203
 
176
204
  Use this if you want *identical* column spans across all breakpoints.
177
205
 
@@ -274,7 +302,7 @@ Use this if your nested context is *identical* across all breakpoints. The `cont
274
302
  .parent {
275
303
  @include _(6);
276
304
 
277
- .recursive {
305
+ .recursive-child {
278
306
  @include _(3, auto); // Equivalent to : _(3, 6)
279
307
  }
280
308
  }
@@ -283,7 +311,7 @@ Use this if your nested context is *identical* across all breakpoints. The `cont
283
311
  .parent {
284
312
  @include _(6);
285
313
  }
286
- .parent .recursive {
314
+ .parent .recursive-child {
287
315
  @include _(3, auto); // Equivalent to : _(3, 6)
288
316
  }
289
317
 
@@ -291,7 +319,7 @@ Use this if your nested context is *identical* across all breakpoints. The `cont
291
319
  .parent {
292
320
  @include _(6);
293
321
  }
294
- .recursive {
322
+ .recursive-child {
295
323
  @include _(3, auto); // Equivalent to : _(3, 6)
296
324
  }
297
325
 
@@ -302,7 +330,7 @@ Use this if your nested context is *identical* across all breakpoints. The `cont
302
330
 
303
331
  Outputs,
304
332
  ```scss
305
- .recursive {
333
+ .recursive-child {
306
334
  display: block;
307
335
  float: left;
308
336
  width: 45.8333333333%;
@@ -310,21 +338,21 @@ Outputs,
310
338
  margin-left: 2.0833333333%;
311
339
  }
312
340
  @media only screen and (min-width: 641px) and (max-width: 960px) {
313
- .recursive {
341
+ .recursive-child {
314
342
  width: 45.8333333333%;
315
343
  margin-right: 2.0833333333%;
316
344
  margin-left: 2.0833333333%;
317
345
  }
318
346
  }
319
347
  @media only screen and (min-width: 321px) and (max-width: 640px) {
320
- .recursive {
348
+ .recursive-child {
321
349
  width: 45.8333333333%;
322
350
  margin-right: 2.0833333333%;
323
351
  margin-left: 2.0833333333%;
324
352
  }
325
353
  }
326
354
  @media only screen and (min-width: 0) and (max-width: 320px) {
327
- .recursive {
355
+ .recursive-child {
328
356
  width: 45.8333333333%;
329
357
  margin-right: 2.0833333333%;
330
358
  margin-left: 2.0833333333%;
@@ -334,7 +362,9 @@ Outputs,
334
362
 
335
363
  ### Recursive shorthand with variable context
336
364
 
337
- Use this if your context is *not* indentical across breakpoints. The `context` is the span of the elements parent. ***Update:*** You can now use `$context: auto`, and we'll do all the calculations for you. Just be sure a parent element with a Flint `instance` actually exists or you'll get some weird output, or none at all.
365
+ Use this if your context is *not* indentical across breakpoints. The `context` is the span of the elements parent. You can now use `$context: auto`, and we'll do all the calculations for you. Just be sure a parent selector with a Flint instance actually exists, or you'll throw a warning and get no output.
366
+
367
+ When using `$context: auto` on fixed grids, Flint will automagically calculate based on the width of the closest parent element instance.
338
368
 
339
369
  *You must include an argument for each breakpoint in your config.*
340
370
 
@@ -342,7 +372,7 @@ Use this if your context is *not* indentical across breakpoints. The `context` i
342
372
  .parent {
343
373
  @include _(10 8 6 4);
344
374
 
345
- .recursive {
375
+ .recursive-child {
346
376
  @include _(2, auto); // Equivalent to : _(2, 10 8 6 4)
347
377
  }
348
378
  }
@@ -350,7 +380,7 @@ Use this if your context is *not* indentical across breakpoints. The `context` i
350
380
 
351
381
  Outputs,
352
382
  ```scss
353
- recursive {
383
+ recursive-child {
354
384
  display: block;
355
385
  float: left;
356
386
  width: 17.5%;
@@ -358,21 +388,21 @@ recursive {
358
388
  margin-left: 1.25%;
359
389
  }
360
390
  @media only screen and (min-width: 641px) and (max-width: 960px) {
361
- .recursive {
391
+ .recursive-child {
362
392
  width: 21.875%;
363
393
  margin-right: 1.5625%;
364
394
  margin-left: 1.5625%;
365
395
  }
366
396
  }
367
397
  @media only screen and (min-width: 321px) and (max-width: 640px) {
368
- .recursive {
398
+ .recursive-child {
369
399
  width: 29.1666666667%;
370
400
  margin-right: 2.0833333333%;
371
401
  margin-left: 2.0833333333%;
372
402
  }
373
403
  }
374
404
  @media only screen and (min-width: 0) and (max-width: 320px) {
375
- .recursive {
405
+ .recursive-child {
376
406
  width: 43.75%;
377
407
  margin-right: 3.125%;
378
408
  margin-left: 3.125%;
@@ -426,13 +456,13 @@ Outputs,
426
456
 
427
457
  ### Variable shorthand with context
428
458
 
429
- Use this if you're *nesting* columns using the variable shorthand. The `context` is the span of the elements parent. ***Update:*** You can now use `$context: auto`, and we'll do all the calculations for you. Just be sure a parent element with a Flint `instance` actually exists or you'll get some weird output, or none at all.
459
+ Use this if you're *nesting* columns using the variable shorthand. The `context` is the span of the elements parent. Before using `$context: auto`, be sure a parent element with a Flint `instance` actually exists or you'll get some weird output, or none at all.
430
460
 
431
461
  ```scss
432
462
  .parent {
433
463
  @include _(16 12 8 4);
434
464
 
435
- .variable {
465
+ .variable-child {
436
466
  @include _(14 10 6 2, 16 12 8 4); // Equivalent to : _(14 10 6 2, auto)
437
467
  }
438
468
  }
@@ -440,7 +470,7 @@ Use this if you're *nesting* columns using the variable shorthand. The `context`
440
470
 
441
471
  Outputs,
442
472
  ```scss
443
- .variable {
473
+ .variable-child {
444
474
  display: block;
445
475
  float: left;
446
476
  width: 85.9375%;
@@ -448,21 +478,21 @@ Outputs,
448
478
  margin-left: 0.78125%;
449
479
  }
450
480
  @media only screen and (min-width: 641px) and (max-width: 960px) {
451
- .variable {
481
+ .variable-child {
452
482
  width: 81.25%;
453
483
  margin-right: 1.0416666667%;
454
484
  margin-left: 1.0416666667%;
455
485
  }
456
486
  }
457
487
  @media only screen and (min-width: 321px) and (max-width: 640px) {
458
- .variable {
488
+ .variable-child {
459
489
  width: 71.875%;
460
490
  margin-right: 1.5625%;
461
491
  margin-left: 1.5625%;
462
492
  }
463
493
  }
464
494
  @media only screen and (min-width: 0) and (max-width: 320px) {
465
- .variable {
495
+ .variable-child {
466
496
  width: 43.75%;
467
497
  margin-right: 3.125%;
468
498
  margin-left: 3.125%;
@@ -817,54 +847,49 @@ Outputs,
817
847
  }
818
848
  ```
819
849
 
820
- ## BEM Users
850
+ ## Syntax support
821
851
 
822
- Due to the way **BEM** is written, the instance functions cannot fallback to previous selectors in the family tree to find a parent instance, so using `$context: auto` will not work for some BEM users, depending on how you write it.
852
+ As of `1.6.0`, you can add syntax support for your preferred syntax. I built the system for BEM, but it should be easily extendable to
853
+ support your preferred syntax. Simply create a function which parses a string of selectors into a valid list. For example, the BEM syntax
854
+ function parses the selector string (for example, `.block__element__element`) like so,
823
855
 
824
856
  ```scss
825
- .block {
826
- @include _(4);
827
-
828
- &__element {
829
- @include _(2, auto);
830
- }
831
- }
832
- ```
833
-
834
- Will result in a` @warning`, and will not compile correctly as `.block` and `.block__element` are not compiled into selectors of the same family tree i.e. `.block .block__element`. But, if you write it like this:
857
+ // Support BEM syntax
858
+ // -------------------------------------------------------------------------------
859
+ // @param $selectors [string] : string of selectors to parse
860
+ // -------------------------------------------------------------------------------
861
+ // @return [string] : parsed list of selectors according to syntax
835
862
 
836
- ```scss
837
- .block {
838
- @include _(4);
863
+ @function support-syntax-bem($selectors) {
864
+ $selectors: string-to-list($selectors, "_");
865
+ $parent: nth($selectors, 1);
866
+ $selector-list: ($parent);
839
867
 
840
- .block__element {
841
- @include _(2, auto);
868
+ // Loop over each selector and build list of selectors
869
+ @each $selector in $selectors {
870
+ // Make sure current selector is not the parent
871
+ @if $selector != $parent {
872
+ // Save to selector list
873
+ $selector-list: append($selector-list, ($parent + "__" + $selector), "comma");
874
+ // Define new parent
875
+ $parent: $parent + "__" + $selector;
876
+ }
842
877
  }
843
- }
844
878
 
845
- // Or...
846
-
847
- .block {
848
- @include _(4);
849
-
850
- // Double your ampersands
851
- & &__element {
852
- @include _(2, auto);
853
- }
879
+ // Return the list of transformed selectors
880
+ @return $selector-list;
854
881
  }
855
882
  ```
856
883
 
857
- This will allow the instance functions to properly fallback from `.block .block__element` to `.block` to check for context. If writing BEM like that just isn't your thing, you can manually enter your context:
884
+ This will be parsed into a list of selectors: `.block, .block__element, .block__element__element`. The list of selectors can then be used by
885
+ instance system to look up a selectors parent, etc. To support your own preferred syntax: create a `support-syntax-<syntax-name>` function
886
+ and hook into it through the config `"support-syntax": "<syntax-name>"` option -- the system will attempt to use the `call()` function in
887
+ order to parse the selector string.
858
888
 
859
- ```scss
860
- .block {
861
- @include _(4);
889
+ #### Officially supported syntaxes
890
+ * [BEM](http://bem.info/)
862
891
 
863
- &__element {
864
- @include _(2, 4);
865
- }
866
- }
867
- ```
892
+ If you make one that isn't here, let me know and I'll look into officially supporting it.
868
893
 
869
894
  ## Authors
870
895
 
@@ -5,8 +5,8 @@ Compass::Frameworks.register('flint', :path => extension_path)
5
5
  # Version is a number. If a version contains alphas, it will be created as a prerelease version
6
6
  # Date is in the form of YYYY-MM-DD
7
7
  module Flint
8
- VERSION = "1.5.0"
9
- DATE = "2014-06-30"
8
+ VERSION = "1.6.0"
9
+ DATE = "2014-07-03"
10
10
  end
11
11
 
12
12
  # Custom functions
@@ -1,11 +1,11 @@
1
1
  // Configuration map
2
- //--------------------------------------------------------------------------------
3
- // @param [map] : Here you can set up your various breakpoints for your
2
+ // -------------------------------------------------------------------------------
3
+ // @param breakpoint [map] : Here you can set up your various breakpoints for your
4
4
  // project. Any number of breakpoints is acceptable. You must include a column
5
5
  // count and breakpoint value for each listed breakpoint. The order does have
6
6
  // to follow a `DESC` order. Unit (px | em) chosen here must be used consistently
7
7
  // throughout the rest of the config map.
8
- //--------------------------------------------------------------------------------
8
+ // -------------------------------------------------------------------------------
9
9
  // @param default [string] : alias of breakpoint that is your grid default
10
10
  // @param grid [string] : style of grid
11
11
  // @param gutter [number | false] : contextual size of gutter
@@ -13,6 +13,7 @@
13
13
  // @param max-width [number | bool] : max-width for containers
14
14
  // @param center-container [bool] : if you want a centered container
15
15
  // @param border-box-sizing [bool] : if you want box-sizing: border-box applied
16
+ // @param support-syntax [string | false] : syntax to support
16
17
  // @param debug-mode [bool] : ouputs debug properties
17
18
  // -------------------------------------------------------------------------------
18
19
 
@@ -72,6 +73,9 @@ $flint: (
72
73
  // Options: true | false
73
74
  "border-box-sizing": true,
74
75
 
76
+ // Syntax support: string | false
77
+ "support-syntax": false,
78
+
75
79
  // Options: true | false
76
80
  "debug-mode": false,
77
81
  ),
@@ -4,26 +4,38 @@
4
4
 
5
5
  // Functions
6
6
  // ----
7
+ @import "lib/exists";
8
+ // Getters
7
9
  @import "lib/map-fetch";
8
10
  @import "lib/get-value";
11
+ @import "lib/get-index";
12
+ @import "lib/get-substring";
9
13
  @import "lib/steal-key";
10
- @import "lib/exists";
14
+ @import "lib/steal-values";
15
+ // Calculations
11
16
  @import "lib/fluid-width";
12
17
  @import "lib/calc-width";
13
18
  @import "lib/calc-margin";
14
19
  @import "lib/calc-breakpoint";
15
- @import "lib/steal-values";
16
- @import "lib/get-index";
17
- @import "lib/next-index";
20
+ // Instance functions
18
21
  @import "lib/instance";
19
- @import "lib/string-to-list";
20
- @import "lib/get-substring";
21
- @import "lib/last";
22
+ @import "lib/get-family-instance";
23
+ @import "lib/get-instance-value";
24
+ // List functions
22
25
  @import "lib/list-to-string";
26
+ @import "lib/types-in-list";
27
+ @import "lib/next-index";
23
28
  @import "lib/purge";
24
29
  @import "lib/replace";
25
30
  @import "lib/remove";
26
- @import "lib/get-family-instance";
27
- @import "lib/get-instance-value";
31
+ @import "lib/last";
32
+ // String functions
28
33
  @import "lib/string-to-number";
29
- @import "lib/types-in-list";
34
+ @import "lib/string-to-list";
35
+
36
+ // Support syntax
37
+ // ---
38
+ @import "lib/use-syntax";
39
+ @import "lib/support-syntax";
40
+ // Syntaxes
41
+ @import "lib/support-syntax-bem"
@@ -1,32 +1,59 @@
1
1
  // Checks if instance exists in selector familiy tree, falls back from current selector
2
2
  // -------------------------------------------------------------------------------
3
- // @dependence `selector_string()`
4
- // @dependence `string-to-list()`
5
- // @dependence `list-to-string()`
6
- // @dependence `get-value()`
7
- // @dependence `exists()`
8
- // @dependence `remove()`
9
- // -------------------------------------------------------------------------------
10
3
  // @param $key [string] : breakpoint key to search for matching instance
4
+ // @param $syntax [string | null] : searches for instance using passed syntax
11
5
  // -------------------------------------------------------------------------------
12
6
  // @return matching instance | false
13
7
 
14
- @function get-family-instance($key: get-value("settings", "default")) {
8
+ @function get-family-instance($key: get-value("settings", "default"), $syntax: $flint__support-syntax) {
15
9
  $selector-string: selector_string();
16
- $selector-list: string-to-list($selector-string);
17
- $length: length($selector-list);
18
-
19
- // Loop through length of list of selectors
20
- @for $i from 1 through $length {
21
- // Make sure that we're not counting the current selector string
22
- @if exists($flint__instances, "#{list-to-string($selector-list, " ")}::#{$key}") and $selector-string != list-to-string($selector-list, " ") {
23
- // If true, return the matching instance key
24
- @return "#{list-to-string($selector-list, " ")}::#{$key}";
25
- } @else {
26
- // Else, remove the last selector and loop again
27
- $selector-list: remove($selector-list, last($selector-list));
10
+
11
+ // Check for syntax support, try to find instance using it
12
+ @if $syntax {
13
+ $selector-list: use-syntax($selector-string);
14
+ $length: length($selector-list);
15
+
16
+ // Loop through transformed selectors
17
+ @for $i from 1 through $length {
18
+
19
+ // Check last selector in list
20
+ @if exists($flint__instances, "#{last($selector-list)}::#{$key}") {
21
+
22
+ // Return the matching instance key
23
+ @return "#{last($selector-list)}::#{$key}";
24
+
25
+ } @else {
26
+
27
+ // Else, remove the last selector and loop again
28
+ $selector-list: remove($selector-list, last($selector-list));
29
+
30
+ }
28
31
  }
29
- }
30
32
 
31
- @return false;
32
- }
33
+ // Search for a parent instance normally
34
+ @return get-family-instance($key, null);
35
+
36
+ } @else {
37
+ $selector-list: string-to-list($selector-string);
38
+ $length: length($selector-list);
39
+
40
+ // Loop through length of list of selectors
41
+ @for $i from 1 through $length {
42
+
43
+ // Make sure that we're not counting the current selector string
44
+ @if exists($flint__instances, "#{list-to-string($selector-list, " ")}::#{$key}") and $selector-string != list-to-string($selector-list, " ") {
45
+
46
+ // Return the matching instance key
47
+ @return "#{list-to-string($selector-list, " ")}::#{$key}";
48
+
49
+ } @else {
50
+
51
+ // Else, remove the last selector and loop again
52
+ $selector-list: remove($selector-list, last($selector-list));
53
+
54
+ }
55
+ }
56
+
57
+ @return false;
58
+ }
59
+ }
@@ -12,6 +12,7 @@
12
12
  $space-indexes: ();
13
13
  $ignore-remainder: ();
14
14
  $length: str-length($string);
15
+
15
16
  // Find ignore separator, and remove remainder of string beyond that point
16
17
  @for $i from 1 through $length {
17
18
  $slice: str-slice($string, $i, $i);
@@ -19,11 +20,13 @@
19
20
  $ignore-remainder: append($ignore-remainder, $i - 1, "comma");
20
21
  }
21
22
  }
23
+
22
24
  // Redefine string and length
23
25
  @if length($ignore-remainder) >= 1 {
24
26
  $string: str-slice($string, 1, nth($ignore-remainder, 1));
25
27
  $length: str-length($string);
26
28
  }
29
+
27
30
  // Find all spaces and their indices by looking over each character in string
28
31
  @for $i from 1 through $length {
29
32
  $slice: str-slice($string, $i, $i);
@@ -31,36 +34,51 @@
31
34
  $space-indexes: append($space-indexes, $i, "comma");
32
35
  }
33
36
  }
37
+
34
38
  // Check if there are any spaces
35
39
  @if length($space-indexes) >= 1 {
40
+
36
41
  // Keep a count of number of spaces
37
42
  $count: 1;
43
+
38
44
  // Loop through each space
39
45
  @each $space in $space-indexes {
46
+
40
47
  // If is initial count, grab first substring and store in list
41
48
  @if $count == 1 {
42
49
  $matched-string: str-slice($string, 0, ($space - 1));
43
- $string-list: append($string-list, $matched-string, "comma");
50
+
51
+ @if $matched-string != "" {
52
+ $string-list: append($string-list, $matched-string, "comma");
53
+ }
44
54
  // Else, add a little math to make up for the spaces to do the same
45
55
  } @else {
46
56
  $matched-string: str-slice($string, (nth($space-indexes, ($count - 1)) + 1), ($space - 1));
47
- $string-list: append($string-list, $matched-string, "comma");
57
+
58
+ @if $matched-string != "" {
59
+ $string-list: append($string-list, $matched-string, "comma");
60
+ }
48
61
  }
62
+
49
63
  // Increase count
50
64
  $count: $count + 1;
51
65
  }
66
+
52
67
  // Now grab that last selector
53
68
  $last-space: nth($space-indexes, length($space-indexes));
54
69
  $matched-string: str-slice($string, ($last-space + 1), $length);
55
70
  $string-list: append($string-list, $matched-string, "comma");
71
+
56
72
  // Finally, return comma separated list of selectors
57
73
  @return $string-list;
58
74
  } @else {
75
+
59
76
  // Else, just return the string as a single item list
60
77
  $string-list: append($string-list, $string);
78
+
61
79
  @return $string-list;
62
80
  }
63
81
  } @else {
64
82
  @return "You did not input a valid string: #{$string}";
65
83
  }
66
- }
84
+ }
@@ -0,0 +1,25 @@
1
+ // Support BEM syntax
2
+ // -------------------------------------------------------------------------------
3
+ // @param $selectors [string] : string of selectors to parse
4
+ // -------------------------------------------------------------------------------
5
+ // @return [string] : parsed list of selectors according to syntax
6
+
7
+ @function support-syntax-bem($selectors) {
8
+ $selectors: string-to-list($selectors, "_");
9
+ $parent: nth($selectors, 1);
10
+ $selector-list: ($parent);
11
+
12
+ // Loop over each selector and build list of selectors
13
+ @each $selector in $selectors {
14
+ // Make sure current selector is not the parent
15
+ @if $selector != $parent {
16
+ // Save to selector list
17
+ $selector-list: append($selector-list, ($parent + "__" + $selector), "comma");
18
+ // Define new parent
19
+ $parent: $parent + "__" + $selector;
20
+ }
21
+ }
22
+
23
+ // Return the list of transformed selectors
24
+ @return $selector-list;
25
+ }
@@ -0,0 +1,28 @@
1
+ // Support syntax
2
+ // -------------------------------------------------------------------------------
3
+ // @param $syntax [string] : alias of syntax to support
4
+ // @param $selectors [string] : string of selectors to parse
5
+ // -------------------------------------------------------------------------------
6
+ // @return [list] : list of parsed selectors according to syntax
7
+
8
+ @function support-syntax($syntax, $selectors) {
9
+ $syntax: to-lower-case($syntax);
10
+
11
+ // Make sure syntax is supported
12
+ // ----
13
+ @if function-exists(support-syntax-#{$syntax}) {
14
+
15
+ // Support syntax
16
+ // ----
17
+ // @warning : be sure you have created a custom function to support an unknown syntax
18
+ // ----
19
+ @return call("support-syntax-#{$syntax}", $selectors);
20
+
21
+ } @else {
22
+
23
+ // Throw error if the syntax does not exist and a function to call cannot be found
24
+ @warn "You did not pass a valid syntax to `support-syntax`: #{$syntax}. Either specify a custom `support-syntax-<syntax>` function to call, or use one of the offically supported syntaxes.";
25
+ @return null;
26
+
27
+ }
28
+ }
@@ -0,0 +1,11 @@
1
+ // Use global syntax set through `set-syntax` mixin
2
+ // -------------------------------------------------------------------------------
3
+ // @param $selectors [string] : string of selectors to transform
4
+ // -------------------------------------------------------------------------------
5
+ // @return [list] : list of transformed selectors according to syntax
6
+
7
+ @function use-syntax($selectors) {
8
+ @if $flint__support-syntax {
9
+ @return call("support-syntax", $flint__support-syntax, $selectors);
10
+ }
11
+ }
@@ -16,3 +16,7 @@ $flint__instances: () !global;
16
16
  // Font size for em calculation
17
17
  // ----
18
18
  $flint__base-font-size: 16px !global;
19
+
20
+ // Global syntax support
21
+ // ----
22
+ $flint__support-syntax: get-value("settings", "support-syntax") !global;
@@ -334,7 +334,7 @@
334
334
  // -------------------------------------------------------------------------------
335
335
  // @output calculated styles
336
336
 
337
- } @else if types-in-list($span, "number") or $span == "auto" {
337
+ } @else if types-in-list($span, "number") {
338
338
 
339
339
  @for $i from 1 through length($flint__all__keys) {
340
340
 
@@ -477,7 +477,7 @@
477
477
  // -------------------------------------------------------------------------------
478
478
  // @output calculated styles
479
479
 
480
- } @else if types-in-list($key, "number") and types-in-list($span, "number") or $span == "auto" {
480
+ } @else if types-in-list($key, "number") and types-in-list($span, "number") {
481
481
 
482
482
  @for $i from 1 through length($flint__all__keys) {
483
483
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flint-gs
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ezekiel Gabrielse
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-30 00:00:00.000000000 Z
11
+ date: 2014-07-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: sass
@@ -75,7 +75,10 @@ files:
75
75
  - stylesheets/flint/functions/lib/_steal-values.scss
76
76
  - stylesheets/flint/functions/lib/_string-to-list.scss
77
77
  - stylesheets/flint/functions/lib/_string-to-number.scss
78
+ - stylesheets/flint/functions/lib/_support-syntax-bem.scss
79
+ - stylesheets/flint/functions/lib/_support-syntax.scss
78
80
  - stylesheets/flint/functions/lib/_types-in-list.scss
81
+ - stylesheets/flint/functions/lib/_use-syntax.scss
79
82
  - stylesheets/flint/globals/_globals.scss
80
83
  - stylesheets/flint/mixins/_mixins.scss
81
84
  - stylesheets/flint/mixins/lib/_calculate.scss