jekyll-favicon 0.2.4 → 0.2.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +8 -4
- data/CHANGELOG.md +6 -0
- data/Gemfile.lock +11 -8
- data/README.md +2 -4
- data/jekyll-favicon.gemspec +1 -0
- data/lib/browserconfig.rb +54 -0
- data/lib/hash.rb +12 -0
- data/lib/image.rb +33 -0
- data/lib/jekyll-favicon.rb +4 -0
- data/lib/jekyll/favicon/config/defaults.yml +15 -6
- data/lib/jekyll/favicon/generator.rb +44 -56
- data/lib/jekyll/favicon/hooks.rb +4 -1
- data/lib/jekyll/favicon/icon.rb +31 -41
- data/lib/jekyll/favicon/metadata.rb +4 -11
- data/lib/jekyll/favicon/templates/chrome.html.erb +1 -1
- data/lib/jekyll/favicon/templates/classic.html.erb +3 -3
- data/lib/jekyll/favicon/templates/ie.html.erb +1 -1
- data/lib/jekyll/favicon/templates/safari.html.erb +2 -0
- data/lib/jekyll/favicon/version.rb +1 -1
- data/lib/webmanifest.rb +30 -0
- metadata +26 -4
- data/lib/jekyll/favicon/templates/browserconfig.xml.erb +0 -12
- data/lib/jekyll/favicon/templates/manifest.webmanifest.erb +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0f9e788acfa22c8c2b0142764e25df5af99e5304
|
|
4
|
+
data.tar.gz: 026774aef1aeae4bdc655dc4d664fde79c96234b
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 384b59a8e14e74763c62ff19852965dbb3887b215769458b53d34c5a67aed74acf04e08173ad055bcbccf274823d08b02a25a0eb9aea96e096a4610e49778514
|
|
7
|
+
data.tar.gz: 7a96ad07d6411cb2590d993a3808fc970a356db6f50c02423c42c140f453c64c4d3cc85df874a7cf70399d7b7ff0fa822175a75ef7d575998697666458ccdddd
|
data/.travis.yml
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
sudo: false
|
|
2
2
|
language: ruby
|
|
3
3
|
rvm:
|
|
4
|
-
- 2.
|
|
5
|
-
- 2.
|
|
6
|
-
- 2.
|
|
7
|
-
- 2.
|
|
4
|
+
- 2.6.0
|
|
5
|
+
- 2.5.3
|
|
6
|
+
- 2.4.5
|
|
7
|
+
- 2.3.8
|
|
8
|
+
- 2.2.10
|
|
8
9
|
- 2.1.10
|
|
10
|
+
- 2.1.0
|
|
11
|
+
before_install:
|
|
12
|
+
- if ! [[ `ruby -v | cut -d' ' -f2` > "2.3" ]]; then gem install bundler -v '< 2'; fi;
|
|
9
13
|
addons:
|
|
10
14
|
apt:
|
|
11
15
|
config:
|
data/CHANGELOG.md
CHANGED
|
@@ -6,6 +6,12 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
|
|
|
6
6
|
|
|
7
7
|
## [Unreleased]
|
|
8
8
|
|
|
9
|
+
## [0.2.5] - 2019-01-16
|
|
10
|
+
### Changed
|
|
11
|
+
- Strike GraphicsMagick at Readme because it's compatible a this moment
|
|
12
|
+
### Fixed
|
|
13
|
+
- Skip safari pinned tab when source is not a SVG
|
|
14
|
+
|
|
9
15
|
## [0.2.4] - 2018-10-05
|
|
10
16
|
### Fixed
|
|
11
17
|
- Path for favicon.ico in classic template
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
jekyll-favicon (0.2.
|
|
4
|
+
jekyll-favicon (0.2.5)
|
|
5
5
|
jekyll (~> 3.0)
|
|
6
6
|
mini_magick (~> 4.5)
|
|
7
7
|
|
|
@@ -12,17 +12,17 @@ GEM
|
|
|
12
12
|
public_suffix (>= 2.0.2, < 4.0)
|
|
13
13
|
ast (2.4.0)
|
|
14
14
|
colorator (1.1.0)
|
|
15
|
-
concurrent-ruby (1.
|
|
15
|
+
concurrent-ruby (1.1.4)
|
|
16
16
|
em-websocket (0.5.1)
|
|
17
17
|
eventmachine (>= 0.12.9)
|
|
18
18
|
http_parser.rb (~> 0.6.0)
|
|
19
19
|
eventmachine (1.2.7)
|
|
20
|
-
ffi (1.
|
|
20
|
+
ffi (1.10.0)
|
|
21
21
|
forwardable-extended (2.6.0)
|
|
22
22
|
http_parser.rb (0.6.0)
|
|
23
23
|
i18n (0.9.5)
|
|
24
24
|
concurrent-ruby (~> 1.0)
|
|
25
|
-
jekyll (3.8.
|
|
25
|
+
jekyll (3.8.5)
|
|
26
26
|
addressable (~> 2.4)
|
|
27
27
|
colorator (~> 1.0)
|
|
28
28
|
em-websocket (~> 0.5)
|
|
@@ -40,7 +40,7 @@ GEM
|
|
|
40
40
|
jekyll-watch (2.0.0)
|
|
41
41
|
listen (~> 3.0)
|
|
42
42
|
kramdown (1.17.0)
|
|
43
|
-
liquid (4.0.
|
|
43
|
+
liquid (4.0.1)
|
|
44
44
|
listen (3.0.8)
|
|
45
45
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
46
46
|
rb-inotify (~> 0.9, >= 0.9.7)
|
|
@@ -48,12 +48,14 @@ GEM
|
|
|
48
48
|
mini_magick (4.9.2)
|
|
49
49
|
mini_portile2 (2.3.0)
|
|
50
50
|
minitest (5.11.3)
|
|
51
|
+
minitest-hooks (1.5.0)
|
|
52
|
+
minitest (> 5.3)
|
|
51
53
|
nokogiri (1.8.5)
|
|
52
54
|
mini_portile2 (~> 2.3.0)
|
|
53
55
|
parallel (1.12.1)
|
|
54
56
|
parser (2.5.1.2)
|
|
55
57
|
ast (~> 2.4.0)
|
|
56
|
-
pathutil (0.16.
|
|
58
|
+
pathutil (0.16.2)
|
|
57
59
|
forwardable-extended (~> 2.6)
|
|
58
60
|
powerpack (0.1.2)
|
|
59
61
|
public_suffix (3.0.3)
|
|
@@ -72,7 +74,7 @@ GEM
|
|
|
72
74
|
unicode-display_width (~> 1.0, >= 1.0.1)
|
|
73
75
|
ruby-progressbar (1.10.0)
|
|
74
76
|
safe_yaml (1.0.4)
|
|
75
|
-
sass (3.
|
|
77
|
+
sass (3.7.3)
|
|
76
78
|
sass-listen (~> 4.0.0)
|
|
77
79
|
sass-listen (4.0.0)
|
|
78
80
|
rb-fsevent (~> 0.9, >= 0.9.4)
|
|
@@ -86,9 +88,10 @@ DEPENDENCIES
|
|
|
86
88
|
bundler (~> 1.16)
|
|
87
89
|
jekyll-favicon!
|
|
88
90
|
minitest (~> 5.0)
|
|
91
|
+
minitest-hooks (~> 1.4, >= 1.4.2)
|
|
89
92
|
nokogiri (~> 1.8)
|
|
90
93
|
rake (~> 10.0)
|
|
91
94
|
rubocop (~> 0.54.0, >= 0.54.0)
|
|
92
95
|
|
|
93
96
|
BUNDLED WITH
|
|
94
|
-
1.
|
|
97
|
+
1.17.3
|
data/README.md
CHANGED
|
@@ -9,11 +9,9 @@ This [Jekyll](https://jekyllrb.com) plugin adds:
|
|
|
9
9
|
- a [browser configuration schema](https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/dn320426%28v=vs.85%29)
|
|
10
10
|
- a tag to generate all the corresponding links and metadata needed in the head tag
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
12
|
## Prerequisites
|
|
15
13
|
|
|
16
|
-
Before using this plugin your system must have installed [ImageMagick](http://www.imagemagick.org) (or [GraphicsMagick](http://www.graphicsmagick.org/))
|
|
14
|
+
Before using this plugin your system must have installed [ImageMagick](http://www.imagemagick.org) ~~(or [GraphicsMagick](http://www.graphicsmagick.org/))~~.
|
|
17
15
|
|
|
18
16
|
Check if it is already installed by running:
|
|
19
17
|
|
|
@@ -31,7 +29,7 @@ Delegates (built-in): bzlib freetype jng jpeg ltdl lzma png tiff xml zlib
|
|
|
31
29
|
Add this line to your application's Gemfile:
|
|
32
30
|
|
|
33
31
|
```ruby
|
|
34
|
-
gem 'jekyll-favicon', '~> 0.2.
|
|
32
|
+
gem 'jekyll-favicon', '~> 0.2.5', group: :jekyll_plugins
|
|
35
33
|
```
|
|
36
34
|
|
|
37
35
|
## Usage
|
data/jekyll-favicon.gemspec
CHANGED
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |spec|
|
|
|
26
26
|
|
|
27
27
|
spec.add_development_dependency 'bundler', '~> 1.16'
|
|
28
28
|
spec.add_development_dependency 'minitest', '~> 5.0'
|
|
29
|
+
spec.add_development_dependency 'minitest-hooks', '~> 1.4', '>= 1.4.2'
|
|
29
30
|
spec.add_development_dependency 'nokogiri', '~> 1.8'
|
|
30
31
|
spec.add_development_dependency 'rake', '~> 10.0'
|
|
31
32
|
spec.add_development_dependency 'rubocop', '~> 0.54.0', '>= 0.54.0'
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
require 'rexml/document'
|
|
2
|
+
|
|
3
|
+
# Build browserconfig XML
|
|
4
|
+
class Browserconfig
|
|
5
|
+
attr_accessor :document
|
|
6
|
+
|
|
7
|
+
def load(source_path, config, prefix)
|
|
8
|
+
@document = if File.exist? source_path
|
|
9
|
+
REXML::Document.new File.read source_path
|
|
10
|
+
else
|
|
11
|
+
REXML::Document.new
|
|
12
|
+
end
|
|
13
|
+
add_browserconfig_schema
|
|
14
|
+
add_browserconfig_elements config, prefix
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def add(path, element, attributes = {}, text = nil)
|
|
18
|
+
parent = @document.elements[path]
|
|
19
|
+
parent.elements[element] = REXML::Element.new element
|
|
20
|
+
attributes.each do |key, value|
|
|
21
|
+
parent.elements[element].add_attribute key, value
|
|
22
|
+
end
|
|
23
|
+
parent.add_text text if text
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def dump
|
|
27
|
+
output = ''
|
|
28
|
+
formatter = REXML::Formatters::Pretty.new 2
|
|
29
|
+
formatter.compact = true
|
|
30
|
+
formatter.write @document, output
|
|
31
|
+
output
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
private
|
|
35
|
+
|
|
36
|
+
def add_browserconfig_schema
|
|
37
|
+
browserconfig = @document.elements['browserconfig']
|
|
38
|
+
browserconfig ||= @document.elements.add 'browserconfig'
|
|
39
|
+
msapplication = browserconfig.elements['msapplication']
|
|
40
|
+
msapplication ||= browserconfig.elements.add 'msapplication'
|
|
41
|
+
tile = msapplication.elements['tile']
|
|
42
|
+
tile || msapplication.elements.add('tile')
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
def add_browserconfig_elements(config, prefix)
|
|
46
|
+
path = 'browserconfig/msapplication/tile'
|
|
47
|
+
pathname = Pathname.new prefix
|
|
48
|
+
add path, 'square70x70logo', 'src' => pathname.join('favicon-128x128.png')
|
|
49
|
+
add path, 'square150x150logo', 'src' => pathname.join('favicon-270x270.png')
|
|
50
|
+
add path, 'wide310x150logo', 'src' => pathname.join('favicon-558x270.png')
|
|
51
|
+
add path, 'square310x310logo', 'src' => pathname.join('favicon-558x558.png')
|
|
52
|
+
add path, 'TileColor', {}, config['tile-color']
|
|
53
|
+
end
|
|
54
|
+
end
|
data/lib/hash.rb
ADDED
data/lib/image.rb
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
# Build browserconfig XML
|
|
2
|
+
module Image
|
|
3
|
+
def self.convert(source, output, options = {})
|
|
4
|
+
MiniMagick::Tool::Convert.new do |convert|
|
|
5
|
+
options_for convert, options
|
|
6
|
+
convert << source
|
|
7
|
+
convert << output
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
def self.options_for(convert, options)
|
|
12
|
+
convert.flatten
|
|
13
|
+
basic_options convert, options
|
|
14
|
+
resize_options convert, options
|
|
15
|
+
odd_options convert, options
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.basic_options(convert, options)
|
|
19
|
+
convert.background options[:background] if options[:background]
|
|
20
|
+
convert.define options[:define] if options[:define]
|
|
21
|
+
convert.density options[:density] if options[:density]
|
|
22
|
+
convert.alpha options[:alpha] if options[:alpha]
|
|
23
|
+
end
|
|
24
|
+
|
|
25
|
+
def self.resize_options(convert, options)
|
|
26
|
+
convert.resize options[:resize] if options[:resize]
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.odd_options(convert, options)
|
|
30
|
+
convert.gravity 'center' if options[:odd]
|
|
31
|
+
convert.extent options[:resize] if options[:odd] && options[:resize]
|
|
32
|
+
end
|
|
33
|
+
end
|
data/lib/jekyll-favicon.rb
CHANGED
|
@@ -3,6 +3,10 @@
|
|
|
3
3
|
require 'jekyll'
|
|
4
4
|
require 'mini_magick'
|
|
5
5
|
require_relative 'string'
|
|
6
|
+
require_relative 'hash'
|
|
7
|
+
require_relative 'browserconfig'
|
|
8
|
+
require_relative 'webmanifest'
|
|
9
|
+
require_relative 'image'
|
|
6
10
|
require_relative 'jekyll/favicon'
|
|
7
11
|
require_relative 'jekyll/favicon/version'
|
|
8
12
|
require_relative 'jekyll/favicon/hooks'
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
favicon:
|
|
2
2
|
source: favicon.svg
|
|
3
3
|
path: /assets/images
|
|
4
|
+
background: white
|
|
4
5
|
apple-touch-icon:
|
|
5
6
|
background: white
|
|
6
7
|
sizes:
|
|
@@ -19,13 +20,21 @@ favicon:
|
|
|
19
20
|
- 270x270
|
|
20
21
|
- 558x270
|
|
21
22
|
- 558x558
|
|
22
|
-
browserconfig
|
|
23
|
+
browserconfig:
|
|
24
|
+
source: browserconfig.xml
|
|
25
|
+
target: browserconfig.xml
|
|
23
26
|
chrome:
|
|
24
27
|
sizes:
|
|
25
28
|
- 192x192
|
|
26
29
|
- 96x96
|
|
27
30
|
- 48x48
|
|
28
|
-
manifest
|
|
31
|
+
manifest:
|
|
32
|
+
source: manifest.webmanifest
|
|
33
|
+
target: manifest.webmanifest
|
|
34
|
+
sizes:
|
|
35
|
+
- 192x192
|
|
36
|
+
- 96x96
|
|
37
|
+
- 48x48
|
|
29
38
|
classic:
|
|
30
39
|
sizes:
|
|
31
40
|
- 16x16
|
|
@@ -38,8 +47,8 @@ favicon:
|
|
|
38
47
|
png:
|
|
39
48
|
dimensions: 558x558
|
|
40
49
|
ico:
|
|
41
|
-
|
|
50
|
+
target: favicon.ico
|
|
42
51
|
sizes:
|
|
43
|
-
-
|
|
44
|
-
-
|
|
45
|
-
-
|
|
52
|
+
- 48x48
|
|
53
|
+
- 32x32
|
|
54
|
+
- 16x16
|
|
@@ -8,86 +8,74 @@ module Jekyll
|
|
|
8
8
|
|
|
9
9
|
def generate(site)
|
|
10
10
|
@site = site
|
|
11
|
-
if File.
|
|
12
|
-
@template = favicon_tempfile
|
|
13
|
-
|
|
11
|
+
if File.file? source_path Favicon.config['source']
|
|
12
|
+
@template = favicon_tempfile source_path Favicon.config['source']
|
|
13
|
+
generate_icons && generate_metadata
|
|
14
14
|
else
|
|
15
|
-
Jekyll.logger.warn 'Jekyll::Favicon: Missing' \
|
|
16
|
-
"
|
|
17
|
-
'
|
|
15
|
+
Jekyll.logger.warn 'Jekyll::Favicon: Missing ' \
|
|
16
|
+
"#{Favicon.config['source']}, not generating " \
|
|
17
|
+
'favicons.'
|
|
18
18
|
end
|
|
19
19
|
end
|
|
20
20
|
|
|
21
21
|
def clean
|
|
22
|
-
return unless @
|
|
22
|
+
return unless @template
|
|
23
23
|
@template.close
|
|
24
24
|
@template.unlink
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
private
|
|
28
28
|
|
|
29
|
-
def
|
|
30
|
-
|
|
31
|
-
generate_png_from @template.path, prefix
|
|
32
|
-
if File.extname(favicon_source) == '.svg'
|
|
33
|
-
generate_svg_from favicon_source, prefix,
|
|
34
|
-
'safari-pinned-tab.svg'
|
|
35
|
-
end
|
|
36
|
-
generate_metadata_from 'browserconfig.xml'
|
|
37
|
-
generate_metadata_from 'manifest.webmanifest'
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def generate_ico_from(source)
|
|
41
|
-
ico_favicon = Icon.new(@site, '', 'favicon.ico', source)
|
|
42
|
-
@site.static_files << ico_favicon
|
|
29
|
+
def source_path(path = nil)
|
|
30
|
+
File.join(*[@site.source, path].compact)
|
|
43
31
|
end
|
|
44
32
|
|
|
45
|
-
def
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
33
|
+
def favicon_tempfile(source)
|
|
34
|
+
tempfile = Tempfile.new(['favicon-template', '.png'])
|
|
35
|
+
options = { background: 'none' }
|
|
36
|
+
if source.svg?
|
|
37
|
+
options[:density] = Favicon.config['svg']['density']
|
|
38
|
+
options[:resize] = Favicon.config['svg']['dimensions']
|
|
39
|
+
elsif source.png?
|
|
40
|
+
options[:resize] = Favicon.config['png']['dimensions']
|
|
51
41
|
end
|
|
42
|
+
Image.convert source, tempfile.path, options
|
|
43
|
+
tempfile
|
|
52
44
|
end
|
|
53
45
|
|
|
54
|
-
def
|
|
55
|
-
|
|
56
|
-
@site.
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
def generate_svg_from(source, prefix, name)
|
|
60
|
-
svg_favicon = Icon.new(@site, prefix, name, source)
|
|
61
|
-
@site.static_files << svg_favicon
|
|
46
|
+
def generate_icons
|
|
47
|
+
@site.static_files.push ico_icon
|
|
48
|
+
@site.static_files.push(*png_icons)
|
|
62
49
|
end
|
|
63
50
|
|
|
64
|
-
def
|
|
65
|
-
|
|
51
|
+
def ico_icon
|
|
52
|
+
target = Favicon.config['ico']['target']
|
|
53
|
+
Icon.new @site, Favicon.config['source'], @template.path, target
|
|
66
54
|
end
|
|
67
55
|
|
|
68
|
-
def
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
56
|
+
def png_icons
|
|
57
|
+
Favicon.config.deep_find('sizes').uniq.collect do |size|
|
|
58
|
+
target = File.join Favicon.config['path'], "favicon-#{size}.png"
|
|
59
|
+
Icon.new @site, Favicon.config['source'], @template.path, target
|
|
60
|
+
end
|
|
72
61
|
end
|
|
73
62
|
|
|
74
|
-
def
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
end
|
|
63
|
+
def generate_metadata
|
|
64
|
+
@site.pages.push metadata Browserconfig.new,
|
|
65
|
+
Favicon.config['ie']['browserconfig']
|
|
66
|
+
@site.pages.push metadata Webmanifest.new,
|
|
67
|
+
Favicon.config['chrome']['manifest']
|
|
80
68
|
end
|
|
81
69
|
|
|
82
|
-
def
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
70
|
+
def metadata(document, config)
|
|
71
|
+
page = Metadata.new @site, @site.source,
|
|
72
|
+
File.dirname(config['target']),
|
|
73
|
+
File.basename(config['target'])
|
|
74
|
+
favicon_path = File.join (@site.baseurl || ''), Favicon.config['path']
|
|
75
|
+
document.load source_path(config['source']), config, favicon_path
|
|
76
|
+
page.content = document.dump
|
|
77
|
+
page.data = { 'layout' => nil }
|
|
78
|
+
page
|
|
91
79
|
end
|
|
92
80
|
end
|
|
93
81
|
end
|
data/lib/jekyll/favicon/hooks.rb
CHANGED
|
@@ -1,6 +1,9 @@
|
|
|
1
1
|
Jekyll::Hooks.register :site, :after_init do |site|
|
|
2
2
|
Jekyll::Favicon.merge site.config['favicon']
|
|
3
|
-
|
|
3
|
+
favicon_config = Jekyll::Favicon.config
|
|
4
|
+
site.config['exclude'] << favicon_config['source']
|
|
5
|
+
site.config['exclude'] << favicon_config['chrome']['manifest']['source']
|
|
6
|
+
site.config['exclude'] << favicon_config['ie']['browserconfig']['source']
|
|
4
7
|
end
|
|
5
8
|
|
|
6
9
|
Jekyll::Hooks.register :site, :post_write do |site|
|
data/lib/jekyll/favicon/icon.rb
CHANGED
|
@@ -2,44 +2,52 @@ module Jekyll
|
|
|
2
2
|
module Favicon
|
|
3
3
|
# Extended static file that generates multpiple favicons
|
|
4
4
|
class Icon < Jekyll::StaticFile
|
|
5
|
-
attr_accessor :
|
|
5
|
+
attr_accessor :replica
|
|
6
|
+
attr_accessor :target
|
|
6
7
|
|
|
7
|
-
def initialize(site,
|
|
8
|
+
def initialize(site, source, replica, target, collection = nil)
|
|
8
9
|
@site = site
|
|
9
10
|
@base = @site.source
|
|
10
|
-
@dir =
|
|
11
|
-
@name =
|
|
12
|
-
@
|
|
11
|
+
@dir = File.dirname source
|
|
12
|
+
@name = File.basename source
|
|
13
|
+
@replica = replica
|
|
14
|
+
@target = target
|
|
13
15
|
@collection = collection
|
|
14
|
-
@relative_path = File.join(*[@dir, name].compact)
|
|
15
|
-
@extname = File.extname(
|
|
16
|
-
@data = { 'name' =>
|
|
16
|
+
@relative_path = File.join(*[@dir, @name].compact)
|
|
17
|
+
@extname = File.extname(target)
|
|
18
|
+
@data = { 'name' => File.basename(target), 'layout' => nil }
|
|
17
19
|
end
|
|
18
20
|
|
|
19
|
-
def
|
|
20
|
-
|
|
21
|
+
def destination(dest)
|
|
22
|
+
basename = File.basename(@target)
|
|
23
|
+
@site.in_dest_dir(*[dest, destination_rel_dir, basename].compact)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
def destination_rel_dir
|
|
27
|
+
File.dirname @target
|
|
21
28
|
end
|
|
22
29
|
|
|
23
30
|
private
|
|
24
31
|
|
|
25
32
|
def copy_file(dest_path)
|
|
26
33
|
case @extname
|
|
27
|
-
when '.svg' then FileUtils.cp
|
|
28
|
-
when '.ico' then convert
|
|
29
|
-
when '.png' then convert
|
|
34
|
+
when '.svg' then FileUtils.cp @replica, dest_path
|
|
35
|
+
when '.ico' then Image.convert @replica, dest_path, ico_options
|
|
36
|
+
when '.png' then Image.convert @replica, dest_path, png_options
|
|
30
37
|
else Jekyll.logger.warn "Jekyll::Favicon: Can't generate" \
|
|
31
38
|
" #{dest_path}, extension not supported supported."
|
|
32
39
|
end
|
|
33
40
|
end
|
|
34
41
|
|
|
35
42
|
def dimensions
|
|
36
|
-
|
|
43
|
+
basename = File.basename(@target)
|
|
44
|
+
basename[/favicon-(\d+x\d+).png/, 1].split('x').collect(&:to_i)
|
|
37
45
|
end
|
|
38
46
|
|
|
39
47
|
def png_options
|
|
40
48
|
options = {}
|
|
41
|
-
options[:background] = Favicon.config['background']
|
|
42
49
|
w, h = dimensions
|
|
50
|
+
options[:background] = background_for dimensions
|
|
43
51
|
options[:odd] = w != h
|
|
44
52
|
options[:resize] = dimensions.join('x')
|
|
45
53
|
options
|
|
@@ -47,37 +55,19 @@ module Jekyll
|
|
|
47
55
|
|
|
48
56
|
def ico_options
|
|
49
57
|
options = {}
|
|
50
|
-
|
|
51
|
-
|
|
58
|
+
sizes = Favicon.config['ico']['sizes']
|
|
59
|
+
options[:background] = background_for sizes.first
|
|
60
|
+
options[:alpha] = 'off'
|
|
61
|
+
options[:resize] = sizes.first
|
|
62
|
+
ico_sizes = sizes.collect { |size| size.split('x').first }.join ','
|
|
52
63
|
options[:define] = "icon:auto-resize=#{ico_sizes}"
|
|
53
64
|
options
|
|
54
65
|
end
|
|
55
66
|
|
|
56
|
-
def convert(input, output, options = {})
|
|
57
|
-
MiniMagick::Tool::Convert.new do |convert|
|
|
58
|
-
options_for convert, options
|
|
59
|
-
convert << input
|
|
60
|
-
convert << output
|
|
61
|
-
end
|
|
62
|
-
end
|
|
63
|
-
|
|
64
|
-
def options_for(convert, options)
|
|
65
|
-
convert.flatten
|
|
66
|
-
convert.background background_for options[:resize]
|
|
67
|
-
convert.define options[:define] if options[:define]
|
|
68
|
-
return unless options[:resize]
|
|
69
|
-
convert.resize options[:resize]
|
|
70
|
-
return unless options[:odd]
|
|
71
|
-
convert.gravity 'center'
|
|
72
|
-
convert.extent options[:resize]
|
|
73
|
-
end
|
|
74
|
-
|
|
75
67
|
def background_for(size)
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
'none'
|
|
80
|
-
end
|
|
68
|
+
category = Favicon.config['apple-touch-icon']
|
|
69
|
+
return category['background'] if category['sizes'].include? size
|
|
70
|
+
Favicon.config['background']
|
|
81
71
|
end
|
|
82
72
|
end
|
|
83
73
|
end
|
|
@@ -2,18 +2,11 @@ module Jekyll
|
|
|
2
2
|
module Favicon
|
|
3
3
|
# Extended Page that generate files from ERB templates
|
|
4
4
|
class Metadata < Jekyll::Page
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
@
|
|
8
|
-
@dir = dir
|
|
9
|
-
@name = name
|
|
10
|
-
|
|
11
|
-
process @name
|
|
12
|
-
prepend_path = @site.baseurl || ''
|
|
13
|
-
template = File.read File.join Favicon.templates, "#{name}.erb"
|
|
14
|
-
self.content = ERB.new(template, nil, '-').result binding
|
|
15
|
-
self.data = { 'name' => name, 'layout' => nil }
|
|
5
|
+
# rubocop:disable Naming/MemoizedInstanceVariableName
|
|
6
|
+
def read_yaml(*)
|
|
7
|
+
@data ||= {}
|
|
16
8
|
end
|
|
9
|
+
# rubocop:enable Naming/MemoizedInstanceVariableName
|
|
17
10
|
end
|
|
18
11
|
end
|
|
19
12
|
end
|
|
@@ -2,4 +2,4 @@
|
|
|
2
2
|
<%- Favicon.config['chrome']['sizes'].each do |size| -%>
|
|
3
3
|
<link rel="icon" sizes="<%= size %>" href="<%= File.join prepend_path, Favicon.config['path'], "favicon-#{size}.png" %>">
|
|
4
4
|
<%- end -%>
|
|
5
|
-
<link rel="manifest" href="<%= File.join prepend_path, Favicon.config['chrome']['manifest
|
|
5
|
+
<link rel="manifest" href="<%= File.join prepend_path, Favicon.config['chrome']['manifest']['target'] %>">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
<!-- Classic -->
|
|
2
|
-
<%- favicon_ico_path = File.join prepend_path, Favicon.config['ico']['
|
|
3
|
-
<link rel="shortcut icon" href="<%=
|
|
4
|
-
<link rel="icon" sizes="<%= Favicon.config['ico']['sizes'].
|
|
2
|
+
<%- favicon_ico_path = File.join prepend_path, Favicon.config['ico']['target'] -%>
|
|
3
|
+
<link rel="shortcut icon" href="<%= favicon_ico_path %>">
|
|
4
|
+
<link rel="icon" sizes="<%= Favicon.config['ico']['sizes'].join ' ' %>" href="<%= favicon_ico_path %>">
|
|
5
5
|
<%- favicon_path = File.join prepend_path, Favicon.config['path'] -%>
|
|
6
6
|
<%- Favicon.config['classic']['sizes'].each do |size| -%>
|
|
7
7
|
<link rel="icon" sizes="<%= size %>" type="image/png" href="<%= File.join favicon_path, "favicon-#{size}.png" %>">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
<!-- IE -->
|
|
2
2
|
<meta name="msapplication-TileColor" content="<%= Favicon.config['ie']['tile-color'] %>">
|
|
3
3
|
<meta name="msapplication-TileImage" content="<%= File.join prepend_path, Favicon.config['path'], 'favicon-144x144.png' %>">
|
|
4
|
-
<meta name=
|
|
4
|
+
<meta name='msapplication-config' content="<%= File.join prepend_path, Favicon.config['ie']['browserconfig']['target'] %>">
|
|
@@ -3,4 +3,6 @@
|
|
|
3
3
|
<%- Favicon.config['apple-touch-icon']['sizes'].each do |size| -%>
|
|
4
4
|
<link rel="apple-touch-icon" sizes="<%= size %>" href="<%= File.join favicon_path, "favicon-#{size}.png" %>">
|
|
5
5
|
<%- end -%>
|
|
6
|
+
<% if Favicon.config['source'].svg? %>
|
|
6
7
|
<link rel="mask-icon" color="<%= Favicon.config['safari-pinned-tab']['mask-icon-color'] %>" href="<%= File.join favicon_path, 'safari-pinned-tab.svg' %>">
|
|
8
|
+
<% end %>
|
data/lib/webmanifest.rb
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Build Webmanifest JSON
|
|
2
|
+
class Webmanifest
|
|
3
|
+
attr_accessor :document
|
|
4
|
+
|
|
5
|
+
def load(source_path, config, prefix)
|
|
6
|
+
@document = if File.exist? source_path
|
|
7
|
+
JSON.parse File.read source_path
|
|
8
|
+
else
|
|
9
|
+
{}
|
|
10
|
+
end
|
|
11
|
+
add_webmanifest_elements config, prefix
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def dump
|
|
15
|
+
JSON.pretty_generate document
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
private
|
|
19
|
+
|
|
20
|
+
def add_webmanifest_elements(config, prefix)
|
|
21
|
+
icons = config['sizes'].collect do |size|
|
|
22
|
+
{
|
|
23
|
+
src: File.join(prefix, "favicon-#{size}.png"),
|
|
24
|
+
type: 'png',
|
|
25
|
+
sizes: size
|
|
26
|
+
}
|
|
27
|
+
end
|
|
28
|
+
@document = Jekyll::Utils.deep_merge_hashes @document, icons: icons
|
|
29
|
+
end
|
|
30
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: jekyll-favicon
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.2.
|
|
4
|
+
version: 0.2.5
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Alvaro Faundez
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2019-01-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: bundler
|
|
@@ -38,6 +38,26 @@ dependencies:
|
|
|
38
38
|
- - "~>"
|
|
39
39
|
- !ruby/object:Gem::Version
|
|
40
40
|
version: '5.0'
|
|
41
|
+
- !ruby/object:Gem::Dependency
|
|
42
|
+
name: minitest-hooks
|
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
|
44
|
+
requirements:
|
|
45
|
+
- - "~>"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '1.4'
|
|
48
|
+
- - ">="
|
|
49
|
+
- !ruby/object:Gem::Version
|
|
50
|
+
version: 1.4.2
|
|
51
|
+
type: :development
|
|
52
|
+
prerelease: false
|
|
53
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
54
|
+
requirements:
|
|
55
|
+
- - "~>"
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '1.4'
|
|
58
|
+
- - ">="
|
|
59
|
+
- !ruby/object:Gem::Version
|
|
60
|
+
version: 1.4.2
|
|
41
61
|
- !ruby/object:Gem::Dependency
|
|
42
62
|
name: nokogiri
|
|
43
63
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -139,6 +159,9 @@ files:
|
|
|
139
159
|
- bin/console
|
|
140
160
|
- bin/setup
|
|
141
161
|
- jekyll-favicon.gemspec
|
|
162
|
+
- lib/browserconfig.rb
|
|
163
|
+
- lib/hash.rb
|
|
164
|
+
- lib/image.rb
|
|
142
165
|
- lib/jekyll-favicon.rb
|
|
143
166
|
- lib/jekyll/favicon.rb
|
|
144
167
|
- lib/jekyll/favicon/config/defaults.yml
|
|
@@ -147,14 +170,13 @@ files:
|
|
|
147
170
|
- lib/jekyll/favicon/icon.rb
|
|
148
171
|
- lib/jekyll/favicon/metadata.rb
|
|
149
172
|
- lib/jekyll/favicon/tag.rb
|
|
150
|
-
- lib/jekyll/favicon/templates/browserconfig.xml.erb
|
|
151
173
|
- lib/jekyll/favicon/templates/chrome.html.erb
|
|
152
174
|
- lib/jekyll/favicon/templates/classic.html.erb
|
|
153
175
|
- lib/jekyll/favicon/templates/ie.html.erb
|
|
154
|
-
- lib/jekyll/favicon/templates/manifest.webmanifest.erb
|
|
155
176
|
- lib/jekyll/favicon/templates/safari.html.erb
|
|
156
177
|
- lib/jekyll/favicon/version.rb
|
|
157
178
|
- lib/string.rb
|
|
179
|
+
- lib/webmanifest.rb
|
|
158
180
|
homepage: https://github.com/afaundez/jekyll-favicon
|
|
159
181
|
licenses:
|
|
160
182
|
- MIT
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
<browserconfig>
|
|
2
|
-
<msapplication>
|
|
3
|
-
<tile>
|
|
4
|
-
<%- favicon_path = File.join prepend_path, Favicon.config['path'] -%>
|
|
5
|
-
<square310x310logo src="<%= File.join favicon_path, 'favicon-558x558.png' %>" />
|
|
6
|
-
<wide310x150logo src="<%= File.join favicon_path, 'favicon-558x270.png' %>" />
|
|
7
|
-
<square150x150logo src="<%= File.join favicon_path, 'favicon-270x270.png' %>" />
|
|
8
|
-
<square70x70logo src="<%= File.join favicon_path, 'favicon-128x128.png' %>" />
|
|
9
|
-
<TileColor><%= Favicon.config['ie']['tile-color'] %></TileColor>
|
|
10
|
-
</tile>
|
|
11
|
-
</msapplication>
|
|
12
|
-
</browserconfig>
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
<%= JSON.pretty_generate icons: Favicon.config['chrome']['sizes'].collect{|size| {src: File.join(prepend_path, Favicon.config['path'], "favicon-#{size}.png"), type: 'png', sizes: size}} %>
|