1
0

Running Quantity#toggle/up/down/left/right through AJAX

This commit is contained in:
cryptogopher 2019-10-27 19:29:12 +01:00
parent 26f653819d
commit daf0bd421e
4 changed files with 99 additions and 73 deletions

View File

@ -28,27 +28,31 @@ class QuantitiesController < ApplicationController
def toggle def toggle
@quantity.update(primary: !@quantity.primary) @quantity.update(primary: !@quantity.primary)
redirect_to project_quantities_url(@project) @quantities = @project.quantities
end end
def up def up
@quantity.move_left if @quantity.left_sibling.present? @quantity.move_left if @quantity.left_sibling.present?
redirect_to project_quantities_url(@project) @quantities = @project.quantities
render :toggle
end end
def down def down
@quantity.move_right if @quantity.right_sibling.present? @quantity.move_right if @quantity.right_sibling.present?
redirect_to project_quantities_url(@project) @quantities = @project.quantities
render :toggle
end end
def left def left
@quantity.move_to_right_of(@quantity.parent) if @quantity.parent.present? @quantity.move_to_right_of(@quantity.parent) if @quantity.parent.present?
redirect_to project_quantities_url(@project) @quantities = @project.quantities
render :toggle
end end
def right def right
@quantity.move_to_child_of(@quantity.left_sibling) if @quantity.left_sibling.present? @quantity.move_to_child_of(@quantity.left_sibling) if @quantity.left_sibling.present?
redirect_to project_quantities_url(@project) @quantities = @project.quantities
render :toggle
end end
private private

View File

@ -0,0 +1,86 @@
<% if @quantities.many? %>
<table class="list">
<thead>
<tr>
<th><%= l(:field_name) %></th>
<th><%= l(:field_order) %></th>
<th><%= l(:field_domain) %></th>
<th><%= l(:field_description) %></th>
<th><%= l(:field_action) %></th>
</tr>
</thead>
<tbody>
<% Quantity.each_with_level(@quantities) do |q, level| %>
<%
next if q.new_record?
quantity_class = "quantity"
quantity_class += " project idnt idnt-#{level+1}"
quantity_class += " primary" if q.primary
quantity_class += " anchor" if @anchor == q.id
%>
<tr id="quantity-<%= q.id %>" class="<%= quantity_class %>">
<td class="name">
<%= link_to '', toggle_quantity_path(q), {
remote: true,
method: :post,
class: "icon #{q.primary ? "icon-fav" : "icon-fav-off"}"
}
%>
<%= q.name %>
</td>
<td class="order">
<%=
if q.left_sibling.present?
link_to '', up_quantity_path(q), {
remote: true,
method: :post,
class: "icon icon-move-up"
}
else
link_to '', '', {class: "icon"}
end
%>
<%=
if q.right_sibling.present?
link_to '', down_quantity_path(q), {
remote: true,
method: :post,
class: "icon icon-move-down"
}
else
link_to '', '', {class: "icon"}
end
%>
<%=
if q.parent.present?
link_to '', left_quantity_path(q), {
remote: true,
method: :post,
class: "icon icon-move-left"
}
else
link_to '', '', {class: "icon"}
end
%>
<%=
if q.left_sibling.present?
link_to '', right_quantity_path(q), {
remote: true,
method: :post,
class: "icon icon-move-right"
}
else
link_to '', '', {class: "icon"}
end
%>
</td>
<td class="domain"><%= q.domain %></td>
<td class="description"><%= q.description %></td>
<td class="action"><%= delete_link quantity_path(q), data: {} %></td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p class="nodata"><%= l(:label_no_data) %></p>
<% end %>

View File

@ -23,71 +23,6 @@
</div> </div>
<h2><%= t ".heading" %></h2> <h2><%= t ".heading" %></h2>
<% if @quantities.many? %> <div id='quantities'>
<table class="list"> <%= render :partial => 'quantities/list' %>
<thead> </div>
<tr>
<th><%= l(:field_name) %></th>
<th><%= l(:field_order) %></th>
<th><%= l(:field_domain) %></th>
<th><%= l(:field_description) %></th>
<th><%= l(:field_action) %></th>
</tr>
</thead>
<tbody>
<% Quantity.each_with_level(@quantities) do |q, level| %>
<%
next if q.new_record?
quantity_class = "quantity"
quantity_class += " project idnt idnt-#{level+1}"
quantity_class += " primary" if q.primary
%>
<tr id="quantity-<%= q.id %>" class="<%= quantity_class %>">
<td class="name">
<%= link_to '', toggle_quantity_path(q),
{method: :post, class: "icon #{q.primary ? "icon-fav" : "icon-fav-off"}"} %>
<%= q.name %>
</td>
<td class="order">
<%=
if q.left_sibling.present?
link_to '', up_quantity_path(q), {method: :post, class: "icon icon-move-up"}
else
link_to '', '', {class: "icon"}
end
%>
<%=
if q.right_sibling.present?
link_to '', down_quantity_path(q),
{method: :post, class: "icon icon-move-down"}
else
link_to '', '', {class: "icon"}
end
%>
<%=
if q.parent.present?
link_to '', left_quantity_path(q),
{method: :post, class: "icon icon-move-left"}
else
link_to '', '', {class: "icon"}
end
%>
<%=
if q.left_sibling.present?
link_to '', right_quantity_path(q),
{method: :post, class: "icon icon-move-right"}
else
link_to '', '', {class: "icon"}
end
%>
</td>
<td class="domain"><%= q.domain %></td>
<td class="description"><%= q.description %></td>
<td class="action"><%= delete_link quantity_path(q), data: {} %></td>
</tr>
<% end %>
</tbody>
</table>
<% else %>
<p class="nodata"><%= l(:label_no_data) %></p>
<% end %>

View File

@ -0,0 +1 @@
$('#quantities').html('<%= escape_javascript(render :partial => 'quantities/list') %>');