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 + {% endif %} {% if perms.SiteTracker.can_sitetracker and not stfleets|length %} ST Fleet Here diff --git a/evewspace/Map/urls.py b/evewspace/Map/urls.py index 85279ced..5e091623 100644 --- a/evewspace/Map/urls.py +++ b/evewspace/Map/urls.py @@ -45,7 +45,7 @@ url(r'^signatures/(?P\d+)/', include(sigpatterns)), url(r'^collapse/$', 'collapse_system'), url(r'^resurrect/$', 'resurrect_system'), - url(r'^moveup/$', 'move_system_up'), + url(r'^movesys/(?Pup|down)/$', 'move_system'), ) wormholepatterns = patterns( diff --git a/evewspace/Map/utils.py b/evewspace/Map/utils.py index fd0ef5f6..e3c12e46 100644 --- a/evewspace/Map/utils.py +++ b/evewspace/Map/utils.py @@ -217,7 +217,7 @@ def create_syslist(self): # sort children by priority for l in children.values(): - l.sort(key=priorities.__getitem__, reverse=True) + l.sort(key=priorities.__getitem__) columns = [] todo = [(children[None][0], 0)] diff --git a/evewspace/Map/views.py b/evewspace/Map/views.py index e6130756..a5cd764e 100644 --- a/evewspace/Map/views.py +++ b/evewspace/Map/views.py @@ -1392,13 +1392,19 @@ def purge_signatures(request, map_id, ms_id): return HttpResponse(status=400) @require_map_permission(permission=2) -def move_system_up(request, map_id, ms_id): +def move_system(request, map_id, ms_id, action): if not request.is_ajax(): raise PermissionDenied if not request.method == "POST": return HttpResponse(status=400) mapsys = get_object_or_404(MapSystem, pk=ms_id) - mapsys.move_up() + if action == 'up': + mapsys.move_up() + elif action == 'down': + mapsys.move_down(); + else: + raise Http404 + return HttpResponse()