jekyll-favicon 0.2.5 → 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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