Class: DcRotatorRenderer

Inherits:
Object
  • Object
show all
Defined in:
app/renderers/dc_rotator_renderer.rb

Overview

Renderer for rotator web element

Instance Method Summary collapse

Constructor Details

#initialize(parent, opts = {}) ⇒ DcRotatorRenderer

Returns a new instance of DcRotatorRenderer.



32
33
34
35
36
37
38
# File 'app/renderers/dc_rotator_renderer.rb', line 32

def initialize( parent, opts={} )
  @parent    = parent
  @opts      = opts
  @opts[:element] ||= 'rotator'  
  @parts_css = ''
  self
end

Instance Method Details

#defaultObject

Default rotator renderer method.



123
124
125
126
127
128
129
130
131
132
133
# File 'app/renderers/dc_rotator_renderer.rb', line 123

def default
  clas = @opts.dig(:settings, @opts[:element], 'class')
  clas = "#{clas} #{@opts[:div_class]}" if @opts[:div_class]
  html = clas.blank? ? '' : "<div class=\"#{clas}\">"
  html << if @opts[:edit_mode] > 1
    rotator_4edit
  else
    rotator_4display
  end
  html << (clas.blank? ? '' : '</div>')
end

Create code for rotator settings link



96
97
98
99
100
101
102
103
104
105
106
# File 'app/renderers/dc_rotator_renderer.rb', line 96

def link_for_rotator_settings
  table = @opts[:table] || @parent.page.class.to_s
  id = (table == 'dc_site') ? @parent.site.id : @parent.page.id
%(  
  #{@parent.dc_link_for_edit(table: 'dc_memory', title: 'helpers.dc_rotator.settings', 
                             form_name: 'dc_rotator_settings', icon: 'cog lg',
                             id: id, location: table, action: 'new',
                             element: @opts[:element] )}
  #{@parent.dc_link_for_create(table: 'dc_rotator', title: 'helpers.dc_rotator.create')}
)
end

#one_element(doc) ⇒ Object

Prepares code for displaying single element



59
60
61
62
63
64
65
66
67
68
# File 'app/renderers/dc_rotator_renderer.rb', line 59

def one_element(doc)
  html = if doc.picture.empty?
%(<div class="orbit-text">#{doc.text.html_safe}</div>)
    else  
%(<div class="orbit-pic-with-text" style="position: relative;"><img class="orbit-image" src="#{doc.picture}" alt="#{doc.description}">) +
   (doc.text_over ? "<div style=\"#{doc.css_over}\">#{doc.text}</div>" : '') + '</div>'
  end.html_safe
  html = @parent.link_to(html, doc.link, target: doc.target) unless doc.link.empty?
  html
end

#render_cssObject



146
147
148
# File 'app/renderers/dc_rotator_renderer.rb', line 146

def render_css
  @parts_css
end

#render_htmlObject



138
139
140
141
# File 'app/renderers/dc_rotator_renderer.rb', line 138

def render_html
  method = @opts[:method] || 'default'
  respond_to?(method) ? send(method) : "Error rotator: Method #{method} doesn't exist!"
end

#rotator_4displayObject

Render rotator for display.



73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'app/renderers/dc_rotator_renderer.rb', line 73

def rotator_4display
  delay = @opts.dig(:settings, @opts[:element], 'delay') || 2000
  html = %(
<div class="orbit" role="region" aria-label="" data-orbit data-timer-delay="#{delay}">
  <div class="orbit-wrapper">
    <ul class="orbit-container">)

  nav = '<nav class="orbit-bullets">' 
  n, is_active = 0, 'is-active'
  rotator_documents.each do |doc|
    html << %(<li class="#{is_active} orbit-slide"> <figure class="orbit-figure">)
    html << "#{one_element(doc)}</figure> </li>"
    nav  << %(<button class="#{is_active}" data-slide="#{n}"><span class="show-for-sr">Slide #{n+1} details.</span></button>)

    is_active = ''
    n+=1
  end
  "#{html}</ul>#{nav}</nav></div></div>"
end

#rotator_4editObject

Render rotator for edit.



111
112
113
114
115
116
117
118
# File 'app/renderers/dc_rotator_renderer.rb', line 111

def rotator_4edit
  html = %(<div class="orbit">#{link_for_rotator_settings})
  rotator_documents.each do |doc|
    html << "<div>#{@parent.dc_link_for_edit(table: 'dc_rotator', id: doc.id, title: 'helpers.dc_rotator.edit')}"
    html << "#{one_element(doc)}</div>"
  end
  "#{html}</div>"
end

#rotator_documentsObject

Fetch documents displayed by rorator



43
44
45
46
47
48
49
50
51
52
53
54
# File 'app/renderers/dc_rotator_renderer.rb', line 43

def rotator_documents
  kats  = @opts.dig(:settings, @opts[:element], 'kats')
  query = if kats
    DcRotator.where(:kats.in => kats, active: true)
  else
    DcRotator.where(active: true)
  end
  query = query.and({"$or" => [{:valid_from => nil}, {:valid_from.lt => Time.now}]}, 
                    {"$or" => [{:valid_until => nil}, {:valid_until.gt => Time.now}]}) 
                  
  query.order_by(order: 1).limit(10)
end