mirror of
https://github.com/samsonjs/samhuri.net.git
synced 2026-03-25 09:05:47 +00:00
54 lines
1.1 KiB
Ruby
Executable file
54 lines
1.1 KiB
Ruby
Executable file
#!/usr/bin/env ruby -w
|
|
|
|
require 'rubygems'
|
|
require 'bundler/setup'
|
|
require 'nokogiri'
|
|
require 'css_parser'
|
|
|
|
# Styles are so small, inline them all.
|
|
|
|
def main
|
|
root_dir = ARGV.shift
|
|
CSSInliner.new(root_dir).inline_all_css
|
|
end
|
|
|
|
class CSSInliner
|
|
|
|
def initialize(root_dir)
|
|
@root_dir = root_dir
|
|
end
|
|
|
|
def inline_all_css
|
|
Dir[File.join(@root_dir, '**/*.html')].each do |html_path|
|
|
next if html_path =~ /\/Chalk\/|\/tweets\//
|
|
inline_css(html_path)
|
|
end
|
|
end
|
|
|
|
def inline_css(html_path)
|
|
html = File.read(html_path)
|
|
doc = Nokogiri::HTML.parse(html)
|
|
css_parser = CssParser::Parser.new
|
|
|
|
doc.css('link').each do |link|
|
|
if link['rel'] == 'stylesheet'
|
|
path = File.join(@root_dir, link['href'])
|
|
css = File.read(path)
|
|
css_parser.add_block!(css)
|
|
|
|
style_node = Nokogiri::HTML.parse("
|
|
<style>
|
|
#{css}
|
|
</style>
|
|
").css('style')
|
|
|
|
link.replace(style_node)
|
|
end
|
|
end
|
|
|
|
File.open(html_path, 'w') { |f| f.puts(doc.to_html) }
|
|
end
|
|
|
|
end
|
|
|
|
main if $0 == __FILE__
|