manifester 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f2245e87b983a5959438ada67d8918ee9676594a83f696f7334e390560cc06d1
4
- data.tar.gz: b16152e7230c6724889e55e25f55227f1ab870fadbf5ba76721afed39f4a52f4
3
+ metadata.gz: 0f56198d24089e1e07ceefeb6d32815b16cb9fd4af486f35115ad723cb79da23
4
+ data.tar.gz: 5e5da6d15231011463c71fd74f5c10ad64f98c582a73a19010f8c8d8bee176e7
5
5
  SHA512:
6
- metadata.gz: 79b6e43a6bd6d4b8cfa4e737d85500dc17a638c01354d8c81e4ee1b1b6589895be5ee57970810568440a6915064b86e11580910f018055c957e0731f4da8fa71
7
- data.tar.gz: 61f7553cc4ba9cbfc6514283b4ca3ee46281e7806a7698c5fbb78e4192905cb681af16d1c3ab53c69b7be78e99184b6ca259c2e6cd0cea9083d5254513e02796
6
+ metadata.gz: eea664adc048231d6e35d6c0589cf758e07d4c98e2b172254560ae15dbde10d3fc05704b8edde38a09251cf220e3177b419ea377763834c99a83a80b5c65490b
7
+ data.tar.gz: 8f40f946e02ab5a68954183e4102b93b8bafb32f8e181974f14e5e4419c36dbf921cbde76c7282387f876a4afc29356f881f9bba3e31379c71504af51c46b2ed
@@ -4,21 +4,151 @@ module Manifester
4
4
  Manifester.instance
5
5
  end
6
6
 
7
+ # Computes the relative path for a given Webpacker asset.
8
+ # Returns the relative path using manifest.json and passes it to path_to_asset helper.
9
+ # This will use path_to_asset internally, so most of their behaviors will be the same.
10
+ #
11
+ # Example:
12
+ #
13
+ # <%= asset_manifest_path 'calendar.css' %> # => "/packs/calendar-1016838bab065ae1e122.css"
14
+ def asset_manifest_path(name, **options)
15
+ path_to_asset(current_manifester_instance.manifest.lookup!(name), options)
16
+ end
17
+
18
+ # Computes the absolute path for a given Webpacker asset.
19
+ # Returns the absolute path using manifest.json and passes it to url_to_asset helper.
20
+ # This will use url_to_asset internally, so most of their behaviors will be the same.
21
+ #
22
+ # Example:
23
+ #
24
+ # <%= asset_manifest_url 'calendar.css' %> # => "http://example.com/packs/calendar-1016838bab065ae1e122.css"
25
+ def asset_manifest_url(name, **options)
26
+ url_to_asset(current_manifester_instance.manifest.lookup!(name), options)
27
+ end
28
+
29
+ # Computes the relative path for a given Webpacker image with the same automated processing as image_manifest_tag.
30
+ # Returns the relative path using manifest.json and passes it to path_to_asset helper.
31
+ # This will use path_to_asset internally, so most of their behaviors will be the same.
32
+ def image_manifest_path(name, **options)
33
+ resolve_path_to_image(name, **options)
34
+ end
35
+
36
+ # Computes the absolute path for a given Webpacker image with the same automated
37
+ # processing as image_manifest_tag. Returns the relative path using manifest.json
38
+ # and passes it to path_to_asset helper. This will use path_to_asset internally,
39
+ # so most of their behaviors will be the same.
40
+ def image_manifest_url(name, **options)
41
+ resolve_path_to_image(name, **options.merge(protocol: :request))
42
+ end
43
+
44
+ # Creates an image tag that references the named pack file.
45
+ #
46
+ # Example:
47
+ #
48
+ # <%= image_manifest_tag 'application.png', size: '16x10', alt: 'Edit Entry' %>
49
+ # <img alt='Edit Entry' src='/packs/application-k344a6d59eef8632c9d1.png' width='16' height='10' />
50
+ #
51
+ # <%= image_manifest_tag 'picture.png', srcset: { 'picture-2x.png' => '2x' } %>
52
+ # <img srcset= "/packs/picture-2x-7cca48e6cae66ec07b8e.png 2x" src="/packs/picture-c38deda30895059837cf.png" >
53
+ def image_manifest_tag(name, **options)
54
+ if options[:srcset] && !options[:srcset].is_a?(String)
55
+ options[:srcset] = options[:srcset].map do |src_name, size|
56
+ "#{resolve_path_to_image(src_name)} #{size}"
57
+ end.join(", ")
58
+ end
59
+
60
+ image_tag(resolve_path_to_image(name), options)
61
+ end
62
+
63
+ # Creates a link tag for a favicon that references the named pack file.
64
+ #
65
+ # Example:
66
+ #
67
+ # <%= favicon_manifest_tag 'mb-icon.png', rel: 'apple-touch-icon', type: 'image/png' %>
68
+ # <link href="/packs/mb-icon-k344a6d59eef8632c9d1.png" rel="apple-touch-icon" type="image/png" />
69
+ def favicon_manifest_tag(name, **options)
70
+ favicon_link_tag(resolve_path_to_image(name), options)
71
+ end
72
+
73
+ # Creates script tags that reference the js chunks from entrypoints when using split chunks API,
74
+ # as compiled by webpack per the entries list in package/environments/base.js.
75
+ # By default, this list is auto-generated to match everything in
76
+ # app/packs/entrypoints/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
77
+ # See: https://webpack.js.org/plugins/split-chunks-plugin/
78
+ #
79
+ # Example:
80
+ #
81
+ # <%= javascript_manifest_tag 'calendar', 'map', 'data-turbolinks-track': 'reload' %> # =>
82
+ # <script src="/packs/vendor-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
83
+ # <script src="/packs/calendar~runtime-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
84
+ # <script src="/packs/calendar-1016838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
85
+ # <script src="/packs/map~runtime-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
86
+ # <script src="/packs/map-16838bab065ae1e314.chunk.js" data-turbolinks-track="reload"></script>
87
+ #
88
+ # DO:
89
+ #
90
+ # <%= javascript_manifest_tag 'calendar', 'map' %>
91
+ #
92
+ # DON'T:
93
+ #
94
+ # <%= javascript_manifest_tag 'calendar' %>
95
+ # <%= javascript_manifest_tag 'map' %>
7
96
  def javascript_manifest_tag(*names, **options)
8
97
  javascript_include_tag(*sources_from_manifest_entrypoints(names, type: :javascript), **options)
9
98
  end
10
99
 
11
- def stylesheet_manifest_tag(*names, **options)
12
- stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
100
+ # Creates a link tag, for preloading, that references a given Webpacker asset.
101
+ # In production mode, the digested reference is automatically looked up.
102
+ # See: https://developer.mozilla.org/en-US/docs/Web/HTML/Preloading_content
103
+ #
104
+ # Example:
105
+ #
106
+ # <%= preload_manifest_asset 'fonts/fa-regular-400.woff2' %> # =>
107
+ # <link rel="preload" href="/packs/fonts/fa-regular-400-944fb546bd7018b07190a32244f67dc9.woff2" as="font" type="font/woff2" crossorigin="anonymous">
108
+ def preload_manifest_asset(name, **options)
109
+ if self.class.method_defined?(:preload_link_tag)
110
+ preload_link_tag(current_manifester_instance.manifest.lookup!(name), options)
111
+ else
112
+ raise "You need Rails >= 5.2 to use this tag."
113
+ end
13
114
  end
14
115
 
15
- def stylesheet_pack_tag(*names, **options)
116
+ # Creates link tags that reference the css chunks from entrypoints when using split chunks API,
117
+ # as compiled by webpack per the entries list in package/environments/base.js.
118
+ # By default, this list is auto-generated to match everything in
119
+ # app/packs/entrypoints/*.js and all the dependent chunks. In production mode, the digested reference is automatically looked up.
120
+ # See: https://webpack.js.org/plugins/split-chunks-plugin/
121
+ #
122
+ # Examples:
123
+ #
124
+ # <%= stylesheet_manifest_tag 'calendar', 'map' %> # =>
125
+ # <link rel="stylesheet" media="screen" href="/packs/3-8c7ce31a.chunk.css" />
126
+ # <link rel="stylesheet" media="screen" href="/packs/calendar-8c7ce31a.chunk.css" />
127
+ # <link rel="stylesheet" media="screen" href="/packs/map-8c7ce31a.chunk.css" />
128
+ #
129
+ # DO:
130
+ #
131
+ # <%= stylesheet_manifest_tag 'calendar', 'map' %>
132
+ #
133
+ # DON'T:
134
+ #
135
+ # <%= stylesheet_manifest_tag 'calendar' %>
136
+ # <%= stylesheet_manifest_tag 'map' %>
137
+ def stylesheet_manifest_tag(*names, **options)
138
+ stylesheet_link_tag(*sources_from_manifest_entrypoints(names, type: :stylesheet), **options)
16
139
  end
17
140
 
18
141
  private
19
142
 
20
143
  def sources_from_manifest_entrypoints(names, type:)
21
- names.map { |name| current_manifester_instance.manifest.lookup_pack_with_chunks!(name.to_s, type: type) }.flatten.uniq
144
+ names.map { |name| current_manifester_instance.manifest.lookup_manifest_with_chunks!(name.to_s, type: type) }.flatten.uniq
145
+ end
146
+
147
+ def resolve_path_to_image(name, **options)
148
+ path = name.starts_with?("media/images/") ? name : "media/images/#{name}"
149
+ path_to_asset(current_manifester_instance.manifest.lookup!(path), options)
150
+ rescue
151
+ path_to_asset(current_manifester_instance.manifest.lookup!(name), options)
22
152
  end
23
153
  end
24
154
  end
data/lib/manifester.rb CHANGED
@@ -1,5 +1,4 @@
1
1
  require "manifester/version"
2
- require "manifester/engine"
3
2
 
4
3
  module Manifester
5
4
  extend self
@@ -12,3 +11,10 @@ module Manifester
12
11
  @instance ||= Manifester::Instance.new
13
12
  end
14
13
  end
14
+
15
+ require "manifester/instance"
16
+ require "manifester/env"
17
+ require "manifester/configuration"
18
+ require "manifester/manifest"
19
+
20
+ require "manifester/engine" if defined?(Rails)
@@ -12,7 +12,7 @@ class Manifester::Manifest
12
12
  @data = load
13
13
  end
14
14
 
15
- def lookup_pack_with_chunks(name, pack_type = {})
15
+ def lookup_manifest_with_chunks(name, pack_type = {})
16
16
  manifest_pack_type = manifest_type(pack_type[:type])
17
17
  manifest_pack_name = manifest_name(name, manifest_pack_type)
18
18
  find("entrypoints")[manifest_pack_name]["assets"][manifest_pack_type]
@@ -20,8 +20,8 @@ class Manifester::Manifest
20
20
  nil
21
21
  end
22
22
 
23
- def lookup_pack_with_chunks!(name, pack_type = {})
24
- lookup_pack_with_chunks(name, pack_type) || handle_missing_entry(name, pack_type)
23
+ def lookup_manifest_with_chunks!(name, pack_type = {})
24
+ lookup_manifest_with_chunks(name, pack_type) || handle_missing_entry(name, pack_type)
25
25
  end
26
26
 
27
27
  # Computes the relative path for a given Manifester asset using manifest.json.
@@ -1,3 +1,3 @@
1
1
  module Manifester
2
- VERSION = '0.1.0'
2
+ VERSION = '0.1.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: manifester
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Adrian Marin
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-04-12 00:00:00.000000000 Z
11
+ date: 2021-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails