Class: Card::Act::ActRenderer
- Inherits:
-
Object
- Object
- Card::Act::ActRenderer
show all
- Includes:
- Bootstrapper
- Defined in:
- mod/history/lib/card/act/act_renderer.rb,
mod/history/lib/card/act/act_renderer/bridge_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
Defined Under Namespace
Classes: AbsoluteActRenderer, BridgeActRenderer, RelativeActRenderer
Instance Method Summary
collapse
#bootstrap, #bs
#components, #include_component, #load_components, #to_const
Constructor Details
#initialize(format, act, args) ⇒ ActRenderer
Returns a new instance of ActRenderer.
4
5
6
7
8
9
10
11
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 4
def initialize format, act, args
@format = format
@act = act
@act_card = act.card
@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
15
16
17
18
19
20
21
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 15
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_title ⇒ Object
47
48
49
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 47
def absolute_title
accordion_expand_link(@act_card.name)
end
|
#accordion_expand_link(text) ⇒ Object
114
115
116
117
118
119
120
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 114
def accordion_expand_link text
<<-HTML
<a>
#{text}
</a>
HTML
end
|
#accordion_expand_options ⇒ Object
134
135
136
137
138
139
140
141
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 134
def accordion_expand_options
{
"data-toggle" => "collapse",
"data-target" => ".#{collapse_id}",
"aria-expanded" => true,
"aria-controls" => collapse_id
}
end
|
#act_accordion ⇒ Object
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
125
126
127
128
129
130
131
132
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 125
def act_accordion
context = @act.main_action.draft ? :warning : :default
<<-HTML
<div class="card card-#{context} nodblclick">
#{act_accordion_panel}
</div>
HTML
end
|
#act_accordion_body ⇒ Object
157
158
159
160
161
162
163
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 157
def act_accordion_body
wrap_with :div, id: collapse_id,
class: "collapse #{collapse_id}",
"data-parent": ".act-accordion-group" do
wrap_with :div, details, class: "card-body"
end
end
|
#act_accordion_heading ⇒ Object
151
152
153
154
155
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 151
def act_accordion_heading
wrap_with :div, act_panel_options.merge(accordion_expand_options) do
wrap_with(:h5, , class: "mb-0") + subtitle
end
end
|
#act_accordion_panel ⇒ Object
147
148
149
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 147
def act_accordion_panel
act_accordion_heading + act_accordion_body
end
|
#act_links ⇒ Object
66
67
68
69
70
71
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 66
def act_links
[
link_to_history,
(link_to_act_card unless @act_card.trash)
].compact.join " "
end
|
#act_panel_options ⇒ Object
143
144
145
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 143
def act_panel_options
{ class: "card-header", role: "tab", id: "heading-#{collapse_id}" }
end
|
#act_type ⇒ Object
194
195
196
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 194
def act_type
@act.main_action.action_type
end
|
89
90
91
92
93
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 89
def
true
end
|
#approved_actions ⇒ Object
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&.ok?(:read) }
end
|
#autosaved_draft_link(opts = {}) ⇒ Object
209
210
211
212
213
214
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 209
def autosaved_draft_link opts={}
text = opts.delete(:text) || "autosaved draft"
opts[:path] = { edit_draft: true }
add_class opts, "navbar-link"
link_to_view :edit, text, opts
end
|
#collapse_id ⇒ Object
110
111
112
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 110
def collapse_id
"act-id-#{@act.id}"
end
|
#count_types ⇒ Object
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
|
#deletion_act? ⇒ Boolean
190
191
192
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 190
def deletion_act?
act_type == :delete
end
|
#details ⇒ Object
51
52
53
54
55
56
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 51
def details
approved_actions[0..20].map do |action|
Action::ActionRenderer.new(@format, action, ,
:summary).render
end.join
end
|
#edited_ago ⇒ Object
104
105
106
107
108
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 104
def edited_ago
return "" unless @act.acted_at
"#{time_ago_in_words(@act.acted_at)} ago"
end
|
33
34
35
36
37
38
39
40
41
42
43
44
45
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 33
def
bs_layout do
row xs: [10, 2] do
column do
html title
tag(:span, "text-muted pl-1 badge") { summary }
end
column act_links, class: "text-right"
end
end
end
|
#link_to_act_card ⇒ Object
73
74
75
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 73
def link_to_act_card
link_to_card @act_card, icon_tag(:new_window), class: "_stop_propagation"
end
|
#link_to_history ⇒ Object
77
78
79
80
81
82
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 77
def link_to_history
link_to_card @act_card, icon_tag(:history),
path: { view: :history, look_in_trash: true },
class: "_stop_propagation",
rel: "nofollow"
end
|
#render ⇒ Object
27
28
29
30
31
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 27
def render
return "" unless @act_card
act_accordion
end
|
#respond_to_missing?(method_name, _include_private = false) ⇒ Boolean
23
24
25
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 23
def respond_to_missing? method_name, _include_private=false
@format.respond_to? method_name
end
|
#rollback_link ⇒ Object
Revert:
current update
Restore:
current deletion
Revert and Restore:
old deletions
blank:
current create
save as current:
not current, not deletion
175
176
177
178
179
180
181
182
183
184
185
186
187
188
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 175
def rollback_link
return unless card.ok? :update
wrap_with :div, class: "act-link collapse #{collapse_id} float-right" do
content_tag(:small, revert_link)
end
end
|
#show_or_hide_changes_link ⇒ Object
198
199
200
201
202
203
204
205
206
207
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 198
def show_or_hide_changes_link
wrap_with :div, class: "act-link" do
@format.link_to_view(
:act, "#{@args[:hide_diff] ? 'Show' : 'Hide'} changes",
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
|
#summary ⇒ Object
58
59
60
61
62
63
64
|
# File 'mod/history/lib/card/act/act_renderer.rb', line 58
def summary
%i[create update delete draft].map do |type|
next unless count_types[type].positive?
"#{@format.action_icon type}<small> #{count_types[type]}</small>"
end.compact.join "<small class='text-muted'> | </small>"
end
|