Class: FlexiAdmin::Components::Shared::MediumComponent

Inherits:
BaseComponent
  • Object
show all
Defined in:
lib/flexi_admin/components/shared/medium_component.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(attachment:, variant:, autoplay: false, css_class: nil) ⇒ MediumComponent

attachment: ActiveStorage::Attached::One



10
11
12
13
14
15
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 10

def initialize(attachment:, variant:, autoplay: false, css_class: nil)
  @attachment = attachment
  @variant = variant
  @autoplay = autoplay
  @css_class = css_class
end

Instance Attribute Details

#attachmentObject

Returns the value of attribute attachment.



5
6
7
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 5

def attachment
  @attachment
end

#autoplayObject

Returns the value of attribute autoplay.



5
6
7
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 5

def autoplay
  @autoplay
end

#css_classObject

Returns the value of attribute css_class.



5
6
7
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 5

def css_class
  @css_class
end

#variantObject

Returns the value of attribute variant.



5
6
7
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 5

def variant
  @variant
end

Instance Method Details

#image_srcObject



23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 23

def image_src
  return if attachment.blank?
  return unless attachment.attached?

  if attachment.class != ActiveStorage::Attached::One
    raise "ActiveStorage::Attached::One required, got #{attachment.class}"
  end

  return helpers.url_for(attachment) unless variant

  helpers.url_for(attachment.variant(variant))
rescue ActiveStorage::InvariableError
  helpers.url_for(attachment)
end

#media?Boolean

Returns:

  • (Boolean)


17
18
19
20
21
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 17

def media?
  return false if attachment.blank?

  true
end

#render_mediaObject



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/flexi_admin/components/shared/medium_component.rb', line 38

def render_media
  case attachment.content_type.split("/").first
  when "image"
     :img, nil, src: image_src, class: css_class
  when "video"
     :video, nil, src: image_src,
                             controls: true,
                             class: css_class,
                             onmouseover: autoplay ? "this.play()" : nil,
                             onmouseout: autoplay ? "this.pause()" : nil
  end
end