sassy-namespaces 0.1
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.
- checksums.yaml +7 -0
- data/README.md +122 -0
- data/lib/sassy-namespaces.rb +10 -0
- data/stylesheets/_sassy-maps.scss +53 -0
- metadata +88 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: f0bdb5ce796b20f153bb162ea5ed7ceb66d0b6dd
|
4
|
+
data.tar.gz: 1430c1505c5843be12216c336237831eacd812fe
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 83fc0385c77870ea40e837395e08a92ee0c5d48f602ac48d0035ac46b1350d4c852d0b23292fed59d38fa6d6d06a6e864b08971736c9e1d087a0165c138dc71f
|
7
|
+
data.tar.gz: 895e57d52677c65180cef5f54a9595a3a58f18d015ef5b94bc1a8b923cd37f604c9b5be59349fe262fe7cae392a18d3860ba70e71a878607fe0e2d9917c3e0b6
|
data/README.md
ADDED
@@ -0,0 +1,122 @@
|
|
1
|
+
Sassy Namespaces
|
2
|
+
================
|
3
|
+
|
4
|
+
Sass 3.3 brought us maps, which are great for organizing related values into groups, but the syntax is a bit tedious. Sassy Namespaces offers pattern for creating and accessing namespaces using Sass maps.
|
5
|
+
|
6
|
+
Yes, it's essentially a wrapper around the excellent [Sassy Maps](https://github.com/Team-Sass/Sassy-Maps) extension.
|
7
|
+
|
8
|
+
The problem
|
9
|
+
-----------
|
10
|
+
|
11
|
+
In vanilla Sass, even single-level namespaces are a bit of hassle:
|
12
|
+
|
13
|
+
```scss
|
14
|
+
$color: ();
|
15
|
+
$color: $map-merge($color, (primary: red));
|
16
|
+
|
17
|
+
foo {
|
18
|
+
bar: map-get($color, primary); // bar: red
|
19
|
+
}
|
20
|
+
```
|
21
|
+
|
22
|
+
You could define functions/mixins to streamline the process:
|
23
|
+
|
24
|
+
```scss
|
25
|
+
$color: ();
|
26
|
+
|
27
|
+
// Setter
|
28
|
+
@mixin set-color($key, $value) {
|
29
|
+
$color: $map-merge($color, ($key: $value));
|
30
|
+
}
|
31
|
+
|
32
|
+
// Getter
|
33
|
+
@function color($key) {
|
34
|
+
@return map-get($color, $key);
|
35
|
+
}
|
36
|
+
|
37
|
+
@include set-color(primary, red);
|
38
|
+
foo {
|
39
|
+
bar: color(primary); // bar: red
|
40
|
+
}
|
41
|
+
```
|
42
|
+
|
43
|
+
But this quickly gets tiresome, especially once you try to create namespaces with more than one level of hierarchy.
|
44
|
+
|
45
|
+
Sass namespaces, minus the headaches
|
46
|
+
------------------------------------
|
47
|
+
|
48
|
+
Here's how you do it with Sassy Namespaces:
|
49
|
+
|
50
|
+
```scss
|
51
|
+
@include create-namespace(color);
|
52
|
+
@include namespace-set(color, primary, red);
|
53
|
+
foo {
|
54
|
+
bar: namespace-get(color, primary); // bar: red;
|
55
|
+
}
|
56
|
+
```
|
57
|
+
|
58
|
+
Maps are created and used internally, but you don't ever have to deal with them.
|
59
|
+
|
60
|
+
It's still a good idea to create convenience functions/mixins. Pretty straightfoward:
|
61
|
+
|
62
|
+
```scss
|
63
|
+
@mixin set-color($args...) {
|
64
|
+
@include namespace-set(color, $args...);
|
65
|
+
}
|
66
|
+
|
67
|
+
@function color($args...) {
|
68
|
+
@return namespace-get(color, $args...);
|
69
|
+
}
|
70
|
+
|
71
|
+
@include set-color(primary, red);
|
72
|
+
foo {
|
73
|
+
bar: color(primary); // bar: red
|
74
|
+
}
|
75
|
+
```
|
76
|
+
|
77
|
+
|
78
|
+
If you want to set multiple values at once, without calling `namespace-set()` over and over, you can pass a map of keys and values (instead of a single key and a single value):
|
79
|
+
|
80
|
+
```scss
|
81
|
+
$map: (primary: red, secondary: green)
|
82
|
+
|
83
|
+
@include namespace-set(color, $map);
|
84
|
+
foo {
|
85
|
+
bar: namespace-get(color, primary); // bar: red
|
86
|
+
baz: namespace-get(color, secondary); // baz: green
|
87
|
+
}
|
88
|
+
```
|
89
|
+
|
90
|
+
And, since Sassy Namespaces uses Sassy Maps internally, hierarchical namespaces are free:
|
91
|
+
|
92
|
+
```scss
|
93
|
+
@include namespace-set(color, text link hover, green);
|
94
|
+
foo {
|
95
|
+
bar: namespace-get(color, text link hover); // bar: green
|
96
|
+
}
|
97
|
+
```
|
98
|
+
|
99
|
+
At any time, you can return the underlying namespace map:
|
100
|
+
|
101
|
+
```scss
|
102
|
+
@include namespace-set(color, primary, red);
|
103
|
+
$namespace-1: namespace(color);
|
104
|
+
|
105
|
+
@include namespace-set(color, secondary, green);
|
106
|
+
$namespace-2: namespace(color);
|
107
|
+
|
108
|
+
/*
|
109
|
+
$namespace-1: (
|
110
|
+
color: (
|
111
|
+
primary: red
|
112
|
+
)
|
113
|
+
)
|
114
|
+
|
115
|
+
$namespace-2: (
|
116
|
+
color: (
|
117
|
+
primary: red,
|
118
|
+
secondary: green
|
119
|
+
)
|
120
|
+
)
|
121
|
+
*/
|
122
|
+
```
|
@@ -0,0 +1,10 @@
|
|
1
|
+
require 'compass'
|
2
|
+
require 'sassy-maps'
|
3
|
+
|
4
|
+
extension_path = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
5
|
+
Compass::Frameworks.register('SassyNamespaces', :path => extension_path)
|
6
|
+
|
7
|
+
module SassyNamespaces
|
8
|
+
VERSION = "0.1"
|
9
|
+
DATE = "2014-03-17"
|
10
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
@import "sassy-maps";
|
2
|
+
|
3
|
+
$__sassy-namespaces: ();
|
4
|
+
|
5
|
+
@mixin create-namespace($name) {
|
6
|
+
$__sassy-namespaces: map-set($__sassy-namespaces, $name, ());
|
7
|
+
}
|
8
|
+
|
9
|
+
@function namespace-set($name, $args...) {
|
10
|
+
$length: length($args);
|
11
|
+
$namespace: map-get($__sassy-namespaces, $name);
|
12
|
+
|
13
|
+
@if length($args) == 1 {
|
14
|
+
@if type-of(nth($args, 1)) == map {
|
15
|
+
$namespace: map-merge($namespace, nth($args, 1));
|
16
|
+
} @else {
|
17
|
+
@warn "Must pass either a map or 2 or more values."
|
18
|
+
}
|
19
|
+
}
|
20
|
+
@else {
|
21
|
+
$keys: nth($args, 1);
|
22
|
+
|
23
|
+
@if length($keys) == 1 {
|
24
|
+
$namespace: map-set($namespace, $args...);
|
25
|
+
} @else {
|
26
|
+
$namespace: map-set-deep($namespace, $args...);
|
27
|
+
}
|
28
|
+
}
|
29
|
+
|
30
|
+
$__sassy-namespaces: map-merge($__sassy-namespaces, ($name: $namespace));
|
31
|
+
@return $namespace;
|
32
|
+
}
|
33
|
+
|
34
|
+
@function namespace-get($name, $args...) {
|
35
|
+
$length: length($args);
|
36
|
+
$namespace: map-get($__sassy-namespaces, $name);
|
37
|
+
|
38
|
+
@if $length > 0 {
|
39
|
+
$keys: nth($args, 1);
|
40
|
+
|
41
|
+
@if length($keys) == 1 {
|
42
|
+
@return map-get($namespace, $args...);
|
43
|
+
} @else {
|
44
|
+
@return map-get-deep($namespace, $args...);
|
45
|
+
}
|
46
|
+
} @else {
|
47
|
+
@return $namespace;
|
48
|
+
}
|
49
|
+
}
|
50
|
+
|
51
|
+
@mixin namespace-set($name, $args...) {
|
52
|
+
$namespace: namespace-set($name, $args...);
|
53
|
+
}
|
metadata
ADDED
@@ -0,0 +1,88 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: sassy-namespaces
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: '0.1'
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Andrew Clark
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-03-17 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: sass
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - ">="
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '3.3'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '3.3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: compass
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.12'
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.12'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: sassy-maps
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: 0.3.2
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: 0.3.2
|
55
|
+
description: Namespaces in Sass, minus the headaches.
|
56
|
+
email:
|
57
|
+
- acdlite@me.com
|
58
|
+
executables: []
|
59
|
+
extensions: []
|
60
|
+
extra_rdoc_files: []
|
61
|
+
files:
|
62
|
+
- README.md
|
63
|
+
- lib/sassy-namespaces.rb
|
64
|
+
- stylesheets/_sassy-maps.scss
|
65
|
+
homepage:
|
66
|
+
licenses: []
|
67
|
+
metadata: {}
|
68
|
+
post_install_message:
|
69
|
+
rdoc_options: []
|
70
|
+
require_paths:
|
71
|
+
- lib
|
72
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
73
|
+
requirements:
|
74
|
+
- - ">="
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
version: 1.3.6
|
82
|
+
requirements: []
|
83
|
+
rubyforge_project: sassy-namespaces
|
84
|
+
rubygems_version: 2.2.2
|
85
|
+
signing_key:
|
86
|
+
specification_version: 4
|
87
|
+
summary: Syntactic sugar for using maps as namespaces.
|
88
|
+
test_files: []
|