css_parser 1.1.4 → 1.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/css_parser/rule_set.rb +3 -1
- data/lib/css_parser.rb +16 -8
- data/test/test_css_parser_basic.rb +3 -0
- data/test/test_merging.rb +15 -0
- metadata +3 -3
    
        data/lib/css_parser/rule_set.rb
    CHANGED
    
    | @@ -300,11 +300,13 @@ public | |
| 300 300 |  | 
| 301 301 | 
             
                # Looks for long format CSS background properties (e.g. <tt>background-color</tt>) and 
         | 
| 302 302 | 
             
                # converts them into a shorthand CSS <tt>background</tt> property.
         | 
| 303 | 
            +
                #
         | 
| 304 | 
            +
                # Leaves properties declared !important alone.
         | 
| 303 305 | 
             
                def create_background_shorthand! # :nodoc:
         | 
| 304 306 | 
             
                  new_value = ''
         | 
| 305 307 | 
             
                  ['background-color', 'background-image', 'background-repeat', 
         | 
| 306 308 | 
             
                   'background-position', 'background-attachment'].each do |property|
         | 
| 307 | 
            -
                    if @declarations.has_key?(property)
         | 
| 309 | 
            +
                    if @declarations.has_key?(property) and not @declarations[property][:is_important]
         | 
| 308 310 | 
             
                      new_value += @declarations[property][:value] + ' '
         | 
| 309 311 | 
             
                      @declarations.delete(property)
         | 
| 310 312 | 
             
                    end
         | 
    
        data/lib/css_parser.rb
    CHANGED
    
    | @@ -7,7 +7,7 @@ require 'stringio' | |
| 7 7 | 
             
            require 'iconv'
         | 
| 8 8 |  | 
| 9 9 | 
             
            module CssParser
         | 
| 10 | 
            -
              VERSION = '1.1. | 
| 10 | 
            +
              VERSION = '1.1.5'
         | 
| 11 11 |  | 
| 12 12 | 
             
              # Merge multiple CSS RuleSets by cascading according to the CSS 2.1 cascading rules 
         | 
| 13 13 | 
             
              # (http://www.w3.org/TR/REC-CSS2/cascade.html#cascading-order).
         | 
| @@ -75,20 +75,28 @@ module CssParser | |
| 75 75 |  | 
| 76 76 | 
             
                  rule_set.each_declaration do |property, value, is_important|
         | 
| 77 77 | 
             
                    # Add the property to the list to be folded per http://www.w3.org/TR/CSS21/cascade.html#cascading-order
         | 
| 78 | 
            -
                    if not properties.has_key?(property) | 
| 79 | 
            -
             | 
| 80 | 
            -
             | 
| 81 | 
            -
             | 
| 82 | 
            -
             | 
| 78 | 
            +
                    if not properties.has_key?(property)
         | 
| 79 | 
            +
                      properties[property] = {:value => value, :specificity => specificity, :is_important => is_important}
         | 
| 80 | 
            +
                    elsif properties[property][:specificity] < specificity or properties[property][:specificity] == specificity
         | 
| 81 | 
            +
                      unless properties[property][:is_important]
         | 
| 82 | 
            +
                        properties[property] = {:value => value, :specificity => specificity, :is_important => is_important}            
         | 
| 83 | 
            +
                      end
         | 
| 83 84 | 
             
                    end
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                    if is_important
         | 
| 87 | 
            +
                        properties[property] = {:value => value, :specificity => specificity, :is_important => is_important}            
         | 
| 88 | 
            +
                    end        
         | 
| 84 89 | 
             
                  end
         | 
| 85 90 | 
             
                end
         | 
| 86 91 |  | 
| 87 92 | 
             
                merged = RuleSet.new(nil, nil)
         | 
| 88 93 |  | 
| 89 | 
            -
                # TODO: what about important
         | 
| 90 94 | 
             
                properties.each do |property, details|
         | 
| 91 | 
            -
                   | 
| 95 | 
            +
                  if details[:is_important]
         | 
| 96 | 
            +
                    merged[property.strip] = details[:value].strip.gsub(/\;\Z/, '') + '!important' 
         | 
| 97 | 
            +
                  else
         | 
| 98 | 
            +
                    merged[property.strip] = details[:value].strip
         | 
| 99 | 
            +
                  end
         | 
| 92 100 | 
             
                end
         | 
| 93 101 |  | 
| 94 102 | 
             
                merged.create_shorthand!
         | 
| @@ -10,6 +10,7 @@ class CssParserBasicTests < Test::Unit::TestCase | |
| 10 10 | 
             
                  html, body, p { margin: 0px; }
         | 
| 11 11 | 
             
                  p { padding: 0px; }
         | 
| 12 12 | 
             
                  #content { font: 12px/normal sans-serif; }
         | 
| 13 | 
            +
                  .content { color: red; }
         | 
| 13 14 | 
             
                EOT
         | 
| 14 15 | 
             
              end
         | 
| 15 16 |  | 
| @@ -17,6 +18,8 @@ class CssParserBasicTests < Test::Unit::TestCase | |
| 17 18 | 
             
                @cp.add_block!(@css)
         | 
| 18 19 | 
             
                assert_equal 'margin: 0px;', @cp.find_by_selector('body').join(' ')
         | 
| 19 20 | 
             
                assert_equal 'margin: 0px; padding: 0px;', @cp.find_by_selector('p').join(' ')
         | 
| 21 | 
            +
                assert_equal 'font: 12px/normal sans-serif;', @cp.find_by_selector('#content').join(' ')
         | 
| 22 | 
            +
                assert_equal 'color: red;', @cp.find_by_selector('.content').join(' ')
         | 
| 20 23 | 
             
              end
         | 
| 21 24 |  | 
| 22 25 | 
             
              def test_adding_block
         | 
    
        data/test/test_merging.rb
    CHANGED
    
    | @@ -85,4 +85,19 @@ class MergingTests < Test::Unit::TestCase | |
| 85 85 | 
             
                merged = CssParser.merge(rs)
         | 
| 86 86 | 
             
                assert_equal rs.object_id, merged.object_id
         | 
| 87 87 | 
             
              end
         | 
| 88 | 
            +
              
         | 
| 89 | 
            +
              def test_merging_important
         | 
| 90 | 
            +
                rs1 = RuleSet.new(nil, 'color: black !important;')
         | 
| 91 | 
            +
                rs2 = RuleSet.new(nil, 'color: red;')
         | 
| 92 | 
            +
                merged = CssParser.merge(rs1, rs2)
         | 
| 93 | 
            +
                assert_equal 'black !important;', merged['color']    
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
             | 
| 96 | 
            +
              def test_merging_shorthand_important
         | 
| 97 | 
            +
                rs1 = RuleSet.new(nil, 'background: black none !important;')
         | 
| 98 | 
            +
                rs2 = RuleSet.new(nil, 'background-color: red;')
         | 
| 99 | 
            +
                merged = CssParser.merge(rs1, rs2)
         | 
| 100 | 
            +
                assert_equal 'black !important;', merged['background-color']
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
             | 
| 88 103 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -5,8 +5,8 @@ version: !ruby/object:Gem::Version | |
| 5 5 | 
             
              segments: 
         | 
| 6 6 | 
             
              - 1
         | 
| 7 7 | 
             
              - 1
         | 
| 8 | 
            -
              -  | 
| 9 | 
            -
              version: 1.1. | 
| 8 | 
            +
              - 5
         | 
| 9 | 
            +
              version: 1.1.5
         | 
| 10 10 | 
             
            platform: ruby
         | 
| 11 11 | 
             
            authors: 
         | 
| 12 12 | 
             
            - Alex Dunae
         | 
| @@ -14,7 +14,7 @@ autorequire: | |
| 14 14 | 
             
            bindir: bin
         | 
| 15 15 | 
             
            cert_chain: []
         | 
| 16 16 |  | 
| 17 | 
            -
            date:  | 
| 17 | 
            +
            date: 2011-01-21 00:00:00 -08:00
         | 
| 18 18 | 
             
            default_executable: 
         | 
| 19 19 | 
             
            dependencies: []
         | 
| 20 20 |  |