archetype 0.0.1.pre.13 → 1.0.0.alpha.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +97 -24
- data/README.md +11 -5
- data/VERSION +1 -0
- data/lib/archetype.rb +30 -18
- data/lib/archetype/actions/migrate.rb +152 -0
- data/lib/archetype/actions/theme.rb +6 -7
- data/lib/archetype/executor.rb +21 -7
- data/lib/archetype/extensions.rb +57 -0
- data/lib/archetype/functions.rb +2 -3
- data/lib/archetype/functions/css.rb +70 -0
- data/lib/archetype/functions/css/constants.rb +247 -0
- data/lib/archetype/functions/css/helpers.rb +265 -0
- data/lib/archetype/functions/css/routers.rb +28 -0
- data/lib/archetype/functions/css/routers/animation.rb +55 -0
- data/lib/archetype/functions/css/routers/background.rb +38 -0
- data/lib/archetype/functions/css/routers/border.rb +151 -0
- data/lib/archetype/functions/css/routers/list.rb +63 -0
- data/lib/archetype/functions/css/routers/margin_padding.rb +40 -0
- data/lib/archetype/functions/css/routers/outline.rb +56 -0
- data/lib/archetype/functions/css/routers/overflow.rb +11 -0
- data/lib/archetype/functions/css/routers/target.rb +38 -0
- data/lib/archetype/functions/css/routers/transition.rb +48 -0
- data/lib/archetype/functions/css/shorthands.rb +43 -0
- data/lib/archetype/functions/css/shorthands/animation.rb +18 -0
- data/lib/archetype/functions/css/shorthands/background.rb +68 -0
- data/lib/archetype/functions/css/shorthands/border.rb +102 -0
- data/lib/archetype/functions/hash.rb +3 -149
- data/lib/archetype/functions/hash/extend.rb +74 -0
- data/lib/archetype/functions/hash/shim.rb +48 -0
- data/lib/archetype/functions/helpers.rb +231 -22
- data/lib/archetype/functions/styleguide_memoizer.rb +18 -1
- data/lib/archetype/sass_extensions.rb +1 -3
- data/lib/archetype/sass_extensions/functions.rb +15 -1
- data/lib/archetype/sass_extensions/functions/environment.rb +152 -1
- data/lib/archetype/sass_extensions/functions/lists.rb +95 -45
- data/lib/archetype/sass_extensions/functions/locale.rb +107 -28
- data/lib/archetype/sass_extensions/functions/numbers.rb +118 -4
- data/lib/archetype/sass_extensions/functions/strings.rb +53 -0
- data/lib/archetype/sass_extensions/functions/styleguide.rb +43 -375
- data/lib/archetype/sass_extensions/functions/styleguide/components.rb +25 -0
- data/lib/archetype/sass_extensions/functions/styleguide/constants.rb +27 -0
- data/lib/archetype/sass_extensions/functions/styleguide/grammar.rb +80 -0
- data/lib/archetype/sass_extensions/functions/styleguide/helpers.rb +36 -0
- data/lib/archetype/sass_extensions/functions/styleguide/resolve.rb +159 -0
- data/lib/archetype/sass_extensions/functions/styleguide/styles.rb +146 -0
- data/lib/archetype/sass_extensions/functions/styleguide/themes.rb +40 -0
- data/lib/archetype/sass_extensions/functions/ui.rb +7 -57
- data/lib/archetype/sass_extensions/functions/ui/glyphs.rb +118 -0
- data/lib/archetype/sass_extensions/functions/ui/scopes.rb +96 -0
- data/lib/archetype/sass_extensions/functions/util.rb +14 -0
- data/lib/archetype/sass_extensions/functions/util/debug.rb +22 -0
- data/lib/archetype/sass_extensions/functions/util/hacks.rb +44 -0
- data/lib/archetype/sass_extensions/functions/util/images.rb +132 -0
- data/lib/archetype/sass_extensions/functions/util/misc.rb +220 -0
- data/lib/archetype/sass_extensions/functions/util/spacing.rb +83 -0
- data/lib/archetype/sass_extensions/functions/version.rb +12 -17
- data/lib/archetype/version.rb +1 -1
- data/stylesheets/archetype/_config.scss +1 -389
- data/stylesheets/archetype/_core.scss +15 -0
- data/stylesheets/archetype/_hacks.scss +4 -120
- data/stylesheets/archetype/_init.scss +4 -22
- data/stylesheets/archetype/_required.scss +3 -0
- data/stylesheets/archetype/_reset.scss +3 -0
- data/stylesheets/archetype/_styleguide.scss +2 -6
- data/stylesheets/archetype/_ui.scss +2 -358
- data/stylesheets/archetype/_util.scss +3 -10
- data/stylesheets/archetype/config/_core.scss +14 -0
- data/stylesheets/archetype/config/_environment.scss +19 -0
- data/stylesheets/archetype/config/_formatting.scss +63 -0
- data/stylesheets/archetype/config/_glyphs.scss +252 -0
- data/stylesheets/archetype/config/_resets.scss +7 -0
- data/stylesheets/archetype/config/_resolution.scss +3 -0
- data/stylesheets/archetype/config/_spacing.scss +5 -0
- data/stylesheets/archetype/config/_targeting.scss +18 -0
- data/stylesheets/archetype/config/_theme.scss +3 -0
- data/stylesheets/archetype/config/_typography.scss +56 -0
- data/stylesheets/archetype/config/_units.scss +2 -0
- data/stylesheets/archetype/config/_vars.scss +10 -0
- data/stylesheets/archetype/hacks/_core.scss +4 -0
- data/stylesheets/archetype/hacks/_hacks.scss +160 -0
- data/stylesheets/archetype/hacks/_init.scss +2 -0
- data/stylesheets/archetype/styleguide/_core.scss +4 -0
- data/stylesheets/archetype/styleguide/_init.scss +1 -0
- data/stylesheets/archetype/styleguide/_styleguide.scss +41 -18
- data/stylesheets/archetype/ui/_accessibility.scss +41 -0
- data/stylesheets/archetype/ui/_breakpoints.scss +19 -0
- data/stylesheets/archetype/ui/_core.scss +10 -0
- data/stylesheets/archetype/ui/_elements.scss +98 -0
- data/stylesheets/archetype/ui/_glyphs.scss +244 -0
- data/stylesheets/archetype/ui/_init.scss +5 -0
- data/stylesheets/archetype/ui/_layout.scss +37 -0
- data/stylesheets/archetype/ui/_locale.scss +12 -0
- data/stylesheets/archetype/ui/_scopes.scss +42 -0
- data/stylesheets/archetype/util/_core.scss +8 -0
- data/stylesheets/archetype/util/_debug.scss +9 -21
- data/stylesheets/archetype/util/_init.scss +1 -0
- data/stylesheets/archetype/util/_misc.scss +21 -86
- data/stylesheets/archetype/util/_spacing.scss +9 -40
- data/stylesheets/archetype/util/_styles.scss +189 -178
- data/stylesheets/archetype/util/_targeting.scss +51 -68
- data/templates/example/manifest.rb +2 -2
- data/templates/example/screen.scss +0 -1
- data/templates/project/manifest.rb +3 -8
- metadata +93 -263
- data/bin/archetype +0 -3
- data/lib/archetype/sass_extensions/monkey_patches.rb +0 -3
- data/lib/archetype/sass_extensions/monkey_patches/handle_include_loop.rb +0 -13
- data/stylesheets/archetype/_base.scss +0 -54
- data/stylesheets/archetype/_grid.scss +0 -3
- data/stylesheets/archetype/base/_h5bp.scss +0 -307
- data/stylesheets/archetype/base/_hybrid.scss +0 -25
- data/stylesheets/archetype/base/_normalize.scss +0 -634
- data/stylesheets/archetype/base/_reset.scss +0 -72
- data/stylesheets/archetype/grid/_config.scss +0 -14
- data/stylesheets/archetype/grid/_grid.scss +0 -391
- data/stylesheets/archetype/styleguide/_components.scss +0 -25
- data/stylesheets/archetype/styleguide/_helpers.scss +0 -215
- data/stylesheets/archetype/styleguide/_primitives.scss +0 -10
- data/stylesheets/archetype/styleguide/components/_alerts.scss +0 -59
- data/stylesheets/archetype/styleguide/components/_annotations.scss +0 -27
- data/stylesheets/archetype/styleguide/components/_bristol.scss +0 -15
- data/stylesheets/archetype/styleguide/components/_button_groups.scss +0 -47
- data/stylesheets/archetype/styleguide/components/_button_toolbars.scss +0 -17
- data/stylesheets/archetype/styleguide/components/_buttons.scss +0 -339
- data/stylesheets/archetype/styleguide/components/_canvas.scss +0 -15
- data/stylesheets/archetype/styleguide/components/_carets.scss +0 -336
- data/stylesheets/archetype/styleguide/components/_closes.scss +0 -63
- data/stylesheets/archetype/styleguide/components/_container.scss +0 -27
- data/stylesheets/archetype/styleguide/components/_copy.scss +0 -85
- data/stylesheets/archetype/styleguide/components/_flyouts.scss +0 -52
- data/stylesheets/archetype/styleguide/components/_headings.scss +0 -33
- data/stylesheets/archetype/styleguide/components/_headlines.scss +0 -64
- data/stylesheets/archetype/styleguide/components/_hovercards.scss +0 -27
- data/stylesheets/archetype/styleguide/components/_icons.scss +0 -17
- data/stylesheets/archetype/styleguide/components/_identities.scss +0 -34
- data/stylesheets/archetype/styleguide/components/_links.scss +0 -68
- data/stylesheets/archetype/styleguide/components/_loaders.scss +0 -154
- data/stylesheets/archetype/styleguide/components/_menu_items.scss +0 -31
- data/stylesheets/archetype/styleguide/components/_module.scss +0 -15
- data/stylesheets/archetype/styleguide/components/_pullquotes.scss +0 -29
- data/stylesheets/archetype/styleguide/components/_punchcut.scss +0 -18
- data/stylesheets/archetype/styleguide/components/_tooltips.scss +0 -28
- data/stylesheets/archetype/styleguide/primitives/_animations.scss +0 -17
- data/stylesheets/archetype/styleguide/primitives/_dimensions.scss +0 -50
- data/stylesheets/archetype/styleguide/primitives/_glyphs.scss +0 -11
- data/stylesheets/archetype/styleguide/primitives/_misc.scss +0 -8
- data/stylesheets/archetype/styleguide/primitives/_palettes.scss +0 -94
- data/stylesheets/archetype/styleguide/primitives/_shadows.scss +0 -23
- data/stylesheets/archetype/styleguide/primitives/_sprites.scss +0 -46
- data/stylesheets/archetype/styleguide/primitives/_textures.scss +0 -10
- data/stylesheets/archetype/styleguide/primitives/_typography.scss +0 -56
- data/stylesheets/archetype/util/_lists.scss +0 -57
- data/stylesheets/archetype/util/_rtl.scss +0 -279
- data/stylesheets/archetype/util/_units.scss +0 -18
- data/templates/project/screen.scss +0 -1
- data/templates/project/vendor/archetype/animations/loaders/large/large.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/large/large_static.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/medium/medium.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/small/small.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
- data/templates/project/vendor/archetype/animations/loaders/small/small_static.png +0 -0
- data/templates/project/vendor/archetype/fontawesome-webfont.eot +0 -0
- data/templates/project/vendor/archetype/fontawesome-webfont.svg +0 -255
- data/templates/project/vendor/archetype/fontawesome-webfont.ttf +0 -0
- data/templates/project/vendor/archetype/fontawesome-webfont.woff +0 -0
- data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.eot +0 -0
- data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.svg +0 -255
- data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.ttf +0 -0
- data/test/fixtures/stylesheets/archetype/assets/fonts/fontawesome-webfont.woff +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders-s7889ccc8c1.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_dark.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_dark_static.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/large/large_static.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_dark.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_dark_static.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/medium/medium_static.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_dark.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_dark_static.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/animations/loaders/small/small_static.png +0 -0
- data/test/fixtures/stylesheets/archetype/assets/images/vendor/archetype/sprites/hovercard_tip.png +0 -0
- data/test/fixtures/stylesheets/archetype/config.rb +0 -21
- data/test/fixtures/stylesheets/archetype/source/b.scss +0 -9
- data/test/fixtures/stylesheets/archetype/source/base.scss +0 -3
- data/test/fixtures/stylesheets/archetype/source/hacks/ie_pseudo.scss +0 -13
- 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/buttons.scss +0 -18
- data/test/fixtures/stylesheets/archetype/source/styleguide/drop.scss +0 -101
- data/test/fixtures/stylesheets/archetype/source/styleguide/extend.scss +0 -24
- data/test/fixtures/stylesheets/archetype/source/styleguide/fallback_styles.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/styleguide/nested_styleguides.scss +0 -40
- data/test/fixtures/stylesheets/archetype/source/styleguide/selective_state.scss +0 -22
- data/test/fixtures/stylesheets/archetype/source/ui/glyph_icon.scss +0 -35
- data/test/fixtures/stylesheets/archetype/source/ui/hide_element.scss +0 -5
- data/test/fixtures/stylesheets/archetype/source/ui/stroke.scss +0 -13
- data/test/fixtures/stylesheets/archetype/source/ui/triangle.scss +0 -13
- data/test/fixtures/stylesheets/archetype/source/utilities/associative.scss +0 -24
- data/test/fixtures/stylesheets/archetype/source/utilities/custom_output_styler.scss +0 -22
- data/test/fixtures/stylesheets/archetype/source/utilities/if-set.scss +0 -16
- data/test/fixtures/stylesheets/archetype/source/utilities/spacing/horizontal-spacing.scss +0 -27
- data/test/fixtures/stylesheets/archetype/source/utilities/spacing/vertical-spacing.scss +0 -27
- data/test/fixtures/stylesheets/archetype/source/utilities/styles/filter.scss +0 -9
- data/test/fixtures/stylesheets/archetype/source/utilities/styles/font-family.scss +0 -9
- data/test/fixtures/stylesheets/archetype/source/utilities/styles/z-index.scss +0 -18
- data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-browser.scss +0 -77
- data/test/fixtures/stylesheets/archetype/source/utilities/targeting/target-os.scss +0 -42
- data/test/fixtures/stylesheets/archetype/tmp/b.css +0 -14
- data/test/fixtures/stylesheets/archetype/tmp/base.css +0 -349
- data/test/fixtures/stylesheets/archetype/tmp/hacks/ie_pseudo.css +0 -11
- data/test/fixtures/stylesheets/archetype/tmp/hacks/transparent_focusable.css +0 -4
- data/test/fixtures/stylesheets/archetype/tmp/locale.css +0 -23
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/alerts.css +0 -711
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/buttons.css +0 -2119
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/drop.css +0 -63
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/extend.css +0 -11
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/fallback_styles.css +0 -10
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/invalid_structures.css +0 -21
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/multi_value.css +0 -13
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/nested_styleguides.css +0 -28
- data/test/fixtures/stylesheets/archetype/tmp/styleguide/selective_state.css +0 -177
- data/test/fixtures/stylesheets/archetype/tmp/ui/glyph_icon.css +0 -127
- data/test/fixtures/stylesheets/archetype/tmp/ui/hide_element.css +0 -8
- data/test/fixtures/stylesheets/archetype/tmp/ui/stroke.css +0 -17
- data/test/fixtures/stylesheets/archetype/tmp/ui/triangle.css +0 -35
- data/test/fixtures/stylesheets/archetype/tmp/utilities/associative.css +0 -9
- data/test/fixtures/stylesheets/archetype/tmp/utilities/custom_output_styler.css +0 -8
- data/test/fixtures/stylesheets/archetype/tmp/utilities/if-set.css +0 -9
- data/test/fixtures/stylesheets/archetype/tmp/utilities/spacing/horizontal-spacing.css +0 -29
- data/test/fixtures/stylesheets/archetype/tmp/utilities/spacing/vertical-spacing.css +0 -29
- data/test/fixtures/stylesheets/archetype/tmp/utilities/styles/filter.css +0 -11
- data/test/fixtures/stylesheets/archetype/tmp/utilities/styles/font-family.css +0 -16
- data/test/fixtures/stylesheets/archetype/tmp/utilities/styles/z-index.css +0 -15
- data/test/fixtures/stylesheets/archetype/tmp/utilities/targeting/target-browser.css +0 -105
- data/test/fixtures/stylesheets/archetype/tmp/utilities/targeting/target-os.css +0 -55
- data/test/helpers/diff.rb +0 -49
- data/test/helpers/io.rb +0 -36
- data/test/helpers/test_case.rb +0 -62
- data/test/integrations/archetype_test.rb +0 -126
- data/test/test_helper.rb +0 -26
- data/test/units/sass_extensions_test.rb +0 -200
@@ -1,149 +1,3 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
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
|
-
#
|
7
|
-
module Archetype::Functions::Hash
|
8
|
-
#
|
9
|
-
# recursively merge two hashes with deep merging
|
10
|
-
#
|
11
|
-
# *Parameters*:
|
12
|
-
# - +other_hash+ {Hash} the other hash to merge with
|
13
|
-
# *Returns*:
|
14
|
-
# - {Hash} a new hash containing the contents of other_hash and the contents of hsh, deep merged
|
15
|
-
#
|
16
|
-
def rmerge(other_hash, &block)
|
17
|
-
dup.rmerge!(other_hash, &block)
|
18
|
-
end
|
19
|
-
|
20
|
-
#
|
21
|
-
# adds the contents of other_hash to hsh, deep merged
|
22
|
-
#
|
23
|
-
# *Parameters*:
|
24
|
-
# - +other_hash+ {Hash} the other hash to merge with
|
25
|
-
# *Returns*:
|
26
|
-
# - {Hash} the original hash with the addition of the contents of other_hash
|
27
|
-
#
|
28
|
-
def rmerge!(other_hash, &block)
|
29
|
-
other_hash.each_pair do |k,v|
|
30
|
-
tv = self[k]
|
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
|
36
|
-
end
|
37
|
-
return self
|
38
|
-
end
|
39
|
-
|
40
|
-
#
|
41
|
-
# get the difference of another hash
|
42
|
-
#
|
43
|
-
# *Parameters*:
|
44
|
-
# - +other_hash+ {Hash} the other hash to compare against
|
45
|
-
# *Returns*:
|
46
|
-
# - {Hash} a representation of the difference between the two hashes
|
47
|
-
#
|
48
|
-
def diff(other_hash)
|
49
|
-
(self.keys + other_hash.keys).uniq.inject(Archetype::Hash.new) do |tmp, key|
|
50
|
-
# special comparison for gradients
|
51
|
-
are_gradients = self[key].is_a?(Compass::SassExtensions::Functions::GradientSupport::LinearGradient) and other_hash[key].is_a?(Compass::SassExtensions::Functions::GradientSupport::LinearGradient)
|
52
|
-
eq_gradients = are_gradients ? (self[key].to_s == other_hash[key].to_s) : true
|
53
|
-
unless self[key] == other_hash[key] and eq_gradients
|
54
|
-
if self[key].kind_of?(Hash) && other_hash[key].kind_of?(Hash)
|
55
|
-
tmp[key] = self[key].diff(other_hash[key])
|
56
|
-
else
|
57
|
-
tmp[key] = other_hash[key] || css_defaults(key)
|
58
|
-
# if the key is `filter-gradient` and it was removed, we need to change the key to `ie-filter`
|
59
|
-
tmp['ie-filter'] = css_defaults('ie-filter') if key == 'filter-gradient' and tmp[key].nil?
|
60
|
-
# if it came back as `nil` we couldn't understand it or it has no default, so axe it
|
61
|
-
tmp.delete(key) if tmp[key].nil?
|
62
|
-
end
|
63
|
-
end
|
64
|
-
tmp
|
65
|
-
end
|
66
|
-
end
|
67
|
-
|
68
|
-
private
|
69
|
-
#
|
70
|
-
# returns a best guess for the default CSS value of a given property
|
71
|
-
#
|
72
|
-
# *Parameters*:
|
73
|
-
# - <tt>key</tt> {String} the property to lookup
|
74
|
-
# *Returns*:
|
75
|
-
# - {Sass::String|Sass::Number} the default value
|
76
|
-
#
|
77
|
-
def css_defaults(key)
|
78
|
-
if @css_defaults.nil?
|
79
|
-
s = {}
|
80
|
-
# color
|
81
|
-
s['color'] = 'inherit'
|
82
|
-
# text
|
83
|
-
s['font'] = s['font-size'] = s['font-family'] = s['font-style'] = s['font-variant'] = s['font-weight'] = 'inherit'
|
84
|
-
s['text-decoration'] = s['text-transform'] = 'none'
|
85
|
-
s['text-align'] = 'left'
|
86
|
-
s['text-indent'] = 0
|
87
|
-
s['text-justify'] = 'auto'
|
88
|
-
s['text-overflow'] = 'clip'
|
89
|
-
s['line-height'] = 'normal'
|
90
|
-
# backgrounds
|
91
|
-
s['background'] = 'none'
|
92
|
-
s['background-color'] = 'transparent'
|
93
|
-
s['background-image'] = 'none'
|
94
|
-
s['background-repeat'] = 'repeat'
|
95
|
-
s['background-position'] = 'left top'
|
96
|
-
s['background-attachment'] = 'scroll'
|
97
|
-
s['background-clip'] = 'border-box'
|
98
|
-
s['background-size'] = 'auto'
|
99
|
-
s['background-origin'] = 'padding-box'
|
100
|
-
# borders
|
101
|
-
s['border'] = s['border-top'] = s['border-left'] = s['border-bottom'] = s['border-right'] = 'none'
|
102
|
-
s['border-color'] = s['border-top-color'] = s['border-left-color'] = s['border-bottom-color'] = s['border-right-color'] = 'transparent'
|
103
|
-
s['border-width'] = s['border-top-width'] = s['border-left-width'] = s['border-bottom-width'] = s['border-right-width'] = 0
|
104
|
-
s['border-style'] = s['border-top-style'] = s['border-left-style'] = s['border-bottom-style'] = s['border-right-style'] = 'solid'
|
105
|
-
# border-radius
|
106
|
-
s['border-radius'] = s['border-top-left-radius'] = s['border-top-right-radius'] = s['border-bottom-left-radius'] = s['border-bottom-right-radius'] = 0
|
107
|
-
# margin
|
108
|
-
s['margin'] = s['margin-top'] = s['margin-left'] = s['margin-bottom'] = s['margin-right'] = 0
|
109
|
-
# padding
|
110
|
-
s['padding'] = s['padding-top'] = s['padding-left'] = s['padding-bottom'] = s['padding-right'] = 0
|
111
|
-
# shadows
|
112
|
-
s['text-shadow'] = s['box-shadow'] = 'none'
|
113
|
-
# width/height
|
114
|
-
s['height'] = s['width'] = 'auto'
|
115
|
-
s['min-width'] = s['max-width'] = s['min-height'] = s['max-height'] = 'none'
|
116
|
-
# position
|
117
|
-
s['position'] = 'static'
|
118
|
-
s['top'] = s['right'] = s['bottom'] = s['left'] = 'auto'
|
119
|
-
s['clear'] = s['float'] = 'none'
|
120
|
-
# misc
|
121
|
-
s['overflow'] = 'visible'
|
122
|
-
s['opacity'] = 1
|
123
|
-
s['visibility'] = 'visible'
|
124
|
-
s['ie-filter'] = 'gradient(enabled=false)'
|
125
|
-
s['z-index'] = 0
|
126
|
-
# --------------------
|
127
|
-
@css_defaults = s
|
128
|
-
end
|
129
|
-
value = @css_defaults[key]
|
130
|
-
value = Sass::Script::String.new(value) if value.is_a? String
|
131
|
-
value = Sass::Script::Number.new(value) if value.is_a? Numeric
|
132
|
-
return value
|
133
|
-
end
|
134
|
-
end
|
135
|
-
|
136
|
-
# this shims the Hash functionality to ensure we have an ordered hash guarantee
|
137
|
-
module Archetype
|
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
|
148
|
-
end
|
149
|
-
|
1
|
+
%w(extend shim).each do |dep|
|
2
|
+
require "archetype/functions/hash/#{dep}"
|
3
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
# :stopdoc:
|
2
|
+
# This module extends the native Ruby Hash class to support deep merging
|
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
|
+
#
|
7
|
+
module Archetype::Functions::Hash
|
8
|
+
#
|
9
|
+
# recursively merge two hashes with deep merging
|
10
|
+
#
|
11
|
+
# *Parameters*:
|
12
|
+
# - +other_hash+ {Hash} the other hash to merge with
|
13
|
+
# *Returns*:
|
14
|
+
# - {Hash} a new hash containing the contents of other_hash and the contents of hsh, deep merged
|
15
|
+
#
|
16
|
+
def rmerge(other_hash, &block)
|
17
|
+
dup.rmerge!(other_hash, &block)
|
18
|
+
end
|
19
|
+
|
20
|
+
#
|
21
|
+
# adds the contents of other_hash to hsh, deep merged
|
22
|
+
#
|
23
|
+
# *Parameters*:
|
24
|
+
# - +other_hash+ {Hash} the other hash to merge with
|
25
|
+
# *Returns*:
|
26
|
+
# - {Hash} the original hash with the addition of the contents of other_hash
|
27
|
+
#
|
28
|
+
def rmerge!(other_hash, &block)
|
29
|
+
other_hash.each_pair do |k,v|
|
30
|
+
tv = self[k]
|
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
|
36
|
+
end
|
37
|
+
return self
|
38
|
+
end
|
39
|
+
|
40
|
+
#
|
41
|
+
# get the difference of another hash
|
42
|
+
#
|
43
|
+
# *Parameters*:
|
44
|
+
# - +other_hash+ {Hash} the other hash to compare against
|
45
|
+
# *Returns*:
|
46
|
+
# - {Hash} a representation of the difference between the two hashes
|
47
|
+
#
|
48
|
+
def diff(other_hash)
|
49
|
+
(self.keys + other_hash.keys).uniq.inject(Archetype::Hash.new) do |tmp, key|
|
50
|
+
item_1, item_2 = self[key], other_hash[key]
|
51
|
+
# special comparison for gradients
|
52
|
+
are_gradients = (item_1.class == item_2.class) && (item_1.is_a?(Compass::Core::SassExtensions::Functions::GradientSupport::LinearGradient) or item_1.is_a?(Compass::Core::SassExtensions::Functions::GradientSupport::RadialGradient))
|
53
|
+
eq_gradients = are_gradients ? (item_1.to_s == item_2.to_s) : true
|
54
|
+
unless item_1 == item_2 and eq_gradients
|
55
|
+
if item_1.kind_of?(Hash) and item_2.kind_of?(Hash)
|
56
|
+
tmp[key] = item_1.diff(item_2)
|
57
|
+
else
|
58
|
+
tmp[key] = item_2 || Archetype::Functions::CSS.default(key)
|
59
|
+
# if the key is `filter-gradient` and it was removed, we need to change the key to `ie-filter`
|
60
|
+
tmp['ie-filter'] = Archetype::Functions::CSS.default('ie-filter') if key == 'filter-gradient' and tmp[key].nil?
|
61
|
+
# if it came back as `nil` we couldn't understand it or it has no default, so axe it
|
62
|
+
tmp.delete(key) if tmp[key].nil?
|
63
|
+
end
|
64
|
+
end
|
65
|
+
tmp
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
unless self.respond_to?(:to_h)
|
70
|
+
def to_h
|
71
|
+
return self
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# :stopdoc:
|
2
|
+
# this shims the Hash functionality to ensure we have an ordered hash guarantee
|
3
|
+
module Archetype
|
4
|
+
if RUBY_VERSION < '1.9'
|
5
|
+
require 'hashery/ordered_hash'
|
6
|
+
class Hash < Hashery::OrderedHash
|
7
|
+
include Archetype::Functions::Hash
|
8
|
+
|
9
|
+
# make select behave like its 1.9+ counterpart
|
10
|
+
def select
|
11
|
+
hsh = ::Archetype::Hash.new
|
12
|
+
self.each do |key, value|
|
13
|
+
hsh[key] = value if yield(key, value)
|
14
|
+
end
|
15
|
+
return hsh
|
16
|
+
end
|
17
|
+
|
18
|
+
# make select! behave like its 1.9+ counterpart
|
19
|
+
def select!
|
20
|
+
self.each do |key, value|
|
21
|
+
self.delete[key] unless yield(key, value)
|
22
|
+
end
|
23
|
+
return self
|
24
|
+
end
|
25
|
+
|
26
|
+
# make reject behave like its 1.9+ counterpart
|
27
|
+
def reject
|
28
|
+
hsh = ::Archetype::Hash.new
|
29
|
+
self.each do |key, value|
|
30
|
+
hsh[key] = value unless yield(key, value)
|
31
|
+
end
|
32
|
+
return hsh
|
33
|
+
end
|
34
|
+
|
35
|
+
# make reject! behave like its 1.9+ counterpart
|
36
|
+
def reject!
|
37
|
+
self.each do |key, value|
|
38
|
+
self.delete[key] if yield(key, value)
|
39
|
+
end
|
40
|
+
return self
|
41
|
+
end
|
42
|
+
end
|
43
|
+
else
|
44
|
+
class Hash < ::Hash
|
45
|
+
include Archetype::Functions::Hash
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -2,7 +2,18 @@
|
|
2
2
|
# This module provides a set of helper functions and methods for working with Sass literals.
|
3
3
|
#
|
4
4
|
module Archetype::Functions::Helpers
|
5
|
-
|
5
|
+
|
6
|
+
# used for archetype meta objects on a Map
|
7
|
+
META = {
|
8
|
+
:meta => '-archetype-meta',
|
9
|
+
:has_multiples => 'has-multiple-values',
|
10
|
+
:values => 'values',
|
11
|
+
:message => 'message',
|
12
|
+
:original => 'original',
|
13
|
+
:decorators => {
|
14
|
+
:runtime_locales => 'has-runtime-locales'
|
15
|
+
}
|
16
|
+
}
|
6
17
|
|
7
18
|
#
|
8
19
|
# provides a convenience interface to the Compass::Logger
|
@@ -12,14 +23,21 @@ private
|
|
12
23
|
end
|
13
24
|
|
14
25
|
#
|
15
|
-
#
|
26
|
+
# provides a convenience interface for logging warnings
|
27
|
+
#
|
28
|
+
def self.warn(msg)
|
29
|
+
logger.record(:warning, msg)
|
30
|
+
end
|
31
|
+
|
32
|
+
#
|
33
|
+
# convert an Archetype::Hash to a Sass::Script::Value::List
|
16
34
|
#
|
17
35
|
# *Parameters*:
|
18
|
-
# - <tt>hsh</tt> {Hash} the hash to convert
|
36
|
+
# - <tt>hsh</tt> {Archetype::Hash} the hash to convert
|
19
37
|
# - <tt>depth</tt> {Integer} the depth to walk down into the hash
|
20
|
-
# - <tt>separator</tt> {Symbol} the separator to use for the Sass::List
|
38
|
+
# - <tt>separator</tt> {Symbol} the separator to use for the Sass::Script::Value::List
|
21
39
|
# *Returns*:
|
22
|
-
# - {Sass::List} the converted list
|
40
|
+
# - {Sass::Script::Value::List} the converted list
|
23
41
|
#
|
24
42
|
def self.hash_to_list(hsh, depth = 0, separator = :comma)
|
25
43
|
if hsh.is_a? Hash
|
@@ -31,35 +49,47 @@ private
|
|
31
49
|
tmp = []
|
32
50
|
item[1] = [item[1]] if not item[1].is_a? Array
|
33
51
|
item[1].each do |i|
|
34
|
-
list.push Sass::Script::List.new([Sass::Script::String.new(item[0]), hash_to_list(i, depth + 1)], separator)
|
52
|
+
list.push Sass::Script::Value::List.new([Sass::Script::Value::String.new(item[0]), hash_to_list(i, depth + 1)], separator)
|
35
53
|
end
|
36
54
|
end
|
37
55
|
end
|
38
|
-
return Sass::Script::List.new(list, separator)
|
56
|
+
return Sass::Script::Value::List.new(list, separator)
|
39
57
|
end
|
40
58
|
# if its an array, cast to a List
|
41
|
-
return Sass::Script::List.new(hsh, separator) if hsh.is_a? Array
|
59
|
+
return Sass::Script::Value::List.new(hsh, separator) if hsh.is_a? Array
|
42
60
|
# otherwise just return it
|
43
61
|
return hsh
|
44
62
|
end
|
45
63
|
|
46
64
|
#
|
47
|
-
# convert a Sass::List to
|
65
|
+
# convert a Sass::Script::Value::List to an Archetype::Hash
|
48
66
|
#
|
49
67
|
# *Parameters*:
|
50
|
-
# - <tt>list</tt> {Sass::List} the list to convert
|
68
|
+
# - <tt>list</tt> {Sass::Script::Value::List} the list to convert
|
51
69
|
# - <tt>depth</tt> {Integer} the depth to reach into nested Lists
|
52
70
|
# - <tt>nest</tt> {Array} a list of keys to treat as nested objects
|
71
|
+
# - <tt>additives</tt> {Array} a list of keys that are additive
|
53
72
|
# *Returns*:
|
54
|
-
# - {Hash} the converted hash
|
73
|
+
# - {Archetype::Hash} the converted hash
|
55
74
|
#
|
56
75
|
def self.list_to_hash(list, depth = 0, nest = [], additives = [])
|
57
76
|
list = list.to_a
|
58
77
|
previous = nil
|
59
78
|
hsh = Archetype::Hash.new
|
79
|
+
dups = Set.new
|
60
80
|
list.each do |item|
|
61
81
|
item = item.to_a
|
62
82
|
|
83
|
+
# if a 3rd item exists, we probably forgot a comma or parens somewhere
|
84
|
+
if previous.nil? and not item[2].nil?
|
85
|
+
msg = "[#{Archetype.name}:hash] you're likely missing a comma or parens in your data structure"
|
86
|
+
begin
|
87
|
+
warn("#{msg}: #{item}")
|
88
|
+
rescue
|
89
|
+
warn(msg)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
63
93
|
# convert the key to a string and strip off quotes
|
64
94
|
key = to_str(item[0], ' ' , :quotes)
|
65
95
|
# capture the value
|
@@ -77,7 +107,7 @@ private
|
|
77
107
|
end
|
78
108
|
elsif not previous.nil?
|
79
109
|
# if we got here, something is wrong with the structure
|
80
|
-
list
|
110
|
+
list = list[1..-1] if to_str(list[0]) == previous # remove the first item if it's the previous key, which is now the parent key
|
81
111
|
list = list[0].to_a # now the remaining items were munged, so split them out
|
82
112
|
hsh = Archetype::Hash.new
|
83
113
|
hsh[previous] = list_to_hash(list, depth - 1, nest, additives)
|
@@ -97,39 +127,214 @@ private
|
|
97
127
|
if additives.include?(key)
|
98
128
|
hsh[key] ||= []
|
99
129
|
hsh[key].push(value)
|
130
|
+
dups << key
|
100
131
|
else
|
101
132
|
hsh[key] = value
|
102
133
|
end
|
103
134
|
end
|
104
135
|
end
|
105
136
|
|
106
|
-
|
137
|
+
dups.each do |key|
|
138
|
+
# convert it's array of values into a meta object
|
139
|
+
hsh[key] = self.array_to_meta(hsh[key])
|
140
|
+
end
|
141
|
+
|
142
|
+
warn("[#{Archetype.name}:hash] one of your data structures is ambiguous, please double check near `#{previous}`") unless (previous.nil? or previous.empty?)
|
107
143
|
|
108
144
|
return hsh
|
109
145
|
end
|
110
146
|
|
147
|
+
#
|
148
|
+
# convert a Sass::Script::Value::List or Sass::Script::Value::Map to an Archetype::Hash
|
149
|
+
#
|
150
|
+
# *Parameters*:
|
151
|
+
# - <tt>data</tt> {Sass::Script::Value::List|Sass::Script::Value::Map} the data to convert
|
152
|
+
# - <tt>depth</tt> {Integer} the depth to reach into nested Lists
|
153
|
+
# - <tt>nest</tt> {Array} a list of keys to treat as nested objects
|
154
|
+
# - <tt>additives</tt> {Array} a list of keys that are additive
|
155
|
+
# *Returns*:
|
156
|
+
# - {Archetype::Hash} the converted hash
|
157
|
+
#
|
158
|
+
def self.data_to_hash(data, depth = 0, nest = [], additives = [])
|
159
|
+
method = data.is_a?(Sass::Script::Value::Map) ? :map_to_hash : :list_to_hash
|
160
|
+
return self.method(method).call(data, depth, nest, additives)
|
161
|
+
end
|
162
|
+
|
163
|
+
#
|
164
|
+
# converts a Sass::Script::Value::Map to an Archetype::Hash
|
165
|
+
# - <tt>data</tt> {Sass::Script::Value::Map} the map to convert
|
166
|
+
# - <tt>depth</tt> {Integer} the depth to reach into nested Lists
|
167
|
+
# - <tt>nest</tt> {Array} a list of keys to treat as nested objects
|
168
|
+
# - <tt>additives</tt> {Array} a list of keys that are additive
|
169
|
+
# *Returns*:
|
170
|
+
# - {Archetype::Hash} the converted hash
|
171
|
+
#
|
172
|
+
def self.map_to_hash(data, depth = 0, nest = [], additives = [])
|
173
|
+
data = data.to_h if data.respond_to?(:to_h)
|
174
|
+
hsh = Archetype::Hash.new
|
175
|
+
# recurisvely convert sub-maps into a hash
|
176
|
+
data.each do |key, value|
|
177
|
+
key = to_str(key, ' ' , :quotes)
|
178
|
+
hsh[key] = value.is_a?(Sass::Script::Value::Map) ? map_to_hash(value) : value
|
179
|
+
end
|
180
|
+
return hsh
|
181
|
+
end
|
182
|
+
|
183
|
+
#
|
184
|
+
# convert an Archetype::Hash to a Sass::Script::Value::Map
|
185
|
+
#
|
186
|
+
# *Parameters*:
|
187
|
+
# - <tt>hsh</tt> {Archetype::Hash} the hash to convert
|
188
|
+
# - <tt>depth</tt> {Integer} the depth to walk down into the hash
|
189
|
+
# - <tt>separator</tt> {Symbol} the separator to use for the Sass::Script::Value::List
|
190
|
+
# *Returns*:
|
191
|
+
# - {Sass::Script::Value::List} the converted list
|
192
|
+
#
|
193
|
+
def self.hash_to_map(hsh)
|
194
|
+
if hsh.is_a? Hash
|
195
|
+
new_hsh = Archetype::Hash.new
|
196
|
+
hsh.each do |key, item|
|
197
|
+
new_hsh[Sass::Script::Value::String.new(key)] = (item.is_a? Hash) ? self.hash_to_map(item) : item
|
198
|
+
end
|
199
|
+
else
|
200
|
+
new_hsh = {}
|
201
|
+
end
|
202
|
+
return Sass::Script::Value::Map.new(new_hsh)
|
203
|
+
end
|
204
|
+
|
205
|
+
#
|
206
|
+
# convert an array of values into a Sass map with meta data
|
207
|
+
#
|
208
|
+
# *Example*:
|
209
|
+
# array_to_meta([1, "foo", "bar", 2, "baz"])
|
210
|
+
# #=> ((-archetype-meta: (has-multiple-values: true), values: (1, "foo", "bar", 2, "baz")))
|
211
|
+
# *Parameters*:
|
212
|
+
# - <tt>array</tt> {Array} the array to convert
|
213
|
+
# *Returns*:
|
214
|
+
# - {Sass::Script::Value::Map} the converted map
|
215
|
+
#
|
216
|
+
def self.array_to_meta(array)
|
217
|
+
return array[0] if array.size == 1
|
218
|
+
return Sass::Script::Value::Map.new({
|
219
|
+
Sass::Script::Value::String.new(META[:meta]) => Sass::Script::Value::Map.new({
|
220
|
+
Sass::Script::Value::String.new(META[:has_multiples]) => Sass::Script::Value::Bool.new(true)
|
221
|
+
}),
|
222
|
+
Sass::Script::Value::String.new(META[:values]) => Sass::Script::Value::List.new(array, :comma)
|
223
|
+
})
|
224
|
+
end
|
225
|
+
|
226
|
+
#
|
227
|
+
# convert a Sass map with meta data to an array of values
|
228
|
+
#
|
229
|
+
# *Example*:
|
230
|
+
# meta_to_array(((-archetype-meta: (has-multiple-values: true), values: (1, "foo", "bar", 2, "baz"))))
|
231
|
+
# #=> [1, "foo", "bar", 2, "baz"]
|
232
|
+
# *Parameters*:
|
233
|
+
# - <tt>map</tt> {Sass::Script::Value::Map} the map to convert
|
234
|
+
# *Returns*:
|
235
|
+
# - {Array} the converted array
|
236
|
+
#
|
237
|
+
def self.meta_to_array(map)
|
238
|
+
hash = map.is_a?(Sass::Script::Value::Map) ? map_to_hash(map) : map
|
239
|
+
if hash.is_a?(Hash)
|
240
|
+
meta = hash[META[:meta]]
|
241
|
+
if not meta.nil? and not meta[META[:has_multiples]].nil? and meta[META[:has_multiples]]
|
242
|
+
return (hash[META[:values]] || []).to_a
|
243
|
+
end
|
244
|
+
end
|
245
|
+
# dunno what we got, but it wasn't meta enough, so just return the original map
|
246
|
+
return map
|
247
|
+
end
|
248
|
+
|
249
|
+
#
|
250
|
+
# decorates a value into a meta object
|
251
|
+
#
|
252
|
+
# *Parameters*:
|
253
|
+
# - <tt>value</tt> {*} the value to decorate
|
254
|
+
# *Returns*:
|
255
|
+
# - {Sass::Script::Value::Map} the decorated map
|
256
|
+
#
|
257
|
+
def self.meta_decorate(value, decorator)
|
258
|
+
return Sass::Script::Value::Null.new if is_null(value)
|
259
|
+
return Sass::Script::Value::Map.new({
|
260
|
+
Sass::Script::Value::String.new(META[:meta]) => Sass::Script::Value::Map.new({
|
261
|
+
Sass::Script::Value::String.new(META[:decorators][decorator] || decorator) => Sass::Script::Value::Bool.new(true)
|
262
|
+
}),
|
263
|
+
Sass::Script::Value::String.new(META[:original]) => value
|
264
|
+
})
|
265
|
+
end
|
266
|
+
|
267
|
+
#
|
268
|
+
# adds a meta message to the hash
|
269
|
+
#
|
270
|
+
# *Parameters*:
|
271
|
+
# - <tt>hash</tt> {Hash} the hash to store the message onto
|
272
|
+
# - <tt>message</tt> {String} the message to store
|
273
|
+
# *Returns*:
|
274
|
+
# - {Hash} the hash with the injected message
|
275
|
+
#
|
276
|
+
def self.add_meta_message(hash, message)
|
277
|
+
hash[META[:meta]] = Sass::Script::Value::Map.new({
|
278
|
+
Sass::Script::Value::String.new(META[:message]) => Sass::Script::Value::String.new(message)
|
279
|
+
})
|
280
|
+
return hash
|
281
|
+
end
|
282
|
+
|
283
|
+
#
|
284
|
+
# retrieves a meta message from a hash
|
285
|
+
#
|
286
|
+
# *Parameters*:
|
287
|
+
# - <tt>hash</tt> {Hash} the hash to retrieve the message from
|
288
|
+
# *Returns*:
|
289
|
+
# - {String} the meta message stored on the hash
|
290
|
+
#
|
291
|
+
def self.get_meta_message(hash)
|
292
|
+
if not hash[META[:meta]].nil?
|
293
|
+
meta = map_to_hash(hash[META[:meta]])
|
294
|
+
message = meta[META[:message]]
|
295
|
+
return message.to_s if not message.nil?
|
296
|
+
end
|
297
|
+
return nil
|
298
|
+
end
|
299
|
+
|
111
300
|
#
|
112
301
|
# convert things to a String
|
113
302
|
#
|
114
303
|
# *Parameters*:
|
115
|
-
# - <tt>value</tt> {String|Sass::String|Sass::List} the thing to convert
|
116
|
-
# - <tt>separator</tt> {String} the separator to use for joining Sass::List
|
304
|
+
# - <tt>value</tt> {String|Sass::Script::Value::String|Sass::Script::Value::List} the thing to convert
|
305
|
+
# - <tt>separator</tt> {String} the separator to use for joining Sass::Script::Value::List
|
306
|
+
# - <tt>strip</tt> {\*} the properties to strip from the resulting string
|
117
307
|
# *Returns*:
|
118
308
|
# - {String} the converted String
|
119
309
|
#
|
120
310
|
def self.to_str(value, separator = ' ', strip = nil)
|
121
311
|
if not value.is_a?(String)
|
122
|
-
value = ((value.to_a).each{ |i| i.nil? ? 'nil' : (i.is_a?(String) ? i : i.value) }).join(separator || '')
|
312
|
+
value = ((value.to_a).each{ |i| i.nil? ? 'nil' : (i.is_a?(String) ? i : i.is_a?(Array) ? to_str(i, separator, strip) : i.value) }).join(separator || '')
|
123
313
|
end
|
124
314
|
strip = /\A"|"\Z/ if strip == :quotes
|
125
315
|
return strip.nil? ? value : value.gsub(strip, '')
|
126
316
|
end
|
127
317
|
|
128
318
|
#
|
129
|
-
# test
|
319
|
+
# simple test for `null` or `nil` (deprecated) value. this is here for back-compat support with old `nil` syntax
|
320
|
+
#
|
321
|
+
# *Parameters*:
|
322
|
+
# - <tt>$value</tt> {*} the value to test
|
323
|
+
# *Returns*:
|
324
|
+
# - {Boolean} whether or not the value is null
|
325
|
+
#
|
326
|
+
def self.is_null(value)
|
327
|
+
return true if value.nil?
|
328
|
+
is_deprecated_nil = (value.is_a?(Sass::Script::Value::String) && value.value == 'nil')
|
329
|
+
#helpers.warn("[#{Archetype.name}:nil] the usage of `nil` will be removed in a future release, please use the Sass standard `null`")
|
330
|
+
return value.is_a?(Sass::Script::Value::Null) || is_deprecated_nil
|
331
|
+
end
|
332
|
+
|
333
|
+
#
|
334
|
+
# test a value for various conditions
|
130
335
|
#
|
131
336
|
# *Parameters*:
|
132
|
-
# - <tt>value</tt> {String|Array|Sass::String|Sass::List} the thing to test
|
337
|
+
# - <tt>value</tt> {String|Array|Sass::Script::Value::String|Sass::Script::Value::List} the thing to test
|
133
338
|
# - <tt>test</tt> {Symbol} the test to perform [:blank|:nil]
|
134
339
|
# *Returns*:
|
135
340
|
# - {Boolean} whether or not the value is nil/blank
|
@@ -139,16 +344,20 @@ private
|
|
139
344
|
case test
|
140
345
|
when :blank
|
141
346
|
is_it = false
|
142
|
-
value = value.value if value.is_a?(Sass::Script::String)
|
347
|
+
value = value.value if value.is_a?(Sass::Script::Value::String)
|
143
348
|
is_it = value.nil?
|
144
349
|
is_it = value.empty? if value.is_a?(String)
|
145
|
-
is_it = value.to_a.empty? if value.is_a?(Sass::Script::List) or value.is_a?(Array)
|
350
|
+
is_it = value.to_a.empty? if value.is_a?(Sass::Script::Value::List) or value.is_a?(Array)
|
146
351
|
when :nil
|
147
352
|
is_it = false
|
148
|
-
value = value.value if value.is_a?(Sass::Script::String)
|
353
|
+
value = value.value if value.is_a?(Sass::Script::Value::String)
|
149
354
|
is_it = value.nil?
|
150
355
|
is_it = value == 'nil' if value.is_a?(String)
|
151
|
-
is_it =
|
356
|
+
is_it = value.empty? if value.is_a?(Hash)
|
357
|
+
is_it = to_str(value) == 'nil' if value.is_a?(Sass::Script::Value::List) or value.is_a?(Array)
|
358
|
+
is_it = true if value.is_a?(Sass::Script::Value::Null)
|
359
|
+
when :hashy
|
360
|
+
is_it = value.is_a?(Hash) || value.is_a?(Sass::Script::Value::Map)
|
152
361
|
end
|
153
362
|
return is_it
|
154
363
|
end
|