Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorValery Sizov <valery@gitlab.com>2017-03-10 18:12:31 +0300
committerValery Sizov <valery@gitlab.com>2017-03-14 15:11:59 +0300
commit5670777735a615b511c3282e8fc79b67c74669bc (patch)
tree0659efe220286457fb00eaf0eba2c808f9cd3f8a /app/models/concerns/relative_positioning.rb
parent67686e38fdb1d9c427a39ff1862af691ccd4e598 (diff)
[Issue sorting] Filling positions preferable in the middle
Diffstat (limited to 'app/models/concerns/relative_positioning.rb')
-rw-r--r--app/models/concerns/relative_positioning.rb23
1 files changed, 13 insertions, 10 deletions
diff --git a/app/models/concerns/relative_positioning.rb b/app/models/concerns/relative_positioning.rb
index ec23c8a08fb..f8ab16a9f4c 100644
--- a/app/models/concerns/relative_positioning.rb
+++ b/app/models/concerns/relative_positioning.rb
@@ -2,6 +2,7 @@ module RelativePositioning
extend ActiveSupport::Concern
MIN_POSITION = 0
+ START_POSITION = Gitlab::Database::MAX_INT_VALUE / 2
MAX_POSITION = Gitlab::Database::MAX_INT_VALUE
DISTANCE = 500
@@ -9,10 +10,6 @@ module RelativePositioning
after_save :save_positionable_neighbours
end
- def min_relative_position
- self.class.in_projects(project.id).minimum(:relative_position)
- end
-
def max_relative_position
self.class.in_projects(project.id).maximum(:relative_position)
end
@@ -27,7 +24,7 @@ module RelativePositioning
maximum(:relative_position)
end
- prev_pos || MIN_POSITION
+ prev_pos
end
def next_relative_position
@@ -40,7 +37,7 @@ module RelativePositioning
minimum(:relative_position)
end
- next_pos || MAX_POSITION
+ next_pos
end
def move_between(before, after)
@@ -72,7 +69,7 @@ module RelativePositioning
end
def move_to_end
- self.relative_position = position_between(max_relative_position, MAX_POSITION)
+ self.relative_position = position_between(max_relative_position || START_POSITION, MAX_POSITION)
end
private
@@ -87,10 +84,16 @@ module RelativePositioning
pos_before, pos_after = [pos_before, pos_after].sort
- if pos_after - pos_before > DISTANCE * 2
- pos_before + DISTANCE
+ if pos_after - pos_before < DISTANCE * 2
+ (pos_after + pos_before) / 2
else
- pos_before + (pos_after - pos_before) / 2
+ if pos_before == MIN_POSITION
+ pos_after - DISTANCE
+ elsif pos_after == MAX_POSITION
+ pos_before + DISTANCE
+ else
+ (pos_after + pos_before) / 2
+ end
end
end