Skip to content

Commit 6673333

Browse files
authored
Merge pull request #38 from javierav/assets-helper
Add assets helpers to rails views
2 parents 9987586 + 38bb549 commit 6673333

File tree

4 files changed

+82
-0
lines changed

4 files changed

+82
-0
lines changed

CHANGELOG.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,15 @@ FerrumPdf.render_pdf(url: "https://example.org", browser: Ferrum::Browser.new)
2222
* Remove `protocol` option
2323
* Rename `host` to `base_url`
2424

25+
* Add assets helpers to Rails views for dealing with Chrome quirks.
26+
https://nathanfriend.com/2019/04/15/pdf-gotchas-with-headless-chrome.html
27+
28+
```ruby
29+
ferrum_pdf_inline_stylesheet("application.css")
30+
ferrum_pdf_inline_javascript("application.js")
31+
ferrum_pdf_base64_asset("logo.svg")
32+
```
33+
2534
### 0.3.0
2635

2736
* Add `FerrumPdf.include_controller_module = false` option to skip adding `render_pdf` Rails helper

lib/ferrum_pdf.rb

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,11 @@ module FerrumPdf
99
<div class='text right'><span class='pageNumber'></span>/<span class='totalPages'></span></div>
1010
HTML
1111

12+
autoload :AssetsHelper, "ferrum_pdf/assets_helper"
1213
autoload :Controller, "ferrum_pdf/controller"
1314
autoload :HTMLPreprocessor, "ferrum_pdf/html_preprocessor"
1415

16+
mattr_accessor :include_assets_helper_module, default: true
1517
mattr_accessor :include_controller_module, default: true
1618
mattr_accessor :browsers, default: {}
1719
mattr_accessor :config, default: ActiveSupport::OrderedOptions.new.merge(

lib/ferrum_pdf/assets_helper.rb

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
module FerrumPdf
2+
module AssetsHelper
3+
class BaseAsset
4+
def initialize(asset)
5+
@asset = asset
6+
end
7+
end
8+
9+
class PropshaftAsset < BaseAsset
10+
def content_type
11+
@asset.content_type.to_s
12+
end
13+
14+
def content
15+
@asset.content
16+
end
17+
end
18+
19+
class SprocketsAsset < BaseAsset
20+
def content_type
21+
@asset.content_type
22+
end
23+
24+
def content
25+
@asset.source
26+
end
27+
end
28+
29+
class AssetFinder
30+
class << self
31+
def find(path)
32+
if Rails.application.assets.respond_to?(:load_path)
33+
propshaft_asset(path)
34+
elsif Rails.application.assets.respond_to?(:find_asset)
35+
sprockets_asset(path)
36+
else
37+
nil
38+
end
39+
end
40+
41+
def propshaft_asset(path)
42+
(asset = Rails.application.assets.load_path.find(path)) ? PropshaftAsset.new(asset) : nil
43+
end
44+
45+
def sprockets_asset(path)
46+
(asset = Rails.application.assets.find_asset(path)) ? SprocketsAsset.new(asset) : nil
47+
end
48+
end
49+
end
50+
51+
def ferrum_pdf_inline_stylesheet(path)
52+
(asset = AssetFinder.find(path)) ? "<style>#{asset.content}</style>".html_safe : nil
53+
end
54+
55+
def ferrum_pdf_inline_javascript(path)
56+
(asset = AssetFinder.find(path)) ? "<script>#{asset.content}</script>".html_safe : nil
57+
end
58+
59+
def ferrum_pdf_base64_asset(path)
60+
return nil unless (asset = AssetFinder.find(path))
61+
62+
"data:#{asset.content_type};base64,#{Base64.encode64(asset.content).gsub(/\s+/, '')}"
63+
end
64+
end
65+
end

lib/ferrum_pdf/railtie.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
module FerrumPdf
22
class Railtie < ::Rails::Railtie
3+
initializer "ferrum_pdf.assets_helper" do
4+
ActiveSupport.on_load(:action_view) do
5+
include FerrumPdf::AssetsHelper if FerrumPdf.include_assets_helper_module
6+
end
7+
end
8+
39
initializer "ferrum_pdf.controller" do
410
ActiveSupport.on_load(:action_controller) do
511
include FerrumPdf::Controller if FerrumPdf.include_controller_module

0 commit comments

Comments
 (0)