jekyll-favicon 0.2.6 → 1.0.0.pre.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +5 -5
  2. data/.devcontainer/Dockerfile +20 -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 +42 -0
  14. data/Gemfile +3 -1
  15. data/README.md +80 -20
  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 +42 -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 -74
  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 +121 -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 +43 -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
+ scale: 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
+ scale: 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
+ scale: 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
+ scale: 192x192
39
+ refer:
40
+ - webmanifest:
41
+ icons:
42
+ - src: :href
43
+ - name: android-chrome-512x512.png
44
+ convert:
45
+ scale: 512x512
46
+ refer:
47
+ - webmanifest:
48
+ icons:
49
+ - src: :href
50
+ - name: mstile-icon-128x128.png
51
+ convert:
52
+ scale: 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
+ scale: 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
+ scale: 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
+ scale: 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,42 @@
1
+ ---
2
+ defaults: &defaults
3
+ alpha: null
4
+ background: null
5
+ define: null
6
+ density: null
7
+ extent: null
8
+ gravity: null
9
+ resize: null
10
+ scale: null
11
+ .svg:
12
+ .png:
13
+ <<: *defaults
14
+ background: :background
15
+ density: :max
16
+ extent: :auto
17
+ gravity: center
18
+ scale:
19
+ .ico:
20
+ <<: *defaults
21
+ background: :background
22
+ define:
23
+ density: :max
24
+ extent: :auto
25
+ gravity: center
26
+ scale:
27
+ .svg:
28
+ <<: *defaults
29
+ .png:
30
+ .ico:
31
+ <<: *defaults
32
+ background: :background
33
+ define:
34
+ extent: :auto
35
+ gravity: center
36
+ resize:
37
+ .png:
38
+ <<: *defaults
39
+ background: :background
40
+ extent: :auto
41
+ gravity: center
42
+ 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