Sha256: ca8efb0355aa2a880eff920d2ed1c3841410a510aa9dd47c400b24228ee84033

Contents?: true

Size: 1.59 KB

Versions: 24

Compression:

Stored size: 1.59 KB

Contents

module Compass::SassExtensions::Functions::Selectors
  COMMA_SEPARATOR = /\s*,\s*/

  # Permute multiple selectors each of which may be comma delimited, the end result is
  # a new selector that is the equivalent of nesting each under the previous selector.
  # To illustrate, the following mixins are equivalent:
  # =mixin-a(!selector1, !selector2, !selector3)
  #   #{!selector1}
  #     #{selector2}
  #       #{selector3}
  #         width: 2px
  # =mixin-b(!selector1, !selector2)
  #   #{nest(!selector, !selector2, !selector3)}
  #     width: 2px
  def nest(*arguments)
    nested = arguments.map{|a| a.value}.inject do |memo,arg|
      ancestors = memo.split(COMMA_SEPARATOR)
      descendants = arg.split(COMMA_SEPARATOR)
      ancestors.map{|a| descendants.map{|d| "#{a} #{d}"}.join(", ")}.join(", ")
    end
    Sass::Script::String.new(nested)
  end

  # Permute two selectors, the first may be comma delimited.
  # The end result is a new selector that is the equivalent of nesting the second
  # selector under the first one in a sass file and preceding it with an &.
  # To illustrate, the following mixins are equivalent:
  # =mixin-a(!selector, !to_append)
  #   #{!selector}
  #     &#{!to_append}
  #       width: 2px
  # =mixin-b(!selector, !to_append)
  #   #{append_selector(!selector, !to_append)}
  #     width: 2px
  def append_selector(selector, to_append)
    ancestors = selector.value.split(COMMA_SEPARATOR)
    descendants = to_append.value.split(COMMA_SEPARATOR)
    nested = ancestors.map{|a| descendants.map{|d| "#{a}#{d}"}.join(", ")}.join(", ")
    Sass::Script::String.new(nested)
  end

end

Version data entries

24 entries across 23 versions & 3 rubygems

Version Path
compass-0.10.0.rc3 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.rc2 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.rc1 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre9 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre8 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre7 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre6 lib/compass/sass_extensions/functions/selectors.rb
middleman-0.13.1 lib/middleman/vendor/gems/ruby/1.9.1/gems/compass-0.10.0.pre4/lib/compass/sass_extensions/functions/selectors.rb
middleman-0.13.1 lib/middleman/vendor/gems/ruby/1.8/gems/compass-0.10.0.pre5/lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre5 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre4 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre3 lib/compass/sass_extensions/functions/selectors.rb
middleman-0.12.2 lib/middleman/vendor/gems/gems/compass-0.10.0.pre2/lib/compass/sass_extensions/functions/selectors.rb
middleman-0.12.1 lib/middleman/vendor/gems/gems/compass-0.10.0.pre2/lib/compass/sass_extensions/functions/selectors.rb
middleman-0.12.0.pre3 lib/middleman/vendor/gems/gems/compass-0.10.0.pre2/lib/compass/sass_extensions/functions/selectors.rb
middleman-0.12.0.pre2 lib/middleman/vendor/gems/gems/compass-0.10.0.pre2/lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre2 lib/compass/sass_extensions/functions/selectors.rb
compass-0.10.0.pre1 lib/compass/sass_extensions/functions/selectors.rb
compass-edge-0.9.5.0 lib/compass/sass_extensions/functions/selectors.rb
compass-edge-0.9.4 lib/compass/sass_extensions/functions/selectors.rb