Sha256: 0d5ae5830f0229285d90e25c9855d0923539978e933074176f23c703e00c2828

Contents?: true

Size: 1.22 KB

Versions: 20

Compression:

Stored size: 1.22 KB

Contents

# frozen_string_literal: true
module ThemeCheck
  class AssetSizeCSS < HtmlCheck
    include RegexHelpers
    severity :error
    category :html, :performance
    doc docs_url(__FILE__)

    attr_reader :threshold_in_bytes

    def initialize(threshold_in_bytes: 100_000)
      @threshold_in_bytes = threshold_in_bytes
    end

    def on_link(node)
      return if node.attributes['rel'] != "stylesheet"
      file_size = href_to_file_size(node.attributes['href'])
      return if file_size.nil?
      return if file_size <= threshold_in_bytes
      add_offense(
        "CSS on every page load exceeding compressed size threshold (#{threshold_in_bytes} Bytes)",
        node: node
      )
    end

    def href_to_file_size(href)
      # asset_url (+ optional stylesheet_tag) variables
      if href =~ /^#{LIQUID_VARIABLE}$/o && href =~ /asset_url/ && href =~ Liquid::QuotedString
        asset_id = Regexp.last_match(0).gsub(START_OR_END_QUOTE, "")
        asset = @theme.assets.find { |a| a.name.end_with?("/" + asset_id) }
        return if asset.nil?
        asset.gzipped_size

      # remote URLs
      elsif href =~ %r{^(https?:)?//}
        asset = RemoteAssetFile.from_src(href)
        asset.gzipped_size
      end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
theme-check-1.15.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.14.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.13.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.12.1 lib/theme_check/checks/asset_size_css.rb
theme-check-1.12.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.11.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.10.3 lib/theme_check/checks/asset_size_css.rb
theme-check-1.10.2 lib/theme_check/checks/asset_size_css.rb
theme-check-1.10.1 lib/theme_check/checks/asset_size_css.rb
theme-check-1.10.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.9.2 lib/theme_check/checks/asset_size_css.rb
theme-check-1.9.1 lib/theme_check/checks/asset_size_css.rb
theme-check-1.9.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.8.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.7.2 lib/theme_check/checks/asset_size_css.rb
theme-check-1.7.1 lib/theme_check/checks/asset_size_css.rb
theme-check-1.7.0 lib/theme_check/checks/asset_size_css.rb
theme-check-1.6.2 lib/theme_check/checks/asset_size_css.rb
theme-check-1.6.1 lib/theme_check/checks/asset_size_css.rb
theme-check-1.6.0 lib/theme_check/checks/asset_size_css.rb