archetype 0.0.1.pre.3.90263a7 → 0.0.1.pre.3.811928f
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG.md +1 -24
- data/LICENSE +1 -1
- data/README.md +1 -1
- data/VERSION.yml +1 -1
- data/lib/archetype.rb +0 -4
- data/lib/archetype/functions/hash.rb +12 -28
- data/lib/archetype/functions/helpers.rb +13 -56
- data/lib/archetype/functions/styleguide_memoizer.rb +1 -9
- data/lib/archetype/sass_extensions.rb +0 -1
- data/lib/archetype/sass_extensions/functions/lists.rb +40 -34
- data/lib/archetype/sass_extensions/functions/locale.rb +16 -32
- data/lib/archetype/sass_extensions/functions/styleguide.rb +37 -115
- data/lib/archetype/sass_extensions/functions/ui.rb +2 -3
- data/lib/archetype/sass_extensions/functions/version.rb +6 -11
- data/lib/archetype/version.rb +12 -19
- data/stylesheets/archetype/_base.scss +0 -3
- data/stylesheets/archetype/_config.scss +5 -22
- data/stylesheets/archetype/_hacks.scss +21 -62
- data/stylesheets/archetype/_ui.scss +11 -56
- data/stylesheets/archetype/base/_h5bp.scss +12 -12
- data/stylesheets/archetype/base/_normalize.scss +139 -178
- data/stylesheets/archetype/styleguide/_helpers.scss +4 -1
- data/stylesheets/archetype/styleguide/components/_alerts.scss +1 -1
- data/stylesheets/archetype/styleguide/components/_buttons.scss +6 -7
- data/stylesheets/archetype/styleguide/components/_closes.scss +2 -2
- data/stylesheets/archetype/util/_styles.scss +7 -45
- data/stylesheets/archetype/util/_targeting.scss +0 -2
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders-s7889ccc8c1.png +0 -0
- data/test/fixtures/stylesheets/archetype/config.rb +0 -2
- data/test/fixtures/stylesheets/archetype/expected/hacks/ie_pseudo.css +3 -3
- data/test/fixtures/stylesheets/archetype/expected/styleguide/buttons.css +18 -110
- data/test/fixtures/stylesheets/archetype/expected/styleguide/selective_state.css +0 -3
- data/test/fixtures/stylesheets/archetype/expected/ui/glyph_icon.css +2 -116
- data/test/fixtures/stylesheets/archetype/expected/utilities/targeting/target-browser.css +0 -5
- data/test/fixtures/stylesheets/archetype/source/styleguide/buttons.scss +1 -5
- data/test/fixtures/stylesheets/archetype/source/styleguide/fallback_styles.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/styleguide/nested_styleguides.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/styleguide/selective_state.scss +1 -1
- data/test/fixtures/stylesheets/archetype/source/ui/glyph_icon.scss +0 -30
- data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-browser.scss +1 -8
- data/test/helpers/test_case.rb +2 -2
- data/test/integrations/archetype_test.rb +1 -3
- data/test/units/sass_extensions_test.rb +25 -18
- metadata +23 -80
- checksums.yaml +0 -7
- data/bin/archetype +0 -3
- data/lib/archetype/actions/help.rb +0 -16
- data/lib/archetype/actions/theme.rb +0 -73
- data/lib/archetype/executor.rb +0 -27
- data/lib/archetype/sass_extensions/monkey_patches.rb +0 -3
- data/lib/archetype/sass_extensions/monkey_patches/handle_include_loop.rb +0 -41
- data/templates/_theme/_components.scss +0 -3
- data/templates/_theme/_config.scss +0 -1
- data/templates/_theme/_core.scss +0 -13
- data/templates/_theme/_helpers.scss +0 -1
- data/templates/_theme/_primitives.scss +0 -3
- data/templates/_theme/components/README +0 -1
- data/templates/_theme/primitives/README +0 -1
- data/test/fixtures/stylesheets/archetype/expected/base.css +0 -349
- data/test/fixtures/stylesheets/archetype/expected/hacks/transparent_focusable.css +0 -4
- data/test/fixtures/stylesheets/archetype/expected/locale.css +0 -23
- data/test/fixtures/stylesheets/archetype/expected/styleguide/alerts.css +0 -675
- data/test/fixtures/stylesheets/archetype/expected/styleguide/drop.css +0 -63
- data/test/fixtures/stylesheets/archetype/expected/styleguide/extend.css +0 -7
- data/test/fixtures/stylesheets/archetype/expected/styleguide/invalid_structures.css +0 -21
- data/test/fixtures/stylesheets/archetype/expected/styleguide/multi_value.css +0 -13
- data/test/fixtures/stylesheets/archetype/expected/utilities/associative.css +0 -9
- data/test/fixtures/stylesheets/archetype/expected/utilities/custom_output_styler.css +0 -8
- data/test/fixtures/stylesheets/archetype/source/base.scss +0 -3
- data/test/fixtures/stylesheets/archetype/source/hacks/transparent_focusable.scss +0 -5
- data/test/fixtures/stylesheets/archetype/source/locale.scss +0 -43
- data/test/fixtures/stylesheets/archetype/source/styleguide/alerts.scss +0 -21
- data/test/fixtures/stylesheets/archetype/source/styleguide/drop.scss +0 -101
- data/test/fixtures/stylesheets/archetype/source/styleguide/extend.scss +0 -23
- data/test/fixtures/stylesheets/archetype/source/styleguide/invalid_structures.scss +0 -85
- data/test/fixtures/stylesheets/archetype/source/styleguide/multi_value.scss +0 -18
- data/test/fixtures/stylesheets/archetype/source/utilities/associative.scss +0 -24
- data/test/fixtures/stylesheets/archetype/source/utilities/custom_output_styler.scss +0 -21
data/CHANGELOG.md
CHANGED
@@ -4,36 +4,13 @@
|
|
4
4
|
|
5
5
|
- initial public release
|
6
6
|
|
7
|
-
## 0.0.1.pre.3 (
|
7
|
+
## 0.0.1.pre.3 (unreleased)
|
8
8
|
|
9
9
|
### New Features:
|
10
10
|
|
11
11
|
- added `styleguide-component-exists()` method to check if a component/extension has already been registered in the theme
|
12
12
|
- added `memoize` compiler configuration to allow enabling/disabling the internal styleguide memoizer
|
13
|
-
- `glyph-icon()` can now take `false` as an icon name and not output anything
|
14
|
-
- added `unstyled-button()` method to remove default styling from a `<button>` element
|
15
|
-
- added `prefixed-tag()` method for consistency when generating tag names
|
16
|
-
- added Chinese font stacks
|
17
|
-
- added wildcard support to `locale()` function (e.g. `locale(en_ ja_JP _DE)`)
|
18
|
-
- added `transparent-focusable()` mixin for transparent background support in older IE
|
19
|
-
- added ability to customize `output-style()` with `custom-output-styler()` mixin and `has-custom-output-styler()` function (NEEDS DOCUMENTATION)
|
20
|
-
- added better support for targeting IE6/7 glyphs and `ie-pseudo()` generated elements (NEEDS DOCUMENTATION)
|
21
|
-
- making `unique()` generated IDs genuinely unique
|
22
|
-
- adding support for a `testing` config flag
|
23
|
-
- adding support for `@extend` from a styleguide component
|
24
|
-
|
25
|
-
### Resolved Issues:
|
26
|
-
|
27
|
-
- quotes on strings passed to `associative()` weren't being stripped correctly
|
28
|
-
- fixed some minor glyph issues
|
29
|
-
- out-of-order CSS issues in Ruby 1.8.7 are fixed using `Hashery::OrderedHash`
|
30
|
-
- fixed issue with `archetype-version()` incorrectly matching comparators
|
31
|
-
|
32
|
-
### Tests:
|
33
|
-
|
34
13
|
- added test case for fallback CSS properties
|
35
|
-
- added test case for generating loading spinner keyframe animations
|
36
|
-
- updated test cases for minor changes
|
37
14
|
|
38
15
|
## 0.0.1.pre.2 (unreleased)
|
39
16
|
|
data/LICENSE
CHANGED
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Archetype
|
2
2
|
|
3
|
-
[![Build Status](https://travis-ci.org/
|
3
|
+
[![Build Status](https://travis-ci.org/eoneill/archetype.png)](https://travis-ci.org/eoneill/archetype)
|
4
4
|
|
5
5
|
Archetype is a UI pattern and component library for quickly iterating on and maintaining scalable web interfaces.
|
6
6
|
|
data/VERSION.yml
CHANGED
data/lib/archetype.rb
CHANGED
@@ -33,10 +33,6 @@ module Archetype
|
|
33
33
|
Compass::Configuration.add_configuration_property(:memoize, "should the memoizer be used to improve compilation speed") do
|
34
34
|
not (Compass.configuration.environment || :development).to_s.include?('dev')
|
35
35
|
end
|
36
|
-
# testing (for running unit tests)
|
37
|
-
Compass::Configuration.add_configuration_property(:testing, "is this a testing environment") do
|
38
|
-
ENV['CI']
|
39
|
-
end
|
40
36
|
end
|
41
37
|
end
|
42
38
|
|
@@ -1,8 +1,6 @@
|
|
1
1
|
# :stopdoc:
|
2
2
|
# This module extends the native Ruby Hash class to support deep merging
|
3
3
|
# and comparing the difference between hashes.
|
4
|
-
# This functionality mimics that found in ActiveSupport
|
5
|
-
# @see https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/deep_merge.rb
|
6
4
|
#
|
7
5
|
module Archetype::Functions::Hash
|
8
6
|
#
|
@@ -13,10 +11,13 @@ module Archetype::Functions::Hash
|
|
13
11
|
# *Returns*:
|
14
12
|
# - {Hash} a new hash containing the contents of other_hash and the contents of hsh, deep merged
|
15
13
|
#
|
16
|
-
def rmerge(other_hash
|
17
|
-
|
14
|
+
def rmerge(other_hash)
|
15
|
+
new_hash = {}
|
16
|
+
merge(other_hash) do |key, oldval, newval|
|
17
|
+
new_hash[key] = oldval.class == self.class ? oldval.rmerge(newval) : newval
|
18
|
+
end
|
18
19
|
end
|
19
|
-
|
20
|
+
|
20
21
|
#
|
21
22
|
# adds the contents of other_hash to hsh, deep merged
|
22
23
|
#
|
@@ -25,16 +26,10 @@ module Archetype::Functions::Hash
|
|
25
26
|
# *Returns*:
|
26
27
|
# - {Hash} the original hash with the addition of the contents of other_hash
|
27
28
|
#
|
28
|
-
def rmerge!(other_hash
|
29
|
-
other_hash
|
30
|
-
|
31
|
-
if tv.is_a?(Hash) && v.is_a?(Hash)
|
32
|
-
self[k] = tv.rmerge(v, &block)
|
33
|
-
else
|
34
|
-
self[k] = block && tv ? block.call(k, tv, v) : v
|
35
|
-
end
|
29
|
+
def rmerge!(other_hash)
|
30
|
+
merge!(other_hash) do |key, oldval, newval|
|
31
|
+
oldval.class == self.class ? oldval.rmerge!(newval) : newval
|
36
32
|
end
|
37
|
-
return self
|
38
33
|
end
|
39
34
|
|
40
35
|
#
|
@@ -46,7 +41,7 @@ module Archetype::Functions::Hash
|
|
46
41
|
# - {Hash} a representation of the difference between the two hashes
|
47
42
|
#
|
48
43
|
def diff(other_hash)
|
49
|
-
(self.keys + other_hash.keys).uniq.inject(
|
44
|
+
(self.keys + other_hash.keys).uniq.inject({}) do |tmp, key|
|
50
45
|
# special comparison for gradients
|
51
46
|
are_gradients = self[key].is_a?(Compass::SassExtensions::Functions::GradientSupport::LinearGradient) and other_hash[key].is_a?(Compass::SassExtensions::Functions::GradientSupport::LinearGradient)
|
52
47
|
eq_gradients = are_gradients ? (self[key].to_s == other_hash[key].to_s) : true
|
@@ -133,17 +128,6 @@ private
|
|
133
128
|
end
|
134
129
|
end
|
135
130
|
|
136
|
-
|
137
|
-
|
138
|
-
if RUBY_VERSION < '1.9'
|
139
|
-
require 'hashery/ordered_hash'
|
140
|
-
class Hash < Hashery::OrderedHash
|
141
|
-
include Archetype::Functions::Hash
|
142
|
-
end
|
143
|
-
else
|
144
|
-
class Hash < ::Hash
|
145
|
-
include Archetype::Functions::Hash
|
146
|
-
end
|
147
|
-
end
|
131
|
+
class Hash
|
132
|
+
include Archetype::Functions::Hash
|
148
133
|
end
|
149
|
-
|
@@ -24,8 +24,7 @@ private
|
|
24
24
|
def self.hash_to_list(hsh, depth = 0, separator = :comma)
|
25
25
|
if hsh.is_a? Hash
|
26
26
|
list = []
|
27
|
-
hsh.each do |
|
28
|
-
item = [key, item]
|
27
|
+
hsh.each do |item|
|
29
28
|
# if its a hash, convert it to a List
|
30
29
|
if item.is_a? Hash or item.is_a? Array
|
31
30
|
tmp = []
|
@@ -55,66 +54,30 @@ private
|
|
55
54
|
#
|
56
55
|
def self.list_to_hash(list, depth = 0, nest = [], additives = [])
|
57
56
|
list = list.to_a
|
58
|
-
|
59
|
-
hsh = Archetype::Hash.new
|
57
|
+
hsh = {}
|
60
58
|
list.each do |item|
|
61
59
|
item = item.to_a
|
62
|
-
|
63
|
-
# if a 3rd item exists, we probably forgot a comma or parens somewhere
|
64
|
-
if previous.nil? and not item[2].nil?
|
65
|
-
msg = "you're likely missing a comma or parens in your data structure"
|
66
|
-
begin
|
67
|
-
logger.record(:warning, "#{msg}: #{item}")
|
68
|
-
rescue
|
69
|
-
logger.record(:warning, msg)
|
70
|
-
end
|
71
|
-
end
|
72
|
-
|
73
60
|
# convert the key to a string and strip off quotes
|
74
|
-
key = to_str(item[0]
|
75
|
-
# capture the value
|
61
|
+
key = to_str(item[0]).gsub(/\A"|"\Z/, '')
|
76
62
|
value = item[1]
|
77
|
-
|
78
63
|
if key != 'nil'
|
79
|
-
if is_value(value, :blank)
|
80
|
-
if previous.nil?
|
81
|
-
previous = key
|
82
|
-
next
|
83
|
-
else
|
84
|
-
value = item[0]
|
85
|
-
key = previous
|
86
|
-
previous = nil
|
87
|
-
end
|
88
|
-
elsif not previous.nil?
|
89
|
-
# if we got here, something is wrong with the structure
|
90
|
-
list.shift if to_str(list[0]) == previous # remove the first item if it's the previous key, which is now the parent key
|
91
|
-
list = list[0].to_a # now the remaining items were munged, so split them out
|
92
|
-
hsh = Archetype::Hash.new
|
93
|
-
hsh[previous] = list_to_hash(list, depth - 1, nest, additives)
|
94
|
-
return hsh
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
|
-
# update the hash if we have a valid key and hash
|
99
|
-
if key != 'nil' and not is_value(value, :blank)
|
100
64
|
# check if if it's a nesting hash
|
101
65
|
nested = nest.include?(key)
|
102
66
|
# if it's nested or we haven't reached out depth, recurse
|
103
67
|
if nested or depth > 0
|
104
68
|
value = list_to_hash(value, nested ? depth + 1 : depth - 1, nest, additives)
|
105
69
|
end
|
106
|
-
|
107
|
-
if
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
70
|
+
# update the hash key
|
71
|
+
if not is_value(value, :blank)
|
72
|
+
if additives.include?(key)
|
73
|
+
hsh[key] ||= []
|
74
|
+
hsh[key].push(value)
|
75
|
+
else
|
76
|
+
hsh[key] = value
|
77
|
+
end
|
112
78
|
end
|
113
79
|
end
|
114
80
|
end
|
115
|
-
|
116
|
-
logger.record(:warning, "one of your data structures is ambiguous, please double check near `#{previous}`") if not previous.nil?
|
117
|
-
|
118
81
|
return hsh
|
119
82
|
end
|
120
83
|
|
@@ -127,12 +90,8 @@ private
|
|
127
90
|
# *Returns*:
|
128
91
|
# - {String} the converted String
|
129
92
|
#
|
130
|
-
def self.to_str(value, separator = ' '
|
131
|
-
|
132
|
-
value = ((value.to_a).each{ |i| i.nil? ? 'nil' : (i.is_a?(String) ? i : i.value) }).join(separator || '')
|
133
|
-
end
|
134
|
-
strip = /\A"|"\Z/ if strip == :quotes
|
135
|
-
return strip.nil? ? value : value.gsub(strip, '')
|
93
|
+
def self.to_str(value, separator = ' ')
|
94
|
+
return value.is_a?(String) ? value : ((value.to_a).each{ |i| i.is_a?(String) ? i : i.value }).join(separator || '')
|
136
95
|
end
|
137
96
|
|
138
97
|
#
|
@@ -150,13 +109,11 @@ private
|
|
150
109
|
when :blank
|
151
110
|
is_it = false
|
152
111
|
value = value.value if value.is_a?(Sass::Script::String)
|
153
|
-
is_it = value.nil?
|
154
112
|
is_it = value.empty? if value.is_a?(String)
|
155
113
|
is_it = value.to_a.empty? if value.is_a?(Sass::Script::List) or value.is_a?(Array)
|
156
114
|
when :nil
|
157
115
|
is_it = false
|
158
116
|
value = value.value if value.is_a?(Sass::Script::String)
|
159
|
-
is_it = value.nil?
|
160
117
|
is_it = value == 'nil' if value.is_a?(String)
|
161
118
|
is_it = to_str(value) == 'nil' if value.is_a?(Sass::Script::List) or value.is_a?(Array)
|
162
119
|
end
|
@@ -50,7 +50,7 @@ private
|
|
50
50
|
end
|
51
51
|
|
52
52
|
#
|
53
|
-
# invalidate the memoizer for the theme
|
53
|
+
# invalidate the entire memoizer for the theme
|
54
54
|
#
|
55
55
|
# *Parameters*:
|
56
56
|
# - <tt>theme</tt> {String} the theme name
|
@@ -58,12 +58,4 @@ private
|
|
58
58
|
def self.clear(theme)
|
59
59
|
@components[theme] = {}
|
60
60
|
end
|
61
|
-
|
62
|
-
|
63
|
-
#
|
64
|
-
# resets the entire memoizer
|
65
|
-
#
|
66
|
-
def self.reset!
|
67
|
-
@components = {}
|
68
|
-
end
|
69
61
|
end
|
@@ -6,7 +6,7 @@ require 'archetype/functions/helpers'
|
|
6
6
|
module Archetype::SassExtensions::Lists
|
7
7
|
#
|
8
8
|
# replace an index in a list
|
9
|
-
#
|
9
|
+
#
|
10
10
|
# *Parameters*:
|
11
11
|
# - <tt>$list</tt> {List} the list to replace from
|
12
12
|
# - <tt>$value</tt> {\*} the value to replace (if nil, it's a removal)
|
@@ -47,8 +47,8 @@ module Archetype::SassExtensions::Lists
|
|
47
47
|
def list_remove(list, idx = false, separator = nil)
|
48
48
|
return list_replace(list, idx, nil, separator)
|
49
49
|
end
|
50
|
-
Sass::Script::Functions.declare :
|
51
|
-
Sass::Script::Functions.declare :
|
50
|
+
Sass::Script::Functions.declare :list_replace, [:list, :idx]
|
51
|
+
Sass::Script::Functions.declare :list_replace, [:list, :idx, :separator]
|
52
52
|
|
53
53
|
#
|
54
54
|
# insert an item into a list
|
@@ -67,9 +67,41 @@ module Archetype::SassExtensions::Lists
|
|
67
67
|
return list if (not idx or idx == Sass::Script::Bool.new(false)) or value.nil?
|
68
68
|
return list_replace(list, idx, value, separator, -1)
|
69
69
|
end
|
70
|
-
Sass::Script::Functions.declare :
|
71
|
-
Sass::Script::Functions.declare :
|
72
|
-
Sass::Script::Functions.declare :
|
70
|
+
Sass::Script::Functions.declare :list_replace, [:list, :idx]
|
71
|
+
Sass::Script::Functions.declare :list_replace, [:list, :idx, :value]
|
72
|
+
Sass::Script::Functions.declare :list_replace, [:list, :idx, :value, :separator]
|
73
|
+
|
74
|
+
#
|
75
|
+
# sort a list
|
76
|
+
#
|
77
|
+
# *Parameters*:
|
78
|
+
# - <tt>$list</tt> {List} the list to sort
|
79
|
+
# - <tt>$reverse</tt> {Boolean} sort the list in reverse order
|
80
|
+
# *Returns*:
|
81
|
+
# - {List} the sorted list
|
82
|
+
#
|
83
|
+
# TODO - this is failing, fix this
|
84
|
+
#def list_sort(list, reverse = false)
|
85
|
+
# separator = list.separator if list.is_a?(Sass::Script::List)
|
86
|
+
# list = list.to_a.sort
|
87
|
+
# list = list.reverse if (reverse == Sass::Script::Bool.new(true))
|
88
|
+
# return Sass::Script::List.new(list, separator)
|
89
|
+
#end
|
90
|
+
|
91
|
+
#
|
92
|
+
# reverse order a list
|
93
|
+
#
|
94
|
+
# *Parameters*:
|
95
|
+
# - <tt>$list</tt> {List} the list to reverse
|
96
|
+
# *Returns*:
|
97
|
+
# - {List} the reversed list
|
98
|
+
#
|
99
|
+
# TODO - this is failing, fix this
|
100
|
+
#def list_reverse(list)
|
101
|
+
# separator = list.separator if list.is_a?(Sass::Script::List)
|
102
|
+
# list = list.to_a.reverse
|
103
|
+
# return Sass::Script::List.new(list, separator)
|
104
|
+
#end
|
73
105
|
|
74
106
|
#
|
75
107
|
# add values(s) to a list
|
@@ -185,7 +217,7 @@ module Archetype::SassExtensions::Lists
|
|
185
217
|
def associative(list, key, strict = false)
|
186
218
|
separator = list.separator if list.is_a?(Sass::Script::List)
|
187
219
|
list = helpers.list_to_hash(list)
|
188
|
-
item = list[helpers.to_str(key
|
220
|
+
item = list[helpers.to_str(key)]
|
189
221
|
item ||= list.first[1] if not strict
|
190
222
|
return Sass::Script::List.new([], separator) if item.nil?
|
191
223
|
return helpers.hash_to_list(item, 0, separator) if item.is_a?(Array) or item.is_a?(Hash)
|
@@ -211,33 +243,7 @@ module Archetype::SassExtensions::Lists
|
|
211
243
|
list = list.rmerge(extender)
|
212
244
|
return helpers.hash_to_list(list, 0, separator)
|
213
245
|
end
|
214
|
-
Sass::Script::Functions.declare :
|
215
|
-
|
216
|
-
#
|
217
|
-
# given a string of styles, convert it into a key-value pair list
|
218
|
-
#
|
219
|
-
# *Parameters*:
|
220
|
-
# - <tt>$string</tt> {String} the string to convert
|
221
|
-
# *Returns*:
|
222
|
-
# - <tt>$list</tt> {List} the converted list of styles
|
223
|
-
#
|
224
|
-
def _style_string_to_list(string = '')
|
225
|
-
# convert to string and strip all comments
|
226
|
-
string = helpers.to_str(string, ' ').gsub(/\/\*[^\*\/]*\*\//, '')
|
227
|
-
# then split it on each rule
|
228
|
-
tmp = string.split(';')
|
229
|
-
styles = []
|
230
|
-
# and for each rule break it into it's key-value pairs
|
231
|
-
tmp.each do |rule|
|
232
|
-
kvp = []
|
233
|
-
rule.split(':').each do |str|
|
234
|
-
kvp.push Sass::Script::String.new(str)
|
235
|
-
end
|
236
|
-
styles.push Sass::Script::List.new(kvp, :comma)
|
237
|
-
end
|
238
|
-
# the recompose the list
|
239
|
-
return Sass::Script::List.new(styles, :comma)
|
240
|
-
end
|
246
|
+
Sass::Script::Functions.declare :list_extend, [:list, :extender]
|
241
247
|
|
242
248
|
private
|
243
249
|
def helpers
|
@@ -3,36 +3,17 @@
|
|
3
3
|
#
|
4
4
|
module Archetype::SassExtensions::Locale
|
5
5
|
#
|
6
|
-
# get the current locale specified in config
|
6
|
+
# get the current locale specified in config
|
7
7
|
#
|
8
|
-
# *Parameters*:
|
9
|
-
# - <tt>$locales</tt> {List} the list of locales to test
|
10
8
|
# *Returns*:
|
11
|
-
# - {String
|
9
|
+
# - {String} the current locale
|
12
10
|
#
|
13
|
-
def locale
|
14
|
-
|
15
|
-
# if the locales are nil, just return the current locale
|
16
|
-
return Sass::Script::String.new(locale) if locales.nil?
|
17
|
-
locales = locales.to_a.collect{|i| i.to_s}
|
18
|
-
# add wild card support for language or territory
|
19
|
-
match = locale.match(LOCALE_PATTERN)
|
20
|
-
# language with wildcard territory
|
21
|
-
language = match[1] + '_'
|
22
|
-
# territory with wildcard language
|
23
|
-
territory = '_' + match[2]
|
24
|
-
# for each item, look it up in the alias list
|
25
|
-
locales.each do |key|
|
26
|
-
if a = locale_aliases[key]
|
27
|
-
locales.delete(key)
|
28
|
-
locales.concat(a)
|
29
|
-
end
|
30
|
-
end
|
31
|
-
return Sass::Script::Bool.new(locales.include?(locale) || locales.include?(language) || locales.include?(territory))
|
11
|
+
def locale
|
12
|
+
return Sass::Script::String.new(Compass.configuration.locale || 'en_US')
|
32
13
|
end
|
33
14
|
|
34
15
|
#
|
35
|
-
# test a list of locales against the current locale (
|
16
|
+
# test a list of locales against the current locale (supports an alias map)
|
36
17
|
#
|
37
18
|
# *Parameters*:
|
38
19
|
# - <tt>$locales</tt> {List} the list of locales to test
|
@@ -40,9 +21,16 @@ module Archetype::SassExtensions::Locale
|
|
40
21
|
# - {Boolean} is the current locale in the list or not
|
41
22
|
#
|
42
23
|
def lang(locales)
|
43
|
-
|
24
|
+
locales = locales.to_a.collect{|i| i.to_s}
|
25
|
+
locales.each do |key|
|
26
|
+
if a = locale_aliases[key]
|
27
|
+
locales.delete(key)
|
28
|
+
locales.concat(a)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
return Sass::Script::Bool.new(locales.include?(locale.to_s))
|
44
32
|
end
|
45
|
-
|
33
|
+
|
46
34
|
#
|
47
35
|
# get the current reading direction
|
48
36
|
#
|
@@ -55,9 +43,6 @@ module Archetype::SassExtensions::Locale
|
|
55
43
|
end
|
56
44
|
|
57
45
|
private
|
58
|
-
|
59
|
-
LOCALE_PATTERN = /([a-z]{2})[-_]?([a-z]{2}?)/i
|
60
|
-
|
61
46
|
#
|
62
47
|
# provides an alias mapping for locale names
|
63
48
|
#
|
@@ -67,9 +52,8 @@ private
|
|
67
52
|
# TODO - make this easily extensible
|
68
53
|
def locale_aliases
|
69
54
|
if @locale_aliases.nil?
|
70
|
-
a = {
|
71
|
-
|
72
|
-
}
|
55
|
+
a = {}
|
56
|
+
a['CJK'] = ['ja_JP', 'ko_KR', 'zh_TW', 'zh_CN']
|
73
57
|
@locale_aliases = a
|
74
58
|
end
|
75
59
|
return @locale_aliases
|