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
@@ -0,0 +1,63 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# router for `list-style` properties
|
7
|
+
#
|
8
|
+
def self.get_derived_styles_router_for_list(related, property)
|
9
|
+
properties = %w(style-type style-position style-image)
|
10
|
+
styles, reconstruct = with_each_available_relative_if_root(related, property) do |items, comma_separated|
|
11
|
+
styles = ::Archetype::Hash.new
|
12
|
+
if helpers.to_str(items) == 'inherit'
|
13
|
+
styles[:style_image] = styles[:style_type] = styles[:style_position] = items
|
14
|
+
else
|
15
|
+
items.reject! do |item|
|
16
|
+
case helpers.to_str(item)
|
17
|
+
when /^(?:armenian|circle|cjk-ideographic|decimal(?:-leading-zero)?|disc|georgian|hebrew|(?:hiragana|katakana)(?:-iroha)?|(?:lower|upper)-(?:alpha|greek|latin|roman)|square)$/
|
18
|
+
styles[:style_type] = item
|
19
|
+
when /^(?:inside|outside)$/
|
20
|
+
styles[:style_position] = item
|
21
|
+
when /^url\(.*\)$/
|
22
|
+
styles[:style_image] = item
|
23
|
+
else
|
24
|
+
next
|
25
|
+
end
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
items.each do |item|
|
30
|
+
case helpers.to_str(item)
|
31
|
+
when 'none'
|
32
|
+
if styles[:style_type].nil?
|
33
|
+
styles[:style_type] = item
|
34
|
+
else
|
35
|
+
styles[:style_image] ||= item
|
36
|
+
end
|
37
|
+
when 'inherit'
|
38
|
+
if styles[:style_type].nil?
|
39
|
+
styles[:style_type] = item
|
40
|
+
elsif styles[:style_type].nil?
|
41
|
+
styles[:style_position] = item
|
42
|
+
else
|
43
|
+
styles[:style_image] ||= item
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
styles
|
49
|
+
end
|
50
|
+
|
51
|
+
if reconstruct
|
52
|
+
return nil if styles.nil? or styles.empty?
|
53
|
+
styles = set_default_styles(styles, 'list', properties)
|
54
|
+
value = [styles[:style_type], styles[:style_position], styles[:style_image]]
|
55
|
+
# we simplify it if the values are all identical
|
56
|
+
return value.first if value.uniq.length == 1
|
57
|
+
return Sass::Script::Value::List.new(value, :space)
|
58
|
+
end
|
59
|
+
|
60
|
+
# otherwise just return the value we were asked for
|
61
|
+
return styles
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# router for `margin` properties
|
7
|
+
#
|
8
|
+
def self.get_derived_styles_router_for_margin(related, property)
|
9
|
+
return get_derived_styles_router_for_margin_padding(related, property)
|
10
|
+
end
|
11
|
+
|
12
|
+
#
|
13
|
+
# router for `padding` properties
|
14
|
+
#
|
15
|
+
def self.get_derived_styles_router_for_padding(related, property)
|
16
|
+
return get_derived_styles_router_for_margin_padding(related, property)
|
17
|
+
end
|
18
|
+
|
19
|
+
#
|
20
|
+
# (real) router for both `margin` and `padding` properties
|
21
|
+
#
|
22
|
+
def self.get_derived_styles_router_for_margin_padding(related, property)
|
23
|
+
styles, reconstruct = with_each_available_relative_if_root(related, property) do |items, comma_separated|
|
24
|
+
# blow away anything we've already discovered (because it's irrelevant)
|
25
|
+
# and extract the top/right/bottom/left values
|
26
|
+
# make the styles available to the calling context
|
27
|
+
extract_symmetical_values(items)
|
28
|
+
end
|
29
|
+
# if we're getting the shorthand property, reconstruct the shorthand value
|
30
|
+
if reconstruct
|
31
|
+
value = extrapolate_shorthand_symmetrical(styles)
|
32
|
+
# if the value came back nil, we were missing something, so throw a warning...
|
33
|
+
return warn_not_enough_infomation_to_derive(property) if value.nil?
|
34
|
+
return value
|
35
|
+
end
|
36
|
+
|
37
|
+
# otherwise just return the value we were asked for
|
38
|
+
return styles
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# router for `outline` properties
|
7
|
+
#
|
8
|
+
def self.get_derived_styles_router_for_outline(related, property)
|
9
|
+
properties = %w(color style width)
|
10
|
+
styles, reconstruct = with_each_available_relative_if_root(related, property) do |items, comma_separated|
|
11
|
+
# blow away anything we've already discovered (because it's irrelevant)
|
12
|
+
styles = ::Archetype::Hash.new
|
13
|
+
items.reject! do |item|
|
14
|
+
if item.is_a?(Sass::Script::Value::Color)
|
15
|
+
styles[:color] = item
|
16
|
+
elsif item.is_a?(Sass::Script::Value::Number)
|
17
|
+
styles[:width] = item
|
18
|
+
else
|
19
|
+
case helpers.to_str(item)
|
20
|
+
when 'invert'
|
21
|
+
styles[:color] = item
|
22
|
+
when /^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/
|
23
|
+
styles[:style] = item
|
24
|
+
when /^(?:thin|medium|thick)$/
|
25
|
+
styles[:width] = item
|
26
|
+
when 'inherit'
|
27
|
+
next
|
28
|
+
end
|
29
|
+
end
|
30
|
+
true
|
31
|
+
end
|
32
|
+
# at this point, we should only have `inherit` values left
|
33
|
+
items.each do |item|
|
34
|
+
if styles[:color].nil?
|
35
|
+
styles[:color] = item
|
36
|
+
elsif styles[:style].nil?
|
37
|
+
styles[:style] = item
|
38
|
+
else
|
39
|
+
styles[:width] ||= item
|
40
|
+
end
|
41
|
+
end
|
42
|
+
styles = set_default_styles(styles, 'outline', properties)
|
43
|
+
# make the styles available to the calling context
|
44
|
+
styles
|
45
|
+
end
|
46
|
+
|
47
|
+
if reconstruct
|
48
|
+
return nil if styles.nil? or styles.empty?
|
49
|
+
styles = set_default_styles(styles, 'outline', properties)
|
50
|
+
return Sass::Script::Value::List.new([styles[:color], styles[:style], styles[:width]], :space)
|
51
|
+
end
|
52
|
+
|
53
|
+
# otherwise just return the value we were asked for
|
54
|
+
return styles
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# router for `overflow` properties
|
7
|
+
#
|
8
|
+
def self.get_derived_styles_router_for_overflow(related, property)
|
9
|
+
return is_root_property?(property) ? nil : filter_available_relatives(related, property).values.last
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# router for `target` properties
|
7
|
+
#
|
8
|
+
def self.get_derived_styles_router_for_target(related, property)
|
9
|
+
properties = %w(name new position)
|
10
|
+
styles, reconstruct = with_each_available_relative_if_root(related, property) do |items, comma_separated|
|
11
|
+
# blow away anything we've already discovered (because it's irrelevant)
|
12
|
+
# target-name target-new target-position
|
13
|
+
styles = ::Archetype::Hash.new
|
14
|
+
styles[:name] = items.shift
|
15
|
+
|
16
|
+
items.each do |item|
|
17
|
+
case helpers.to_str(item)
|
18
|
+
when /^(?:window|tab|none)$/
|
19
|
+
styles[:new] = item
|
20
|
+
when /^(?:above|behind|front|back)$/
|
21
|
+
styles[:position] = item
|
22
|
+
end
|
23
|
+
end
|
24
|
+
# set defaults if we missed anything...
|
25
|
+
styles = set_default_styles(styles, 'target', properties)
|
26
|
+
# make the styles available to the calling context
|
27
|
+
styles
|
28
|
+
end
|
29
|
+
if reconstruct
|
30
|
+
return warn_not_enough_infomation_to_derive(property) if styles.nil? or styles[:name].nil?
|
31
|
+
value = extrapolate_shorthand_simple(styles, property, properties)
|
32
|
+
return Sass::Script::Value::List.new(value, :space)
|
33
|
+
end
|
34
|
+
|
35
|
+
# otherwise just return the value we were asked for
|
36
|
+
return styles
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# router for `transition` properties
|
7
|
+
#
|
8
|
+
def self.get_derived_styles_router_for_transition(related, property)
|
9
|
+
properties = %w(property duration timing-function delay)
|
10
|
+
styles, reconstruct = with_each_available_relative_if_root(related, property) do |items, comma_separated|
|
11
|
+
# blow away anything we've already discovered (because it's irrelevant)
|
12
|
+
timings = get_timing_values(items)
|
13
|
+
items = items - timings
|
14
|
+
# property duration timing-function delay
|
15
|
+
styles = ::Archetype::Hash.new
|
16
|
+
styles[:duration] = timings.shift
|
17
|
+
styles[:delay] = timings.shift
|
18
|
+
|
19
|
+
items.reject! do |item|
|
20
|
+
case helpers.to_str(item)
|
21
|
+
when R_TIMING_FUNCTION
|
22
|
+
styles[:timing_function] = item
|
23
|
+
else
|
24
|
+
next
|
25
|
+
end
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
# set defaults if we missed anything...
|
30
|
+
styles[:property] = items.shift
|
31
|
+
styles = set_default_styles(styles, 'transition', properties)
|
32
|
+
# make the styles available to the calling context
|
33
|
+
styles
|
34
|
+
end
|
35
|
+
|
36
|
+
if reconstruct
|
37
|
+
if styles.nil? or styles[:property].nil?
|
38
|
+
return warn_not_enough_infomation_to_derive(property) if not styles.empty?
|
39
|
+
return nil
|
40
|
+
end
|
41
|
+
value = extrapolate_shorthand_simple(styles, property, properties)
|
42
|
+
return Sass::Script::Value::List.new(value, :space)
|
43
|
+
end
|
44
|
+
|
45
|
+
# otherwise just return the value we were asked for
|
46
|
+
return styles
|
47
|
+
end
|
48
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# extrapolates shorthand value from a simple list of ordered properties
|
7
|
+
#
|
8
|
+
def self.extrapolate_shorthand_simple(styles, base, properties)
|
9
|
+
styles = set_default_styles(styles, base, properties)
|
10
|
+
value = []
|
11
|
+
properties.each { |k| value << styles[normalize_property_key(k, base)] }
|
12
|
+
return value
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# extrapolates shorthand value for symmetrical properties
|
17
|
+
#
|
18
|
+
def self.extrapolate_shorthand_symmetrical(styles)
|
19
|
+
# make sure we have enough info to continue
|
20
|
+
return nil if styles.nil? or styles.length < 4
|
21
|
+
# can we use 3 values?
|
22
|
+
if styles[:left] == styles[:right]
|
23
|
+
# can we use 2 values?
|
24
|
+
if styles[:bottom] == styles[:top]
|
25
|
+
# can we use just 1 value?
|
26
|
+
if styles[:top] == styles[:right]
|
27
|
+
styles = [styles[:top]] # 1 value
|
28
|
+
else
|
29
|
+
styles = [styles[:top], styles[:right]] # 2 values
|
30
|
+
end
|
31
|
+
else
|
32
|
+
styles = [styles[:top], styles[:right], styles[:bottom]] # 3 values
|
33
|
+
end
|
34
|
+
else
|
35
|
+
styles = [styles[:top], styles[:right], styles[:bottom], styles[:left]] # 4 values
|
36
|
+
end
|
37
|
+
return Sass::Script::Value::List.new(styles, :space)
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
%w(animation background border).each do |shorthand|
|
42
|
+
require "archetype/functions/css/shorthands/#{shorthand}"
|
43
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# extrapolates shorthand value for `animation` property
|
7
|
+
#
|
8
|
+
def self.extrapolate_shorthand_animation(styles)
|
9
|
+
# make sure we have enough info to continue
|
10
|
+
return nil if styles.nil? or styles[:name].nil?
|
11
|
+
shorthand = []
|
12
|
+
shorthand << styles[:name]
|
13
|
+
%w(duration timing-function delay iteration-count direction fill-mode play-state).each do |k|
|
14
|
+
shorthand << (styles[normalize_property_key(k, 'animation')] || default("animation-#{k}")).to_a.first
|
15
|
+
end
|
16
|
+
return Sass::Script::Value::List.new(shorthand, :space)
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# deconstructs `background` shorthand property into it's longhand values
|
7
|
+
#
|
8
|
+
def self.deconstruct_shorthand_for_background(items, comma_separated, properties)
|
9
|
+
i = 0
|
10
|
+
# blow away anything we've already discovered (because it's irrelevant)
|
11
|
+
styles = ::Archetype::Hash.new
|
12
|
+
properties.each { |k| styles[k.to_sym] = [] }
|
13
|
+
|
14
|
+
(comma_separated ? items.to_a : [items]).each do |items|
|
15
|
+
items = items.to_a.dup if items.respond_to?(:to_a)
|
16
|
+
items.reject! do |item|
|
17
|
+
if item.is_a?(Sass::Script::Value::Color)
|
18
|
+
styles[:color] << item
|
19
|
+
else
|
20
|
+
case helpers.to_str(item)
|
21
|
+
when /^(?:(?:no-)?repeat(?:-[xy])?|inherit)$/
|
22
|
+
styles[:repeat] << item
|
23
|
+
# origin or clip
|
24
|
+
when /^(?:border|padding|content)-box$/
|
25
|
+
# if we already have an `origin`, then this is `clip`, otherwise it's `origin`
|
26
|
+
styles[styles[:origin][iteration].nil? ? :origin : :clip] << item
|
27
|
+
when /^(?:url\(.*\)|none)$/
|
28
|
+
# record multiple images if needed
|
29
|
+
styles[:image] << item
|
30
|
+
when /^(?:scroll|fixed|local)$/
|
31
|
+
styles[:attachment] << item
|
32
|
+
when /^(?:cover|contain)$/
|
33
|
+
styles[:size] << item
|
34
|
+
when /^(?:top|right|bottom|left|center)$/
|
35
|
+
styles[:position][i] ||= []
|
36
|
+
styles[:position][i] << item
|
37
|
+
else
|
38
|
+
next
|
39
|
+
end
|
40
|
+
end
|
41
|
+
true
|
42
|
+
end
|
43
|
+
|
44
|
+
# deal with the `position` and `size`, as they're order dependent...
|
45
|
+
items.each do |item|
|
46
|
+
if item.is_a?(Sass::Script::Value::Number) or helpers.to_str(item) == 'auto'
|
47
|
+
styles[:position][i] ||= []
|
48
|
+
if styles[:position][i].length < 2
|
49
|
+
styles[:position][i] << item
|
50
|
+
else
|
51
|
+
styles[:size][i] ||= []
|
52
|
+
styles[:size][i] = styles[:size][i].to_a
|
53
|
+
styles[:size][i] << item
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
[:position, :size].each do |k|
|
59
|
+
styles[k][i] = Sass::Script::List.new(styles[k][i], :space) if styles[k][i].is_a?(Array)
|
60
|
+
end
|
61
|
+
|
62
|
+
# ...
|
63
|
+
properties.each { |k| styles[k.to_sym] << default("background-#{k}") if styles[k.to_sym][i].nil?}
|
64
|
+
i += 1
|
65
|
+
end
|
66
|
+
return styles
|
67
|
+
end
|
68
|
+
end
|
@@ -0,0 +1,102 @@
|
|
1
|
+
module Archetype::Functions::CSS
|
2
|
+
|
3
|
+
private
|
4
|
+
|
5
|
+
#
|
6
|
+
# deconstructs `border` shorthand properties into it's longhand values
|
7
|
+
#
|
8
|
+
def self.deconstruct_shorthand_for_border(items, types)
|
9
|
+
tmp = ::Archetype::Hash.new
|
10
|
+
items.reject! do |item|
|
11
|
+
if item.is_a?(Sass::Script::Value::Number)
|
12
|
+
tmp[:width] = item
|
13
|
+
elsif item.is_a?(Sass::Script::Value::Color)
|
14
|
+
tmp[:color] = item
|
15
|
+
else
|
16
|
+
case helpers.to_str(item)
|
17
|
+
when /^(?:thin|medium|thick)$/
|
18
|
+
tmp[:width] = item
|
19
|
+
when /^(?:none|hidden|dotted|dashed|solid|double|groove|ridge|inset|outset)$/
|
20
|
+
tmp[:style] = item
|
21
|
+
else
|
22
|
+
next
|
23
|
+
end
|
24
|
+
end
|
25
|
+
true
|
26
|
+
end
|
27
|
+
items.each do |item|
|
28
|
+
if helpers.to_str(item) == 'inherit'
|
29
|
+
if tmp[:width].nil?
|
30
|
+
tmp[:width] = item
|
31
|
+
elsif tmp[:style].nil?
|
32
|
+
tmp[:style] = item
|
33
|
+
else
|
34
|
+
tmp[:color] ||= item
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
return set_default_styles(tmp, 'border', types)
|
39
|
+
end
|
40
|
+
|
41
|
+
#
|
42
|
+
# deconstructs `border-image` shorthand property into it's longhand values
|
43
|
+
#
|
44
|
+
def self.deconstruct_shorthand_for_border_image(items, properties)
|
45
|
+
contexts = [:image_slice, :image_width, :image_outset]
|
46
|
+
context = contexts.shift
|
47
|
+
count = 1
|
48
|
+
styles = ::Archetype::Hash.new
|
49
|
+
items.each do |item|
|
50
|
+
# source slice width outset repeat
|
51
|
+
# <source> <slice {1,4}> / <width {1,4}> <outset> <repeat{1,2}>
|
52
|
+
case helpers.to_str(item)
|
53
|
+
when /^(?:url\(.*\)|none)$/
|
54
|
+
styles[:image_source] = item
|
55
|
+
when /^(?:stretch|repeat|round|space)$/
|
56
|
+
styles[:image_repeat] ||= []
|
57
|
+
styles[:image_repeat] << item
|
58
|
+
when /(.+)\/(.+)/ # delimiter to denote which context (slice, width, outset) we're observing
|
59
|
+
[$1, $2].each_with_index do |item, i|
|
60
|
+
count -= 1 if item == 'fill' # don't count `fill`
|
61
|
+
if count > 4 or i == 1
|
62
|
+
context = contexts.shift
|
63
|
+
count = 1
|
64
|
+
end
|
65
|
+
if context
|
66
|
+
item = (item =~ /^(\d+(?:\.\d+)?)(.*)/) ? Sass::Script::Value::Number.new($1.to_f, [$2]) : Sass::Script::Value::String.new(item)
|
67
|
+
styles[context] ||= []
|
68
|
+
styles[context] << item
|
69
|
+
count += 1
|
70
|
+
end
|
71
|
+
end
|
72
|
+
when /^\d+/
|
73
|
+
# if we've reached out limit for the current context, adjust
|
74
|
+
if count > 4
|
75
|
+
context = contexts.shift
|
76
|
+
count = 1
|
77
|
+
end
|
78
|
+
# if we have a context, stash the value onto it
|
79
|
+
if context
|
80
|
+
styles[context] ||= []
|
81
|
+
styles[context] << item
|
82
|
+
count += 1
|
83
|
+
end
|
84
|
+
when /^fill$/
|
85
|
+
styles[:image_slice] ||= []
|
86
|
+
styles[:image_slice] << item
|
87
|
+
# don't count `fill`
|
88
|
+
when /^auto$/
|
89
|
+
styles[:image_width] ||= []
|
90
|
+
styles[:image_width] << item
|
91
|
+
count += 1
|
92
|
+
when '/'
|
93
|
+
context = contexts.shift
|
94
|
+
count = 1
|
95
|
+
else
|
96
|
+
next
|
97
|
+
end
|
98
|
+
true
|
99
|
+
end
|
100
|
+
styles = set_default_styles(styles, 'border-image', properties)
|
101
|
+
end
|
102
|
+
end
|