lib/jekyll/favicon/generator.rb in jekyll-favicon-0.2.4 vs lib/jekyll/favicon/generator.rb in jekyll-favicon-0.2.5
- old
+ new
@@ -6,89 +6,77 @@
attr_accessor :template
def generate(site)
@site = site
- if File.exist? favicon_source
- @template = favicon_tempfile
- generate_files Favicon.config['path']
+ if File.file? source_path Favicon.config['source']
+ @template = favicon_tempfile source_path Favicon.config['source']
+ generate_icons && generate_metadata
else
- Jekyll.logger.warn 'Jekyll::Favicon: Missing' \
- " #{Favicon.config['source']}, not generating" \
- ' favicons.'
+ Jekyll.logger.warn 'Jekyll::Favicon: Missing ' \
+ "#{Favicon.config['source']}, not generating " \
+ 'favicons.'
end
end
def clean
- return unless @tempfile
+ return unless @template
@template.close
@template.unlink
end
private
- def generate_files(prefix)
- generate_ico_from @template.path
- generate_png_from @template.path, prefix
- if File.extname(favicon_source) == '.svg'
- generate_svg_from favicon_source, prefix,
- 'safari-pinned-tab.svg'
- end
- generate_metadata_from 'browserconfig.xml'
- generate_metadata_from 'manifest.webmanifest'
+ def source_path(path = nil)
+ File.join(*[@site.source, path].compact)
end
- def generate_ico_from(source)
- ico_favicon = Icon.new(@site, '', 'favicon.ico', source)
- @site.static_files << ico_favicon
- end
-
- def generate_png_from(source, prefix)
- ['classic', 'ie', 'chrome', 'apple-touch-icon'].each do |template|
- Favicon.config[template]['sizes'].each do |size|
- png_favicon = Icon.new(@site, prefix, "favicon-#{size}.png", source)
- @site.static_files << png_favicon
- end
+ def favicon_tempfile(source)
+ tempfile = Tempfile.new(['favicon-template', '.png'])
+ options = { background: 'none' }
+ if source.svg?
+ options[:density] = Favicon.config['svg']['density']
+ options[:resize] = Favicon.config['svg']['dimensions']
+ elsif source.png?
+ options[:resize] = Favicon.config['png']['dimensions']
end
+ Image.convert source, tempfile.path, options
+ tempfile
end
- def generate_metadata_from(template)
- metadata_page = Metadata.new(@site, @site.source, '', template)
- @site.pages << metadata_page
+ def generate_icons
+ @site.static_files.push ico_icon
+ @site.static_files.push(*png_icons)
end
- def generate_svg_from(source, prefix, name)
- svg_favicon = Icon.new(@site, prefix, name, source)
- @site.static_files << svg_favicon
+ def ico_icon
+ target = Favicon.config['ico']['target']
+ Icon.new @site, Favicon.config['source'], @template.path, target
end
- def favicon_source
- File.join(*[@site.source, Favicon.config['source']].compact)
+ def png_icons
+ Favicon.config.deep_find('sizes').uniq.collect do |size|
+ target = File.join Favicon.config['path'], "favicon-#{size}.png"
+ Icon.new @site, Favicon.config['source'], @template.path, target
+ end
end
- def favicon_tempfile
- tempfile = Tempfile.new(['favicon_template', '.png'])
- convert favicon_source, tempfile.path, Favicon.config
- tempfile
+ def generate_metadata
+ @site.pages.push metadata Browserconfig.new,
+ Favicon.config['ie']['browserconfig']
+ @site.pages.push metadata Webmanifest.new,
+ Favicon.config['chrome']['manifest']
end
- def convert(source, output, options = {})
- MiniMagick::Tool::Convert.new do |convert|
- options_for convert, source, options
- convert << favicon_source
- convert << output
- end
- end
-
- def options_for(convert, source, options)
- convert.flatten
- convert.background 'none'
- if source.svg?
- convert.density options['svg']['density']
- convert.resize options['svg']['dimensions']
- elsif source.png?
- convert.resize options['png']['dimensions']
- end
+ def metadata(document, config)
+ page = Metadata.new @site, @site.source,
+ File.dirname(config['target']),
+ File.basename(config['target'])
+ favicon_path = File.join (@site.baseurl || ''), Favicon.config['path']
+ document.load source_path(config['source']), config, favicon_path
+ page.content = document.dump
+ page.data = { 'layout' => nil }
+ page
end
end
end
end