1
0

Disallowed moving quantity into parent/child relationship if domains differ

Generalized quantity up/down/left/right actions into 'move'
This commit is contained in:
cryptogopher 2019-11-22 22:43:11 +01:00
parent 0820a90897
commit 8c073494e5
5 changed files with 36 additions and 58 deletions

View File

@ -1,7 +1,7 @@
class QuantitiesController < ApplicationController
before_action :init_session_filters
before_action :find_project_by_project_id, only: [:index, :create, :filter]
before_action :find_quantity, only: [:destroy, :toggle, :up, :down, :left, :right]
before_action :find_quantity, only: [:destroy, :toggle, :move]
before_action :authorize
def index
@ -40,26 +40,19 @@ class QuantitiesController < ApplicationController
render :toggle
end
def up
@quantity.move_left if @quantity.left_sibling.present?
prepare_quantities
render :toggle
end
def move
direction = params[:direction].to_sym
case direction
when :up
@quantity.move_left
when :down
@quantity.move_right
when :left
@quantity.move_to_right_of(@quantity.parent)
when :right
@quantity.move_to_child_of(@quantity.left_sibling)
end if @quantity.movable?(direction)
def down
@quantity.move_right if @quantity.right_sibling.present?
prepare_quantities
render :toggle
end
def left
@quantity.move_to_right_of(@quantity.parent) if @quantity.parent.present?
prepare_quantities
render :toggle
end
def right
@quantity.move_to_child_of(@quantity.left_sibling) if @quantity.left_sibling.present?
prepare_quantities
render :toggle
end

View File

@ -23,6 +23,22 @@ class Quantity < ActiveRecord::Base
end
end
def movable?(direction)
case direction
when :up
self.left_sibling.present?
when :down
self.right_sibling.present?
when :left
self.parent.present?
when :right
left = self.left_sibling
left.present? && (left.domain == self.domain)
else
false
end
end
def toggle_primary!
self.toggle!(:primary)
end

View File

@ -32,50 +32,19 @@
<%= q.name %>
</td>
<td class="order">
<% [:up, :down, :left, :right].each do |direction| %>
<%=
if q.left_sibling.present?
link_to '', up_quantity_path(q), {
if q.movable?(direction)
link_to '', move_quantity_path(q, direction), {
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"
class: "icon icon-move-#{direction}"
}
else
link_to '', '', {class: "icon"}
end
%>
<% end %>
</td>
<td class="domain"><%= q.domain %></td>
<td class="description"><%= q.description %></td>

View File

@ -20,7 +20,7 @@ resources :projects do
resources :sources, :only => [:index, :create, :destroy]
resources :quantities, :only => [:index, :create, :destroy] do
post 'toggle', on: :member
post 'up', 'down', 'left', 'right', on: :member
post 'move/:direction', to: 'quantities#move', as: :move, on: :member
get 'filter', on: :collection
end
resources :units, :only => [:index, :create, :destroy]

View File

@ -27,7 +27,7 @@ Redmine::Plugin.register :body_tracking do
:measurements => [:create, :destroy, :toggle],
:ingredients => [:create, :destroy, :toggle, :import, :toggle_nutrient_column],
:sources => [:create, :destroy],
:quantities => [:create, :destroy, :toggle, :up, :down, :left, :right],
:quantities => [:create, :destroy, :toggle, :move],
:units => [:create, :destroy],
}, require: :loggedin
end