jekyll-favicon 0.2.7 → 1.0.0.pre.3

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.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/.devcontainer/Dockerfile +22 -0
  3. data/.devcontainer/devcontainer.json +42 -0
  4. data/.github/ISSUE_TEMPLATE/bug_report.md +10 -13
  5. data/.github/PULL_REQUEST_TEMPLATE.md +11 -9
  6. data/.github/workflows/gem-push.yml +40 -0
  7. data/.github/workflows/test.yml +38 -0
  8. data/.gitignore +4 -0
  9. data/.reek.yml +25 -0
  10. data/.vscode/launch.json +16 -0
  11. data/.vscode/settings.json +7 -0
  12. data/.vscode/tasks.json +15 -0
  13. data/CHANGELOG.md +38 -0
  14. data/Gemfile +3 -1
  15. data/README.md +77 -22
  16. data/Rakefile +9 -7
  17. data/bin/console +1 -0
  18. data/bin/debug +22 -0
  19. data/config/jekyll/favicon.yml +115 -0
  20. data/config/jekyll/favicon/static_file.yml +3 -0
  21. data/config/jekyll/favicon/static_file/convertible.yml +41 -0
  22. data/config/jekyll/favicon/static_file/mutable.yml +22 -0
  23. data/config/jekyll/favicon/static_file/referenceable.yml +15 -0
  24. data/config/jekyll/favicon/static_file/sourceable.yml +3 -0
  25. data/config/jekyll/favicon/static_file/taggable.yml +22 -0
  26. data/jekyll-favicon.gemspec +24 -24
  27. data/lib/jekyll-favicon.rb +7 -16
  28. data/lib/jekyll/favicon.rb +19 -16
  29. data/lib/jekyll/favicon/configuration.rb +73 -0
  30. data/lib/jekyll/favicon/configuration/defaults.rb +49 -0
  31. data/lib/jekyll/favicon/generator.rb +10 -84
  32. data/lib/jekyll/favicon/hooks.rb +12 -10
  33. data/lib/jekyll/favicon/static_data_file.rb +17 -0
  34. data/lib/jekyll/favicon/static_file.rb +97 -0
  35. data/lib/jekyll/favicon/static_file/convertible.rb +129 -0
  36. data/lib/jekyll/favicon/static_file/mutable.rb +81 -0
  37. data/lib/jekyll/favicon/static_file/referenceable.rb +22 -0
  38. data/lib/jekyll/favicon/static_file/sourceable.rb +73 -0
  39. data/lib/jekyll/favicon/static_file/taggable.rb +53 -0
  40. data/lib/jekyll/favicon/static_graphic_file.rb +21 -0
  41. data/lib/jekyll/favicon/tag.rb +14 -17
  42. data/lib/jekyll/favicon/utils.rb +48 -0
  43. data/lib/jekyll/favicon/utils/configuration/compact.rb +58 -0
  44. data/lib/jekyll/favicon/utils/configuration/merge.rb +70 -0
  45. data/lib/jekyll/favicon/utils/configuration/patch.rb +49 -0
  46. data/lib/jekyll/favicon/utils/convert.rb +39 -0
  47. data/lib/jekyll/favicon/utils/tag.rb +70 -0
  48. data/lib/jekyll/favicon/version.rb +3 -1
  49. metadata +69 -67
  50. data/.rubocop.yml +0 -5
  51. data/.ruby-version +0 -1
  52. data/.travis.yml +0 -21
  53. data/Gemfile.lock +0 -97
  54. data/lib/browserconfig.rb +0 -54
  55. data/lib/hash.rb +0 -12
  56. data/lib/image.rb +0 -33
  57. data/lib/jekyll/favicon/config/defaults.yml +0 -54
  58. data/lib/jekyll/favicon/icon.rb +0 -73
  59. data/lib/jekyll/favicon/metadata.rb +0 -12
  60. data/lib/jekyll/favicon/templates/chrome.html.erb +0 -5
  61. data/lib/jekyll/favicon/templates/classic.html.erb +0 -8
  62. data/lib/jekyll/favicon/templates/ie.html.erb +0 -4
  63. data/lib/jekyll/favicon/templates/safari.html.erb +0 -8
  64. data/lib/string.rb +0 -14
  65. data/lib/webmanifest.rb +0 -30
data/Rakefile CHANGED
@@ -1,10 +1,12 @@
1
- require 'bundler/gem_tasks'
2
- require 'rake/testtask'
1
+ # frozen_string_literal: true
3
2
 
4
- Rake::TestTask.new(:test) do |t|
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
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'jekyll-favicon'
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,3 @@
1
+ ---
2
+ background: transparent
3
+ dir: .
@@ -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,3 @@
1
+ ---
2
+ name: :source_name
3
+ dir: :source_dir
@@ -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
@@ -1,36 +1,36 @@
1
+ # frozen_string_literal: true
1
2
 
2
- lib = File.expand_path('lib', __dir__)
3
+ lib = File.expand_path("lib", __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
- require 'jekyll/favicon/version'
5
+ require "jekyll/favicon/version"
5
6
 
6
7
  Gem::Specification.new do |spec|
7
- spec.name = 'jekyll-favicon'
8
- spec.version = Jekyll::Favicon::VERSION
9
- spec.authors = ['Alvaro Faundez']
10
- spec.email = ['alvaro@faundez.net']
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 = 'Jekyll plugin for favicon tag generation.'
13
- spec.description = 'Jekyll-favicon is a jekyll plugin that adds the' \
14
- ' tag favicon, generating html tags for favicon.'
15
- spec.homepage = 'https://github.com/afaundez/jekyll-favicon'
16
- spec.license = 'MIT'
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 = `git ls-files -z`.split("\x0").reject do |f|
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 = 'exe'
22
- spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
- spec.require_paths = ['lib']
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 = '>= 2.1.0'
26
+ spec.required_ruby_version = ">= 2.5.0"
26
27
 
27
- spec.add_development_dependency 'bundler', '~> 1.16'
28
- spec.add_development_dependency 'minitest', '~> 5.0'
29
- spec.add_development_dependency 'minitest-hooks', '~> 1.4', '>= 1.4.2'
30
- spec.add_development_dependency 'nokogiri', '~> 1.8'
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 'jekyll', '~> 3.0'
35
- spec.add_runtime_dependency 'mini_magick', '~> 4.5'
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
@@ -1,16 +1,7 @@
1
- # rubocop:disable Naming/FileName
2
- # rubocop:enable Naming/FileName
3
- require 'jekyll'
4
- require 'mini_magick'
5
- require_relative 'string'
6
- require_relative 'hash'
7
- require_relative 'browserconfig'
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"
@@ -1,26 +1,29 @@
1
- require 'yaml'
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
- GEM_ROOT = File.dirname File.dirname __dir__
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.config
18
- @@config ||= DEFAULTS
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.templates
23
- File.join PROJECT_ROOT, 'templates'
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