Module: Jekyll::Compressor

Included in:
Document, Page, StaticFile
Defined in:
lib/jekyll-minifier.rb

Instance Method Summary collapse

Instance Method Details

#output_compressed(path, context) ⇒ Object



961
962
963
964
965
966
967
968
969
970
971
972
973
974
# File 'lib/jekyll-minifier.rb', line 961

def output_compressed(path, context)
  extension = File.extname(path)

  case extension
  when '.js'
    output_js_or_file(path, context)
  when '.json'
    output_json(path, context)
  when '.css'
    output_css_or_file(path, context)
  else
    output_html(path, context)
  end
end

#output_css(path, content) ⇒ Object



1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
# File 'lib/jekyll-minifier.rb', line 1051

def output_css(path, content)
  return output_file(path, content) unless production_environment?

  # Validate file path for security
  unless Jekyll::Minifier::ValidationHelpers.validate_file_path(path)
    Jekyll.logger.warn("Jekyll Minifier:", "Unsafe file path detected, skipping compression: #{path}")
    return # Don't write anything for unsafe paths
  end

  config = Jekyll::Minifier::CompressionConfig.new(@site.config)
  return output_file(path, content) unless config.compress_css?

  compressed_content = Jekyll::Minifier::CompressorFactory.compress_css(content, config, path)
  output_file(path, compressed_content)
end

#output_css_or_file(path, context) ⇒ Object



984
985
986
987
988
989
990
# File 'lib/jekyll-minifier.rb', line 984

def output_css_or_file(path, context)
  if path.end_with?('.min.css')
    output_file(path, context)
  else
    output_css(path, context)
  end
end

#output_file(dest, content) ⇒ Object



954
955
956
957
958
959
# File 'lib/jekyll-minifier.rb', line 954

def output_file(dest, content)
  FileUtils.mkdir_p(File.dirname(dest))
  File.open(dest, 'w') do |f|
    f.write(content)
  end
end

#output_html(path, content) ⇒ Object



992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
# File 'lib/jekyll-minifier.rb', line 992

def output_html(path, content)
  return output_file(path, content) unless production_environment?

  # Validate file path for security
  unless Jekyll::Minifier::ValidationHelpers.validate_file_path(path)
    Jekyll.logger.warn("Jekyll Minifier:", "Unsafe file path detected, skipping compression: #{path}")
    return # Don't write anything for unsafe paths
  end

  # Validate content before compression
  unless Jekyll::Minifier::ValidationHelpers.validate_file_content(content, 'html', path)
    Jekyll.logger.warn("Jekyll Minifier:", "Unsafe HTML content detected, skipping compression: #{path}")
    return output_file(path, content)
  end

  config = Jekyll::Minifier::CompressionConfig.new(@site.config)

  begin
    compressor = Jekyll::Minifier::CompressorFactory.create_html_compressor(config)
    compressed_content = compressor.compress(content)
    output_file(path, compressed_content)
  rescue => e
    Jekyll.logger.warn("Jekyll Minifier:", "HTML compression failed for #{path}: #{e.message}. Using original content.")
    output_file(path, content)
  end
end

#output_js(path, content) ⇒ Object



1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
# File 'lib/jekyll-minifier.rb', line 1019

def output_js(path, content)
  return output_file(path, content) unless production_environment?

  # Validate file path for security
  unless Jekyll::Minifier::ValidationHelpers.validate_file_path(path)
    Jekyll.logger.warn("Jekyll Minifier:", "Unsafe file path detected, skipping compression: #{path}")
    return # Don't write anything for unsafe paths
  end

  config = Jekyll::Minifier::CompressionConfig.new(@site.config)
  return output_file(path, content) unless config.compress_javascript?

  compressed_content = Jekyll::Minifier::CompressorFactory.compress_js(content, config, path)
  output_file(path, compressed_content)
end

#output_js_or_file(path, context) ⇒ Object



976
977
978
979
980
981
982
# File 'lib/jekyll-minifier.rb', line 976

def output_js_or_file(path, context)
  if path.end_with?('.min.js')
    output_file(path, context)
  else
    output_js(path, context)
  end
end

#output_json(path, content) ⇒ Object



1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
# File 'lib/jekyll-minifier.rb', line 1035

def output_json(path, content)
  return output_file(path, content) unless production_environment?

  # Validate file path for security
  unless Jekyll::Minifier::ValidationHelpers.validate_file_path(path)
    Jekyll.logger.warn("Jekyll Minifier:", "Unsafe file path detected, skipping compression: #{path}")
    return # Don't write anything for unsafe paths
  end

  config = Jekyll::Minifier::CompressionConfig.new(@site.config)
  return output_file(path, content) unless config.compress_json?

  compressed_content = Jekyll::Minifier::CompressorFactory.compress_json(content, path)
  output_file(path, compressed_content)
end