Module: ProductTours::Widget

Defined in:
lib/product_tours/widget.rb

Constant Summary collapse

SOURCE =
File.expand_path('widget.js', __dir__)
DASHBOARD_SOURCE =
File.expand_path('dashboard.js', __dir__)
DASHBOARD_STYLESHEET_SOURCE =
File.expand_path('dashboard.css', __dir__)
RTL_LANGUAGES =
%w[ar arc ckb dv fa ha he ks ku ps sd ug ur yi].freeze

Class Method Summary collapse

Class Method Details

.config_json(locale:) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/product_tours/widget.rb', line 32

def config_json(locale:)
  {
    endpoint: ProductTours.config.widget_endpoint,
    locale: locale.to_s,
    rtl: rtl?(locale),
    labels: labels
  }.to_json.gsub('</', '<\\/')
end

.dashboard_fingerprintObject



18
# File 'lib/product_tours/widget.rb', line 18

def dashboard_fingerprint = @dashboard_fingerprint ||= Digest::MD5.hexdigest(dashboard_javascript)

.dashboard_javascriptObject



15
# File 'lib/product_tours/widget.rb', line 15

def dashboard_javascript = @dashboard_javascript ||= File.read(DASHBOARD_SOURCE)

.dashboard_stylesheetObject



16
# File 'lib/product_tours/widget.rb', line 16

def dashboard_stylesheet = @dashboard_stylesheet ||= File.read(DASHBOARD_STYLESHEET_SOURCE)

.dashboard_stylesheet_fingerprintObject

Not an endless def like its neighbours: the one-liner is 126 characters.



21
22
23
# File 'lib/product_tours/widget.rb', line 21

def dashboard_stylesheet_fingerprint
  @dashboard_stylesheet_fingerprint ||= Digest::MD5.hexdigest(dashboard_stylesheet)
end

.fingerprintObject



17
# File 'lib/product_tours/widget.rb', line 17

def fingerprint = @fingerprint ||= Digest::MD5.hexdigest(javascript)

.javascriptObject



14
# File 'lib/product_tours/widget.rb', line 14

def javascript = @javascript ||= File.read(SOURCE)

.snippet(locale:, nonce: nil) ⇒ Object



25
26
27
28
29
30
# File 'lib/product_tours/widget.rb', line 25

def snippet(locale:, nonce: nil)
  nonce_attr = nonce ? %( nonce="#{ERB::Util.html_escape(nonce)}") : ''
  source = "#{ProductTours.config.mount_path.to_s.chomp('/')}/widget.js?v=#{fingerprint}"
  %(<script type="application/json" data-product-tours-config>#{config_json(locale:)}</script>) +
    %(<script src="#{ERB::Util.html_escape(source)}" defer#{nonce_attr} data-product-tours-widget></script>)
end