diff --git a/evewspace/Map/models.py b/evewspace/Map/models.py index a4056067..425fa1b9 100644 --- a/evewspace/Map/models.py +++ b/evewspace/Map/models.py @@ -12,7 +12,7 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -from django.db import models +from django.db import models, transaction from django.conf import settings from django.contrib.auth.models import Group from core.models import SystemData @@ -517,14 +517,52 @@ def promote_system(self, user): True) def move_up(self): - """Assigns this system the highest display priority of its siblings""" + """Switch display priority with the sibling above""" if not self.parentsystem: return - max_priority = self.parentsystem.childsystems.aggregate( - max_prio=models.Max('display_order_priority'))['max_prio'] - self.display_order_priority = max_priority + 1 - self.save() + with transaction.atomic(): + siblings = self.parentsystem.childsystems.order_by( + '-display_order_priority', '-pk') + i = siblings.count() + it = siblings.iterator() + while True: + try: + mapsys = it.next() + if self == mapsys: + next_mapsys = it.next() + next_mapsys.display_order_priority = i + next_mapsys.save() + i -= 1 + except StopIteration: + break + mapsys.display_order_priority = i + mapsys.save() + i -= 1 + + def move_down(self): + """Switch display priority with the sibling below""" + if not self.parentsystem: + return + + with transaction.atomic(): + siblings = self.parentsystem.childsystems.order_by( + 'display_order_priority', 'pk') + i = 0 + it = siblings.iterator() + while True: + try: + mapsys = it.next() + if self == mapsys: + next_mapsys = it.next() + next_mapsys.display_order_priority = i + next_mapsys.save() + i += 1 + except StopIteration: + break + mapsys.display_order_priority = i + mapsys.save() + i += 1 def as_dict(self): """Returns a dict representation of the system.""" diff --git a/evewspace/Map/static/css/map.css b/evewspace/Map/static/css/map.css index 0d461d72..f5245898 100644 --- a/evewspace/Map/static/css/map.css +++ b/evewspace/Map/static/css/map.css @@ -323,3 +323,6 @@ fieldset.addSystemWormholeType label.checkbox input[type="checkbox"] { margin: 0.8em 0.2em; } +ul#moveDropdown li { + cursor: pointer; +} diff --git a/evewspace/Map/static/js/map_functions.js b/evewspace/Map/static/js/map_functions.js index d80f375d..ae7a9084 100644 --- a/evewspace/Map/static/js/map_functions.js +++ b/evewspace/Map/static/js/map_functions.js @@ -1666,8 +1666,8 @@ function togglepilotlist() { RefreshMap(); } -function MoveSystemUp(msID) { - var address = "system/" + msID + "/moveup/"; +function MoveSystem(msID, action) { + var address = "system/" + msID + "/movesys/" + action + "/"; $.ajax({ url: address, type: "POST", diff --git a/evewspace/Map/templates/system_menu.html b/evewspace/Map/templates/system_menu.html index 04b7ecc0..3d19025f 100644 --- a/evewspace/Map/templates/system_menu.html +++ b/evewspace/Map/templates/system_menu.html @@ -26,7 +26,15 @@ Add System {% endif %} {% if can_edit and mapsys.has_siblings %} - Move Up +