Class: Card::Act::ActRenderer

Inherits:
Object
  • Object
show all
Includes:
Bootstrapper
Defined in:
mod/history/lib/card/act/act_renderer.rb,
mod/history/lib/card/act/act_renderer/absolute_act_renderer.rb,
mod/history/lib/card/act/act_renderer/relative_act_renderer.rb

Direct Known Subclasses

AbsoluteActRenderer, RelativeActRenderer

Defined Under Namespace

Classes: AbsoluteActRenderer, RelativeActRenderer

Instance Method Summary collapse

Methods included from Bootstrapper

#bootstrap, #bs

Methods included from Bootstrap::ComponentLoader

#components, #include_component, #load_components, #to_const

Constructor Details

#initialize(format, act, args) ⇒ ActRenderer

Returns a new instance of ActRenderer.



6
7
8
9
10
11
12
# File 'mod/history/lib/card/act/act_renderer.rb', line 6

def initialize format, act, args
  @format = format
  @act = act
  @args = args
  @card = @format.card
  @context = @args[:act_context]
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method_name, *args, &block) ⇒ Object



16
17
18
19
20
21
22
# File 'mod/history/lib/card/act/act_renderer.rb', line 16

def method_missing(method_name, *args, &block)
  if block_given?
    @format.send(method_name, *args, &block)
  else
    @format.send(method_name, *args)
  end
end

Instance Method Details

#absolute_titleObject



50
51
52
# File 'mod/history/lib/card/act/act_renderer.rb', line 50

def absolute_title
  accordion_expand_link(@act.card.name)
end


112
113
114
115
116
117
118
# File 'mod/history/lib/card/act/act_renderer.rb', line 112

def accordion_expand_link text
  <<-HTML
    <a>
      #{text}
    </a>
  HTML
end

#accordion_expand_optionsObject



132
133
134
135
136
137
138
139
140
# File 'mod/history/lib/card/act/act_renderer.rb', line 132

def accordion_expand_options
  {
    "data-toggle" => "collapse",
    "data-parent" => "#accordion-#{collapse_id}",
    "data-target" => ".#{collapse_id}",
    "aria-expanded" => true,
    "aria-controls" => collapse_id
  }
end

#act_accordionObject

TODO: change accordion API in bootstrap/helper.rb so that it can be used here. The problem is that here we have extra links in the title that are not supposed to expand the accordion



123
124
125
126
127
128
129
130
# File 'mod/history/lib/card/act/act_renderer.rb', line 123

def act_accordion
  context = @act.main_action.draft ? :warning : :default
  <<-HTML
  <div class="panel panel-#{context}">
    #{act_accordion_panel}
  </div>
  HTML
end

#act_accordion_bodyObject



156
157
158
159
160
161
# File 'mod/history/lib/card/act/act_renderer.rb', line 156

def act_accordion_body
  wrap_with :div, id: collapse_id,
                  class: "panel-collapse collapse #{collapse_id}" do
    wrap_with :div, details, class: "panel-body"
  end
end

#act_accordion_headingObject



150
151
152
153
154
# File 'mod/history/lib/card/act/act_renderer.rb', line 150

def act_accordion_heading
  wrap_with :div, act_panel_options.merge(accordion_expand_options) do
    wrap_with :h4, header, class: "panel-title"
  end
end

#act_accordion_panelObject



146
147
148
# File 'mod/history/lib/card/act/act_renderer.rb', line 146

def act_accordion_panel
  act_accordion_heading + act_accordion_body
end


68
69
70
71
72
73
# File 'mod/history/lib/card/act/act_renderer.rb', line 68

def act_links
  [
    link_to_history,
    (link_to_act_card unless @act.card.trash)
  ].compact.join " "
end

#act_panel_optionsObject



142
143
144
# File 'mod/history/lib/card/act/act_renderer.rb', line 142

def act_panel_options
  { class: "panel-heading", role: "tab", id: "heading-#{collapse_id}" }
end

#action_header?Boolean

Returns:

  • (Boolean)


89
90
91
92
93
# File 'mod/history/lib/card/act/act_renderer.rb', line 89

def action_header?
  true
  # @action_header ||= approved_actions.size != 1 ||
  #                   approved_actions[0].card_id != @format.card.id
end

#approved_actionsObject



84
85
86
87
# File 'mod/history/lib/card/act/act_renderer.rb', line 84

def approved_actions
  @approved_actions ||= actions.select { |a| a.card && a.card.ok?(:read) }
  # FIXME: should not need to test for presence of card here.
end

#collapse_idObject



108
109
110
# File 'mod/history/lib/card/act/act_renderer.rb', line 108

def collapse_id
  "act-id-#{@act.id}"
end

#count_typesObject



95
96
97
98
99
100
101
102
# File 'mod/history/lib/card/act/act_renderer.rb', line 95

def count_types
  @count_types ||=
    approved_actions.each_with_object(
      Hash.new { |h, k| h[k] = 0 }
    ) do |action, type_cnt|
      type_cnt[action.action_type] += 1
    end
end

#detailsObject



54
55
56
57
58
59
# File 'mod/history/lib/card/act/act_renderer.rb', line 54

def details
  approved_actions[0..20].map do |action|
    Action::ActionRenderer.new(@format, action, action_header?,
                               :summary).render
  end.join
end

#edited_agoObject



104
105
106
# File 'mod/history/lib/card/act/act_renderer.rb', line 104

def edited_ago
  "#{time_ago_in_words(@act.acted_at)} ago"
end

#headerObject



32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
# File 'mod/history/lib/card/act/act_renderer.rb', line 32

def header
  #::Bootstrap.new(self).render do
  #::Boo.bs do
    bs_layout do
      row 10, 2 do
        column do
          html title
          tag(:span, "text-muted") { summary }
        end
        column act_links, class: "text-right"
      end
      row 12 do
        column subtitle
      end
    end
  #end
end


75
76
77
# File 'mod/history/lib/card/act/act_renderer.rb', line 75

def link_to_act_card
  link_to_card @act.card, glyphicon("new-window")
end


79
80
81
82
# File 'mod/history/lib/card/act/act_renderer.rb', line 79

def link_to_history
  link_to_card @act.card, glyphicon("time"), path: { view: :history,
                                                     look_in_trash: true }
end

#previous_actionObject



176
177
178
179
# File 'mod/history/lib/card/act/act_renderer.rb', line 176

def previous_action
  # TODO: optimize
  actions.select { |action| action.card.last_action_id != action.id }
end

#renderObject



28
29
30
# File 'mod/history/lib/card/act/act_renderer.rb', line 28

def render
  act_accordion
end

#respond_to_missing?(method_name, _include_private = false) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
# File 'mod/history/lib/card/act/act_renderer.rb', line 24

def respond_to_missing? method_name, _include_private=false
  @format.respond_to? method_name
end


163
164
165
166
167
168
169
170
171
172
173
174
# File 'mod/history/lib/card/act/act_renderer.rb', line 163

def rollback_link
  return unless card.ok? :update
  return unless (prior = previous_action)
  wrap_with :div, class: "act-link collapse #{collapse_id}" do
    link_to "Save as current",
            class: "slotter", remote: true,
            method: :post,    rel: "nofollow",
            "data-slot-selector" => ".card-slot.history-view",
            path: { action: :update, action_ids: prior,
                    view: :open,     look_in_trash: true }
  end
end


181
182
183
184
185
186
187
188
189
190
191
# File 'mod/history/lib/card/act/act_renderer.rb', line 181

def show_or_hide_changes_link
  wrap_with :div, class: "act-link" do
    @format.link_to_view(
      :act, "#{@args[:hide_diff] ? 'Show' : 'Hide'} changes",
      class: "slotter",
      path: { act_id:      @args[:act].id,      act_seq: @args[:act_seq],
              hide_diff:  !@args[:hide_diff],   action_view: :expanded,
              act_context: @args[:act_context], look_in_trash: true }
    )
  end
end

#summaryObject



61
62
63
64
65
66
# File 'mod/history/lib/card/act/act_renderer.rb', line 61

def summary
  [:create, :update, :delete, :draft].map do |type|
    next unless count_types[type] > 0
    "#{@format.action_icon type} #{count_types[type]}"
  end.compact.join " | "
end