Sha256: 20e0c926f48c472e7db6139d74eb3ce1bbc1b04e9d52f7d049cc74e6bfc94a43

Contents?: true

Size: 1.5 KB

Versions: 10

Compression:

Stored size: 1.5 KB

Contents

module Csscss
  module Parser
    module MultiSideTransformer
      def self.extended(base)
        base.instance_eval do
          extend ClassMethods

          rule(@property => simple(:inherit)) {[]}

          rule({@property => {
            top:simple(:top),
            right:simple(:right),
            bottom:simple(:bottom),
            left:simple(:left)
          }}, &method(:transform_sides))
        end
      end

      module ClassMethods
        def side_declaration(side, value)
          Declaration.from_parser("#{@property}-#{side}", value)
        end

        def transform_sides(context)
          values = [context[:top], context[:right], context[:bottom], context[:left]].compact
          case values.size
          when 4
            %w(top right bottom left).zip(values).map {|side, value| side_declaration(side, value) }
          when 3
            %w(top right bottom).zip(values).map {|side, value| side_declaration(side, value) }.tap do |declarations|
              declarations << side_declaration("left", values[1])
            end
          when 2
            %w(top right).zip(values).map {|side, value| side_declaration(side, value) }.tap do |declarations|
              declarations << side_declaration("bottom", values[0])
              declarations << side_declaration("left", values[1])
            end
          when 1
            %w(top right bottom left).map do |side|
              side_declaration(side, values[0])
            end
          end
        end
      end
    end
  end
end

Version data entries

10 entries across 10 versions & 1 rubygems

Version Path
csscss-1.3.3 lib/csscss/parser/multi_side_transformer.rb
csscss-1.3.2 lib/csscss/parser/multi_side_transformer.rb
csscss-1.3.1 lib/csscss/parser/multi_side_transformer.rb
csscss-1.3.0 lib/csscss/parser/multi_side_transformer.rb
csscss-1.2.0 lib/csscss/parser/multi_side_transformer.rb
csscss-1.1.0 lib/csscss/parser/multi_side_transformer.rb
csscss-1.0.0 lib/csscss/parser/multi_side_transformer.rb
csscss-0.2.1 lib/csscss/parser/multi_side_transformer.rb
csscss-0.2.0 lib/csscss/parser/multi_side_transformer.rb
csscss-0.1.0 lib/csscss/parser/multi_side_transformer.rb