jekyll-favicon 0.2.7 → 1.0.0.pre.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.devcontainer/Dockerfile +22 -0
- data/.devcontainer/devcontainer.json +42 -0
- data/.github/ISSUE_TEMPLATE/bug_report.md +10 -13
- data/.github/PULL_REQUEST_TEMPLATE.md +11 -9
- data/.github/workflows/gem-push.yml +40 -0
- data/.github/workflows/test.yml +38 -0
- data/.gitignore +4 -0
- data/.reek.yml +25 -0
- data/.vscode/launch.json +16 -0
- data/.vscode/settings.json +7 -0
- data/.vscode/tasks.json +15 -0
- data/CHANGELOG.md +38 -0
- data/Gemfile +3 -1
- data/README.md +77 -22
- data/Rakefile +9 -7
- data/bin/console +1 -0
- data/bin/debug +22 -0
- data/config/jekyll/favicon.yml +115 -0
- data/config/jekyll/favicon/static_file.yml +3 -0
- data/config/jekyll/favicon/static_file/convertible.yml +41 -0
- data/config/jekyll/favicon/static_file/mutable.yml +22 -0
- data/config/jekyll/favicon/static_file/referenceable.yml +15 -0
- data/config/jekyll/favicon/static_file/sourceable.yml +3 -0
- data/config/jekyll/favicon/static_file/taggable.yml +22 -0
- data/jekyll-favicon.gemspec +24 -24
- data/lib/jekyll-favicon.rb +7 -16
- data/lib/jekyll/favicon.rb +19 -16
- data/lib/jekyll/favicon/configuration.rb +73 -0
- data/lib/jekyll/favicon/configuration/defaults.rb +49 -0
- data/lib/jekyll/favicon/generator.rb +10 -84
- data/lib/jekyll/favicon/hooks.rb +12 -10
- data/lib/jekyll/favicon/static_data_file.rb +17 -0
- data/lib/jekyll/favicon/static_file.rb +97 -0
- data/lib/jekyll/favicon/static_file/convertible.rb +129 -0
- data/lib/jekyll/favicon/static_file/mutable.rb +81 -0
- data/lib/jekyll/favicon/static_file/referenceable.rb +22 -0
- data/lib/jekyll/favicon/static_file/sourceable.rb +73 -0
- data/lib/jekyll/favicon/static_file/taggable.rb +53 -0
- data/lib/jekyll/favicon/static_graphic_file.rb +21 -0
- data/lib/jekyll/favicon/tag.rb +14 -17
- data/lib/jekyll/favicon/utils.rb +48 -0
- data/lib/jekyll/favicon/utils/configuration/compact.rb +58 -0
- data/lib/jekyll/favicon/utils/configuration/merge.rb +70 -0
- data/lib/jekyll/favicon/utils/configuration/patch.rb +49 -0
- data/lib/jekyll/favicon/utils/convert.rb +39 -0
- data/lib/jekyll/favicon/utils/tag.rb +70 -0
- data/lib/jekyll/favicon/version.rb +3 -1
- metadata +69 -67
- data/.rubocop.yml +0 -5
- data/.ruby-version +0 -1
- data/.travis.yml +0 -21
- data/Gemfile.lock +0 -97
- data/lib/browserconfig.rb +0 -54
- data/lib/hash.rb +0 -12
- data/lib/image.rb +0 -33
- data/lib/jekyll/favicon/config/defaults.yml +0 -54
- data/lib/jekyll/favicon/icon.rb +0 -73
- data/lib/jekyll/favicon/metadata.rb +0 -12
- data/lib/jekyll/favicon/templates/chrome.html.erb +0 -5
- data/lib/jekyll/favicon/templates/classic.html.erb +0 -8
- data/lib/jekyll/favicon/templates/ie.html.erb +0 -4
- data/lib/jekyll/favicon/templates/safari.html.erb +0 -8
- data/lib/string.rb +0 -14
- data/lib/webmanifest.rb +0 -30
data/Rakefile
CHANGED
@@ -1,10 +1,12 @@
|
|
1
|
-
|
2
|
-
require 'rake/testtask'
|
1
|
+
# frozen_string_literal: true
|
3
2
|
|
4
|
-
|
5
|
-
t.libs << 'test'
|
6
|
-
t.libs << 'lib'
|
7
|
-
t.test_files = FileList['test/**/*_test.rb']
|
8
|
-
end
|
3
|
+
require "rake/testtask"
|
9
4
|
|
5
|
+
desc "run tests"
|
10
6
|
task default: :test
|
7
|
+
|
8
|
+
Rake::TestTask.new do |t|
|
9
|
+
t.libs << ["test", "test/spec", "test/unit"]
|
10
|
+
t.test_files = FileList["test/**/*_spec.rb", "test/**/test_*.rb"]
|
11
|
+
t.warning = false
|
12
|
+
end
|
data/bin/console
CHANGED
data/bin/debug
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
$:.unshift(File.expand_path("../../lib", __FILE__))
|
4
|
+
|
5
|
+
require "pathname"
|
6
|
+
require "tmpdir"
|
7
|
+
require "jekyll"
|
8
|
+
require "jekyll-favicon"
|
9
|
+
|
10
|
+
GEM_ROOT = Pathname.new "/workspaces/jekyll-favicon"
|
11
|
+
|
12
|
+
Dir.mktmpdir do |source|
|
13
|
+
%w[index.html favicon.svg].each do |basename|
|
14
|
+
template = GEM_ROOT.join "test/fixtures", basename
|
15
|
+
target = File.join source, basename
|
16
|
+
FileUtils.cp template, target
|
17
|
+
end
|
18
|
+
destination = File.join source, "_site"
|
19
|
+
options = {source: source, destination: destination}
|
20
|
+
Jekyll::Commands::Build.process options
|
21
|
+
Jekyll::Commands::Serve.process options
|
22
|
+
end
|
@@ -0,0 +1,115 @@
|
|
1
|
+
---
|
2
|
+
source:
|
3
|
+
name: favicon.svg
|
4
|
+
dir: .
|
5
|
+
background: transparent
|
6
|
+
dir: .
|
7
|
+
assets:
|
8
|
+
- name: favicon.ico
|
9
|
+
convert:
|
10
|
+
define: 'icon:auto-resize=36,24,16'
|
11
|
+
resize: 36x36
|
12
|
+
tag:
|
13
|
+
- link:
|
14
|
+
href: :href
|
15
|
+
rel: shortcut icon
|
16
|
+
type: :mime
|
17
|
+
sizes: :sizes
|
18
|
+
- name: favicon.png
|
19
|
+
convert:
|
20
|
+
resize: 196x196
|
21
|
+
tag:
|
22
|
+
- link:
|
23
|
+
href: :href
|
24
|
+
rel: icon
|
25
|
+
type: :mime
|
26
|
+
sizes: :sizes
|
27
|
+
- name: apple-touch-icon.png
|
28
|
+
convert:
|
29
|
+
resize: 180x180
|
30
|
+
- name: safari-pinned-tab.svg
|
31
|
+
tag:
|
32
|
+
- link:
|
33
|
+
color: :background
|
34
|
+
href: :href
|
35
|
+
rel: mask-icon
|
36
|
+
- name: android-chrome-192x192.png
|
37
|
+
convert:
|
38
|
+
resize: 192x192
|
39
|
+
refer:
|
40
|
+
- webmanifest:
|
41
|
+
icons:
|
42
|
+
- src: :href
|
43
|
+
- name: android-chrome-512x512.png
|
44
|
+
convert:
|
45
|
+
resize: 512x512
|
46
|
+
refer:
|
47
|
+
- webmanifest:
|
48
|
+
icons:
|
49
|
+
- src: :href
|
50
|
+
- name: mstile-icon-128x128.png
|
51
|
+
convert:
|
52
|
+
resize: 128x128
|
53
|
+
refer:
|
54
|
+
- browserconfig:
|
55
|
+
msapplication:
|
56
|
+
tile:
|
57
|
+
TileColor:
|
58
|
+
__text: :background
|
59
|
+
square70x70logo:
|
60
|
+
_src: :href
|
61
|
+
tag:
|
62
|
+
- meta:
|
63
|
+
content: :href
|
64
|
+
name: msapplication-TileImage
|
65
|
+
- meta:
|
66
|
+
content: :background
|
67
|
+
name: msapplication-TileColor
|
68
|
+
|
69
|
+
- name: mstile-icon-270x270.png
|
70
|
+
convert:
|
71
|
+
resize: 270x270
|
72
|
+
refer:
|
73
|
+
- browserconfig:
|
74
|
+
msapplication:
|
75
|
+
tile:
|
76
|
+
TileColor:
|
77
|
+
__text: :background
|
78
|
+
square150x150logo:
|
79
|
+
_src: :href
|
80
|
+
- name: mstile-icon-558x270.png
|
81
|
+
convert:
|
82
|
+
resize: 558x270
|
83
|
+
refer:
|
84
|
+
- browserconfig:
|
85
|
+
msapplication:
|
86
|
+
tile:
|
87
|
+
TileColor:
|
88
|
+
__text: :background
|
89
|
+
wide310x150logo:
|
90
|
+
_src: :href
|
91
|
+
- name: mstile-icon-558x558.png
|
92
|
+
convert:
|
93
|
+
resize: 558x558
|
94
|
+
refer:
|
95
|
+
- browserconfig:
|
96
|
+
msapplication:
|
97
|
+
tile:
|
98
|
+
TileColor:
|
99
|
+
__text: :background
|
100
|
+
square310x310logo:
|
101
|
+
_src: :href
|
102
|
+
- name: manifest.webmanifest
|
103
|
+
source:
|
104
|
+
name: manifest.webmanifest
|
105
|
+
tag:
|
106
|
+
- link:
|
107
|
+
href: :href
|
108
|
+
rel: manifest
|
109
|
+
- name: browserconfig.xml
|
110
|
+
source:
|
111
|
+
name: browserconfig.xml
|
112
|
+
tag:
|
113
|
+
- meta:
|
114
|
+
content: :href
|
115
|
+
name: msapplication-config
|
@@ -0,0 +1,41 @@
|
|
1
|
+
---
|
2
|
+
defaults: &defaults
|
3
|
+
alpha: null
|
4
|
+
background: null
|
5
|
+
define: null
|
6
|
+
extent: null
|
7
|
+
gravity: null
|
8
|
+
resize: null
|
9
|
+
size: null
|
10
|
+
.svg:
|
11
|
+
.png:
|
12
|
+
<<: *defaults
|
13
|
+
background: :background
|
14
|
+
extent: :auto
|
15
|
+
gravity: center
|
16
|
+
resize:
|
17
|
+
size: :auto
|
18
|
+
.ico:
|
19
|
+
<<: *defaults
|
20
|
+
background: :background
|
21
|
+
define:
|
22
|
+
extent: :auto
|
23
|
+
gravity: center
|
24
|
+
resize:
|
25
|
+
size: :auto
|
26
|
+
.svg:
|
27
|
+
<<: *defaults
|
28
|
+
.png:
|
29
|
+
.ico:
|
30
|
+
<<: *defaults
|
31
|
+
background: :background
|
32
|
+
define:
|
33
|
+
extent: :auto
|
34
|
+
gravity: center
|
35
|
+
resize:
|
36
|
+
.png:
|
37
|
+
<<: *defaults
|
38
|
+
background: :background
|
39
|
+
extent: :auto
|
40
|
+
gravity: center
|
41
|
+
resize:
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
defaults:
|
3
|
+
webmanifest:
|
4
|
+
icons:
|
5
|
+
# https://developer.mozilla.org/en-US/docs/Web/Manifest/icons
|
6
|
+
- sizes: null
|
7
|
+
src: null
|
8
|
+
type: null
|
9
|
+
purpose: null
|
10
|
+
browserconfig:
|
11
|
+
browserconfig:
|
12
|
+
msapplication:
|
13
|
+
tile:
|
14
|
+
TileColor: :background
|
15
|
+
.json:
|
16
|
+
# https://developer.mozilla.org/en-US/docs/Web/Manifest
|
17
|
+
icons: :references
|
18
|
+
.xml:
|
19
|
+
# https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/dn320426(v=vs.85)?redirectedfrom=MSDN
|
20
|
+
browserconfig:
|
21
|
+
msapplication:
|
22
|
+
tile: :references
|
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
webmanifest: # https://developer.mozilla.org/en-US/docs/Web/Manifest
|
3
|
+
icons: # https://developer.mozilla.org/en-US/docs/Web/Manifest/icons
|
4
|
+
- sizes: :sizes
|
5
|
+
src: :relative_path
|
6
|
+
type: :mime
|
7
|
+
purpose: null
|
8
|
+
browserconfig: # https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/dn320426(v=vs.85)?redirectedfrom=MSDN
|
9
|
+
browserconfig:
|
10
|
+
msapplication:
|
11
|
+
tile:
|
12
|
+
TileColor: :background
|
13
|
+
___element:
|
14
|
+
name: :logo
|
15
|
+
_src: :relative_path
|
@@ -0,0 +1,22 @@
|
|
1
|
+
---
|
2
|
+
link:
|
3
|
+
as: null
|
4
|
+
color: null
|
5
|
+
crossorigin: null
|
6
|
+
disabled: null
|
7
|
+
href: null
|
8
|
+
hreflang: null
|
9
|
+
imagesizes: null
|
10
|
+
imagesrcset: null
|
11
|
+
media: null
|
12
|
+
prefetch: null
|
13
|
+
rel: null
|
14
|
+
sizes: null
|
15
|
+
title: null
|
16
|
+
type: null
|
17
|
+
meta:
|
18
|
+
charset: null
|
19
|
+
content: null
|
20
|
+
http-equiv: null
|
21
|
+
itemprop: null
|
22
|
+
name: null
|
data/jekyll-favicon.gemspec
CHANGED
@@ -1,36 +1,36 @@
|
|
1
|
+
# frozen_string_literal: true
|
1
2
|
|
2
|
-
lib = File.expand_path(
|
3
|
+
lib = File.expand_path("lib", __dir__)
|
3
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
-
require
|
5
|
+
require "jekyll/favicon/version"
|
5
6
|
|
6
7
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name
|
8
|
-
spec.version
|
9
|
-
spec.authors
|
10
|
-
spec.email
|
8
|
+
spec.name = "jekyll-favicon"
|
9
|
+
spec.version = Jekyll::Favicon::VERSION
|
10
|
+
spec.authors = ["Alvaro Faundez"]
|
11
|
+
spec.email = ["alvaro@faundez.net"]
|
11
12
|
|
12
|
-
spec.summary
|
13
|
-
spec.description
|
14
|
-
|
15
|
-
spec.homepage
|
16
|
-
spec.license
|
13
|
+
spec.summary = "Jekyll plugin for favicon tag generation."
|
14
|
+
spec.description = "Jekyll-favicon is a jekyll plugin that adds the" \
|
15
|
+
" tag favicon, generating html tags for favicon."
|
16
|
+
spec.homepage = "https://github.com/afaundez/jekyll-favicon"
|
17
|
+
spec.license = "MIT"
|
17
18
|
|
18
|
-
spec.files
|
19
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
19
20
|
f.match(%r{^(test|spec|features)/})
|
20
21
|
end
|
21
|
-
spec.bindir
|
22
|
-
spec.executables
|
23
|
-
spec.require_paths = [
|
22
|
+
spec.bindir = "exe"
|
23
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
24
|
+
spec.require_paths = ["lib"]
|
24
25
|
|
25
|
-
spec.required_ruby_version =
|
26
|
+
spec.required_ruby_version = ">= 2.5.0"
|
26
27
|
|
27
|
-
spec.add_development_dependency
|
28
|
-
spec.add_development_dependency
|
29
|
-
spec.add_development_dependency
|
30
|
-
spec.add_development_dependency
|
31
|
-
spec.add_development_dependency 'rake', '~> 10.0'
|
32
|
-
spec.add_development_dependency 'rubocop', '~> 0.54.0', '>= 0.54.0'
|
28
|
+
spec.add_development_dependency "minitest", "~> 5.8"
|
29
|
+
spec.add_development_dependency "minitest-hooks", "~> 1.5"
|
30
|
+
spec.add_development_dependency "minitest-reporters", "~> 1.4.3"
|
31
|
+
spec.add_development_dependency "rake", "~> 12.3"
|
33
32
|
|
34
|
-
spec.add_runtime_dependency
|
35
|
-
spec.add_runtime_dependency
|
33
|
+
spec.add_runtime_dependency "jekyll", ">= 3.0", "< 5.0"
|
34
|
+
spec.add_runtime_dependency "mini_magick", "~> 4.11"
|
35
|
+
spec.add_runtime_dependency "rexml", "~> 3.2", ">= 3.2.5"
|
36
36
|
end
|
data/lib/jekyll-favicon.rb
CHANGED
@@ -1,16 +1,7 @@
|
|
1
|
-
#
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
require_relative 'webmanifest'
|
9
|
-
require_relative 'image'
|
10
|
-
require_relative 'jekyll/favicon'
|
11
|
-
require_relative 'jekyll/favicon/version'
|
12
|
-
require_relative 'jekyll/favicon/hooks'
|
13
|
-
require_relative 'jekyll/favicon/metadata'
|
14
|
-
require_relative 'jekyll/favicon/icon'
|
15
|
-
require_relative 'jekyll/favicon/generator'
|
16
|
-
require_relative 'jekyll/favicon/tag'
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "jekyll/favicon"
|
4
|
+
require "jekyll/favicon/generator"
|
5
|
+
require "jekyll/favicon/tag"
|
6
|
+
require "jekyll/favicon/hooks"
|
7
|
+
require "jekyll/favicon/version"
|
data/lib/jekyll/favicon.rb
CHANGED
@@ -1,26 +1,29 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "yaml"
|
4
|
+
require "jekyll/favicon/configuration/defaults"
|
5
|
+
require "jekyll/favicon/configuration"
|
6
|
+
require "jekyll/favicon/static_data_file"
|
7
|
+
require "jekyll/favicon/static_graphic_file"
|
2
8
|
|
3
9
|
module Jekyll
|
4
10
|
# Module for custom configurations and defaults
|
5
11
|
module Favicon
|
6
|
-
|
7
|
-
PROJECT_LIB = File.join GEM_ROOT, 'lib'
|
8
|
-
PROJECT_ROOT = File.join PROJECT_LIB, 'jekyll', 'favicon'
|
9
|
-
defaults_path = File.join PROJECT_ROOT, 'config', 'defaults.yml'
|
10
|
-
DEFAULTS = YAML.load_file(defaults_path)['favicon']
|
11
|
-
|
12
|
-
# rubocop:disable Style/ClassVars
|
13
|
-
def self.merge(overrides)
|
14
|
-
@@config = Jekyll::Utils.deep_merge_hashes DEFAULTS, (overrides || {})
|
15
|
-
end
|
12
|
+
include Configuration::Defaults
|
16
13
|
|
17
|
-
def self.
|
18
|
-
|
14
|
+
def self.assets(site)
|
15
|
+
Configuration.merged(site)
|
16
|
+
.fetch("assets", [])
|
17
|
+
.collect { |attributes| build_asset site, attributes }
|
18
|
+
.compact
|
19
19
|
end
|
20
|
-
# rubocop:enable Style/ClassVars
|
21
20
|
|
22
|
-
def self.
|
23
|
-
File.
|
21
|
+
def self.build_asset(site, attributes)
|
22
|
+
asset_class = case File.extname attributes["name"]
|
23
|
+
when ".ico", ".png", ".svg" then StaticGraphicFile
|
24
|
+
when ".webmanifest", ".json", ".xml" then StaticDataFile
|
25
|
+
end
|
26
|
+
asset_class&.new site, attributes
|
24
27
|
end
|
25
28
|
end
|
26
29
|
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "jekyll/utils"
|
4
|
+
|
5
|
+
module Jekyll
|
6
|
+
module Favicon
|
7
|
+
# Favicon configuration
|
8
|
+
module Configuration
|
9
|
+
def self.merged(site)
|
10
|
+
return from_defaults unless (user_overrides = from_user site)
|
11
|
+
|
12
|
+
user_overrides = unlegacify user_overrides
|
13
|
+
user_merged = Jekyll::Utils.deep_merge_hashes from_defaults,
|
14
|
+
user_overrides
|
15
|
+
standardize user_merged
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.from_user(site)
|
19
|
+
site&.config&.fetch "favicon", {}
|
20
|
+
end
|
21
|
+
|
22
|
+
def self.from_defaults
|
23
|
+
Favicon.defaults
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.standardize(config)
|
27
|
+
return unless config
|
28
|
+
|
29
|
+
config.merge "source" => standardize_source(config["source"])
|
30
|
+
end
|
31
|
+
|
32
|
+
def self.standardize_source(source)
|
33
|
+
case source
|
34
|
+
when String then standardize_source_string source
|
35
|
+
when Hash then standardize_source_hash source
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
private_class_method :standardize_source
|
40
|
+
|
41
|
+
def self.standardize_source_string(source)
|
42
|
+
dir, name = File.split source
|
43
|
+
{"name" => name, "dir" => dir}
|
44
|
+
end
|
45
|
+
|
46
|
+
private_class_method :standardize_source_string
|
47
|
+
|
48
|
+
def self.standardize_source_hash(source)
|
49
|
+
name_dir, name = File.split source["name"]
|
50
|
+
dir = source["dir"]
|
51
|
+
source_dir = dir && !dir.empty? ? dir : nil
|
52
|
+
{"name" => name, "dir" => standardize_pathname(source_dir, name_dir)}
|
53
|
+
end
|
54
|
+
|
55
|
+
private_class_method :standardize_source_hash
|
56
|
+
|
57
|
+
def self.standardize_pathname(*paths)
|
58
|
+
Pathname.new(File.join(*paths.compact)).cleanpath.to_s
|
59
|
+
end
|
60
|
+
|
61
|
+
private_class_method :standardize_source_string
|
62
|
+
|
63
|
+
def self.unlegacify(config)
|
64
|
+
options = config.slice "source", "dir", "background", "assets"
|
65
|
+
path = options["path"]
|
66
|
+
options["dir"] ||= path if path
|
67
|
+
options
|
68
|
+
end
|
69
|
+
|
70
|
+
private_class_method :unlegacify
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|