Class: DcRotatorRenderer

Inherits:
Object
  • Object
show all
Defined in:
app/helpers/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/helpers/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 rorator renderer method.



126
127
128
129
130
131
132
133
134
135
136
# File 'app/helpers/dc_rotator_renderer.rb', line 126

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



98
99
100
101
102
103
104
105
106
107
108
# File 'app/helpers/dc_rotator_renderer.rb', line 98

def link_for_rotator_settings
  table = @opts[:table] || @parent.page.class.to_s
  id = (table == 'dc_site') ? @parent.site.id : @parent.page.id
%Q[  
  #{@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/helpers/dc_rotator_renderer.rb', line 59

def one_element(doc)
  html = if doc.picture.empty?
%Q[<div class="orbit-text">#{doc.text.html_safe}</div>]
    else  
%Q[<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



149
150
151
# File 'app/helpers/dc_rotator_renderer.rb', line 149

def render_css
  @parts_css
end

#render_htmlObject



141
142
143
144
# File 'app/helpers/dc_rotator_renderer.rb', line 141

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
92
93
# File 'app/helpers/dc_rotator_renderer.rb', line 73

def rotator_4display
  delay = @opts.dig(:settings, @opts[:element], 'delay') || 2000
  html = %Q[
<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">' 
# each document
  n, is_active = 0, 'is-active'
  rotator_documents.each do |doc|
    html << %Q[<li class="#{is_active} orbit-slide"> <figure class="orbit-figure">]
    html << one_element(doc)
    html << '</figure> </li>'
    nav  << %Q[<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.



113
114
115
116
117
118
119
120
121
# File 'app/helpers/dc_rotator_renderer.rb', line 113

def rotator_4edit
  html = %Q[<div class="orbit">#{link_for_rotator_settings}]
# each document
  rotator_documents.each do |doc|
    html << %Q[<div class="orbit-slide">#{@parent.dc_link_for_edit(table: 'dc_rotator', id: doc.id, title: 'helpers.dc_rotator.edit')}</div>]
    html << one_element(doc)
  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/helpers/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