diff --git a/lib/css_parser/parser.rb b/lib/css_parser/parser.rb index 7a3e079..8fc633e 100644 --- a/lib/css_parser/parser.rb +++ b/lib/css_parser/parser.rb @@ -258,6 +258,7 @@ def to_s(which_media = :all) each_selector(which_media) do |selectors, declarations, specificity, media_types| media_types.each do |media_type| styles_by_media_types[media_type] ||= [] + next if styles_by_media_types[media_type].include?([selectors, declarations]) styles_by_media_types[media_type] << [selectors, declarations] end end diff --git a/test/test_css_parser_media_types.rb b/test/test_css_parser_media_types.rb index 43dff16..dad3443 100644 --- a/test/test_css_parser_media_types.rb +++ b/test/test_css_parser_media_types.rb @@ -8,6 +8,25 @@ def setup @cp = Parser.new end + def test_that_duplicate_media_queries_do_not_duplicate_rules + query_to_duplicate = ["only screen and (max-width: 480px)"]*100 + @cp.add_block!(<<-CSS) + @media only screen and (max-width: 480px), #{query_to_duplicate.join(', ')} { + body { color: red; } + } + CSS + + expected = <<-CSS +@media only screen and (max-width: 480px) { + body { + color: red; + } +} + CSS + + assert_equal expected, @cp.to_s + end + def test_that_media_types_dont_include_all @cp.add_block!(<<-CSS) @media handheld {