Module: Overlastic::OverlaysHelper

Defined in:
app/helpers/overlastic/overlays_helper.rb

Instance Method Summary collapse

Instance Method Details

#current_overlay_nameObject



18
19
20
# File 'app/helpers/overlastic/overlays_helper.rb', line 18

def current_overlay_name
  request.headers["Overlay-Name"]&.to_sym
end

#overlastic_tag(id: :overlay1) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# File 'app/helpers/overlastic/overlays_helper.rb', line 2

def overlastic_tag(id: :overlay1)
  if block_given?
    type = request.headers["Overlay-Type"]
    target = request.headers["Overlay-Target"] || Overlastic.configuration.default_target
    args = request.headers["Overlay-Args"]

    tag.overlastic id: current_overlay_name || id, src: request.url, data: { overlay_type: type, overlay_target: target, overlay_args: args } do
      yield

      concat tag.overlastic(id: overlay_name_from(:next), data: { overlay_target: Overlastic.configuration.default_target })
    end
  else
    tag.overlastic id: id, data: { overlay_target: Overlastic.configuration.default_target }
  end
end

#overlay_name_from(key) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# File 'app/helpers/overlastic/overlays_helper.rb', line 26

def overlay_name_from(key)
  current_number = overlay_number_from current_overlay_name

  case key
  when :first, :all
    :overlay1
  when :last, :current
    current_overlay_name
  when :previous
    :"overlay#{current_number - 1}"
  when :next
    :"overlay#{current_number + 1}"
  else
    key
  end
end

#overlay_number_from(name) ⇒ Object



22
23
24
# File 'app/helpers/overlastic/overlays_helper.rb', line 22

def overlay_number_from(name)
  name.to_s.scan(/\d+/)&.first.to_i
end

#render_overlay(locals = {}, &block) ⇒ Object



47
48
49
50
51
52
53
54
55
56
57
# File 'app/helpers/overlastic/overlays_helper.rb', line 47

def render_overlay(locals = {}, &block)
  string = capture(&block)
  type = request.headers["Overlay-Type"] || Overlastic.configuration.default_overlay
  args_header = request.headers["Overlay-Args"]
  overlay_args = JSON.parse(Base64.urlsafe_decode64(request.headers["Overlay-Args"])) if args_header.present?
  locals.merge! overlay_args.to_h.symbolize_keys

  overlastic_tag do
    concat render(Overlastic.configuration.public_send(:"#{type}_overlay_view_path"), locals) { string }
  end
end

#valid_overlay_name?(name) ⇒ Boolean

Returns:

  • (Boolean)


43
44
45
# File 'app/helpers/overlastic/overlays_helper.rb', line 43

def valid_overlay_name?(name)
  overlay_number_from(name).positive?
end