Move quantity header generation to helper
This commit is contained in:
parent
7b2b855d56
commit
847975b36d
@ -58,7 +58,7 @@ module BodyTrackersHelper
|
||||
end
|
||||
end
|
||||
|
||||
def quantities_table_header(quantities)
|
||||
def quantities_table_header(quantities, *fields)
|
||||
# spec: table of rows (tr), where each row is a hash of cells (td) (hash keeps items
|
||||
# ordered the way they were added). Hash values determine cell property:
|
||||
# * int > 0 - quantity name-labelled cell with 'int' size colspan
|
||||
@ -91,6 +91,47 @@ module BodyTrackersHelper
|
||||
single_columns.each { |q| row.delete(q) }
|
||||
end
|
||||
|
||||
spec
|
||||
total_width = fields.length + quantities.length + 1
|
||||
table_rows = []
|
||||
spec.zip(spec[1..-1]).collect do |row, next_row|
|
||||
table_headers = []
|
||||
|
||||
table_headers << fields.collect do |field|
|
||||
tag.th(rowspan: spec.length, style: "width: #{100/total_width}%") { l(field) }
|
||||
end if row == spec.first
|
||||
|
||||
row.each do |q, span|
|
||||
row_attrs = {class: []}
|
||||
row_attrs[:class] << 'interim' if (row != spec.last) && (span >= 0)
|
||||
row_attrs[:class] << (span == 0 ? 'empty' : 'closable ellipsible')
|
||||
row_attrs[:colspan] = span if span > 0
|
||||
row_attrs[:rowspan] = -span if span < 0
|
||||
row_attrs[:style] = "width: #{[span, 1].max * 100/total_width}%"
|
||||
row_attrs[:title] = q.description
|
||||
|
||||
table_headers << tag.th(row_attrs) do
|
||||
unless span == 0
|
||||
button_class = ['icon']
|
||||
if (row == spec.last) || next_row.has_key?(q) || (span < -1)
|
||||
button_class << 'icon-close'
|
||||
else
|
||||
button_class << 'icon-bullet-closed'
|
||||
end
|
||||
button = tag.div(style: "float:right;position:relative;") do
|
||||
link_to '', yield(q.id), {class: button_class, method: :post, remote: true}
|
||||
end
|
||||
button.html_safe + q.name
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
table_headers << tag.th(rowspan: spec.length, style: "width: #{100/total_width}%") do
|
||||
l(:field_action)
|
||||
end if row == spec.first
|
||||
|
||||
table_rows << tag.tr(class: 'header') { table_headers.join.html_safe }
|
||||
end
|
||||
|
||||
tag.thead { table_rows.join.html_safe }
|
||||
end
|
||||
end
|
||||
|
@ -9,23 +9,9 @@
|
||||
<%= error_messages_for *formulas %>
|
||||
|
||||
<table id="readouts" class="list odd-even">
|
||||
<thead>
|
||||
<tr>
|
||||
<% total_width = 3 + @quantities.length %>
|
||||
<th style="width:<%= 2 * 100/total_width%>%"><%= l(:field_taken_at_date) %></th>
|
||||
<% @quantities.each do |q| %>
|
||||
<th style="width:<%= 100/total_width %>%" class="closable ellipsible">
|
||||
<div style="float:right;position:relative;">
|
||||
<%= link_to '',
|
||||
measurement_routine_toggle_exposure_path(@routine, quantity_id: q.id),
|
||||
{class: "icon icon-close", method: :post, remote: true} %>
|
||||
</div>
|
||||
<%= q.name %>
|
||||
</th>
|
||||
<% end %>
|
||||
<th style="width:<%= 100/total_width %>%"><%= l(:field_action) %></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<%= quantities_table_header @quantities, :field_taken_at_date do |quantity_id|
|
||||
measurement_routine_toggle_exposure_path(@routine, quantity_id: quantity_id)
|
||||
end %>
|
||||
|
||||
<tbody>
|
||||
<% extra_quantities = @measurements.values.first.keys - @quantities %>
|
||||
|
@ -5,50 +5,9 @@
|
||||
<%= error_messages_for *formulas %>
|
||||
|
||||
<table id="targets" class="list odd-even">
|
||||
<thead>
|
||||
<% total_width = 2 + @quantities.length %>
|
||||
<% header = quantities_table_header(@quantities) %>
|
||||
<% header.each_with_index do |row, i| %>
|
||||
<tr class="header">
|
||||
<% if i == 0 %>
|
||||
<th rowspan="<%= header.length %>" style="width:<%= 100/total_width %>%">
|
||||
<%= l(:field_effective_from) %>
|
||||
</th>
|
||||
<% end %>
|
||||
|
||||
<% row.each do |q, span| %>
|
||||
<% row_classes = [] %>
|
||||
<% row_classes << 'interim' if (i < header.length-1) && (span >= 0) %>
|
||||
<% row_classes << (span == 0 ? 'empty' : 'closable ellipsible') %>
|
||||
<th <%= raw "class=\"#{row_classes.join(' ')}\"" unless row_classes.empty? %>
|
||||
<%= "colspan=#{span}" if span > 0 %>
|
||||
<%= "rowspan=#{-span}" if span < 0 %>
|
||||
style="width: <%= [span, 1].max * 100/total_width %>%;"
|
||||
title="<%= q.description %>">
|
||||
<% unless span == 0 %>
|
||||
<div style="float:right;position:relative;">
|
||||
<% button_classes = 'icon' %>
|
||||
<% if (i == header.length-1) || header[i+1].has_key?(q) || (span < -1) %>
|
||||
<% button_classes += ' icon-close' %>
|
||||
<% else %>
|
||||
<% button_classes += ' icon-bullet-closed' %>
|
||||
<% end %>
|
||||
<%= link_to '', goal_toggle_exposure_path(@goal, quantity_id: q.id),
|
||||
{class: button_classes, method: :post, remote: true} %>
|
||||
</div>
|
||||
<%= q.name %>
|
||||
<% end %>
|
||||
</th>
|
||||
<% end %>
|
||||
|
||||
<% if i == 0 %>
|
||||
<th rowspan="<%= header.length %>" style="width:<%= 100/total_width %>%;">
|
||||
<%= l(:field_action) %>
|
||||
</th>
|
||||
<% end %>
|
||||
</tr>
|
||||
<% end %>
|
||||
</thead>
|
||||
<%= quantities_table_header @quantities, :field_effective_from do |quantity_id|
|
||||
goal_toggle_exposure_path(@goal, quantity_id: quantity_id)
|
||||
end %>
|
||||
|
||||
<tbody>
|
||||
<% @targets_by_date.each do |date, targets| %>
|
||||
|
Reference in New Issue
Block a user