jekyll-favicon 0.2.5 → 1.0.0.pre.1

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 (66) hide show
  1. checksums.yaml +5 -5
  2. data/.devcontainer/Dockerfile +20 -0
  3. data/.devcontainer/devcontainer.json +35 -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 +5 -0
  9. data/CHANGELOG.md +44 -0
  10. data/Gemfile +2 -0
  11. data/README.md +86 -20
  12. data/Rakefile +9 -7
  13. data/bin/console +1 -0
  14. data/config/jekyll/favicon.yml +115 -0
  15. data/config/jekyll/favicon/static_file.yml +3 -0
  16. data/config/jekyll/favicon/static_file/convertible.yml +42 -0
  17. data/config/jekyll/favicon/static_file/mutable.yml +22 -0
  18. data/config/jekyll/favicon/static_file/referenceable.yml +15 -0
  19. data/config/jekyll/favicon/static_file/sourceable.yml +3 -0
  20. data/config/jekyll/favicon/static_file/taggable.yml +22 -0
  21. data/gemfiles/jekyll36.gemfile +6 -0
  22. data/gemfiles/jekyll37.gemfile +6 -0
  23. data/gemfiles/jekyll38.gemfile +6 -0
  24. data/gemfiles/jekyll39.gemfile +6 -0
  25. data/gemfiles/jekyll40.gemfile +6 -0
  26. data/gemfiles/jekyll41.gemfile +6 -0
  27. data/gemfiles/jekyll42.gemfile +6 -0
  28. data/jekyll-favicon.gemspec +9 -9
  29. data/lib/jekyll-favicon.rb +7 -14
  30. data/lib/jekyll/favicon.rb +19 -13
  31. data/lib/jekyll/favicon/configuration.rb +73 -0
  32. data/lib/jekyll/favicon/configuration/defaults.rb +49 -0
  33. data/lib/jekyll/favicon/generator.rb +11 -74
  34. data/lib/jekyll/favicon/hooks.rb +12 -10
  35. data/lib/jekyll/favicon/static_data_file.rb +17 -0
  36. data/lib/jekyll/favicon/static_file.rb +97 -0
  37. data/lib/jekyll/favicon/static_file/convertible.rb +118 -0
  38. data/lib/jekyll/favicon/static_file/mutable.rb +81 -0
  39. data/lib/jekyll/favicon/static_file/referenceable.rb +22 -0
  40. data/lib/jekyll/favicon/static_file/sourceable.rb +73 -0
  41. data/lib/jekyll/favicon/static_file/taggable.rb +59 -0
  42. data/lib/jekyll/favicon/static_graphic_file.rb +21 -0
  43. data/lib/jekyll/favicon/tag.rb +14 -16
  44. data/lib/jekyll/favicon/utils.rb +24 -0
  45. data/lib/jekyll/favicon/utils/configuration/compact.rb +61 -0
  46. data/lib/jekyll/favicon/utils/configuration/merge.rb +63 -0
  47. data/lib/jekyll/favicon/utils/configuration/patch.rb +48 -0
  48. data/lib/jekyll/favicon/utils/convert.rb +42 -0
  49. data/lib/jekyll/favicon/utils/tag.rb +54 -0
  50. data/lib/jekyll/favicon/version.rb +3 -1
  51. metadata +71 -66
  52. data/.rubocop.yml +0 -5
  53. data/.travis.yml +0 -21
  54. data/Gemfile.lock +0 -97
  55. data/lib/browserconfig.rb +0 -54
  56. data/lib/hash.rb +0 -12
  57. data/lib/image.rb +0 -33
  58. data/lib/jekyll/favicon/config/defaults.yml +0 -54
  59. data/lib/jekyll/favicon/icon.rb +0 -74
  60. data/lib/jekyll/favicon/metadata.rb +0 -12
  61. data/lib/jekyll/favicon/templates/chrome.html.erb +0 -5
  62. data/lib/jekyll/favicon/templates/classic.html.erb +0 -8
  63. data/lib/jekyll/favicon/templates/ie.html.erb +0 -4
  64. data/lib/jekyll/favicon/templates/safari.html.erb +0 -8
  65. data/lib/string.rb +0 -14
  66. 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'
@@ -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
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 3.6.0'
6
+ gemspec path: '..'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 3.7.0'
6
+ gemspec path: '..'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 3.8.0'
6
+ gemspec path: '..'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 3.9.0'
6
+ gemspec path: '..'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 4.0.0'
6
+ gemspec path: '..'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 4.1.0'
6
+ gemspec path: '..'
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ source 'https://rubygems.org'
4
+
5
+ gem 'jekyll', '~> 4.2.0'
6
+ gemspec path: '..'
@@ -1,3 +1,4 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
@@ -22,15 +23,14 @@ Gem::Specification.new do |spec|
22
23
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
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,9 @@
1
1
  # rubocop:disable Naming/FileName
2
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'
3
+ # frozen_string_literal: true
4
+
5
+ require 'jekyll/favicon'
6
+ require 'jekyll/favicon/generator'
7
+ require 'jekyll/favicon/tag'
8
+ require 'jekyll/favicon/hooks'
9
+ require 'jekyll/favicon/version'
@@ -1,26 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
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']
12
+ include Configuration::Defaults
11
13
 
12
- # rubocop:disable Style/ClassVars
13
- def self.merge(overrides)
14
- @@config = Jekyll::Utils.deep_merge_hashes DEFAULTS, (overrides || {})
14
+ def self.configuration(site)
15
+ Configuration.merged site
15
16
  end
16
17
 
17
- def self.config
18
- @@config ||= DEFAULTS
18
+ def self.assets(site)
19
+ configuration(site).fetch('assets', [])
20
+ .collect { |attributes| build_asset site, attributes }
21
+ .compact
19
22
  end
20
- # rubocop:enable Style/ClassVars
21
23
 
22
- def self.templates
23
- File.join PROJECT_ROOT, 'templates'
24
+ def self.build_asset(site, attributes)
25
+ asset_class = case File.extname attributes['name']
26
+ when '.ico', '.png', '.svg' then StaticGraphicFile
27
+ when '.webmanifest', '.json', '.xml' then StaticDataFile
28
+ end
29
+ asset_class&.new site, attributes
24
30
  end
25
31
  end
26
32
  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