From cff6b7e661582e9e80e76d86bc93ea48264aaaa7 Mon Sep 17 00:00:00 2001 From: Nyrocron Date: Tue, 24 Mar 2015 13:07:48 +0100 Subject: [PATCH 1/2] implement moving systems up/down on the map --- evewspace/Map/models.py | 50 ++++++++++++++++++--- evewspace/Map/static/css/map.css | 3 ++ evewspace/Map/static/js/map_functions.js | 4 +- evewspace/Map/templates/system_menu.html | 56 ++++++++++++++---------- evewspace/Map/urls.py | 2 +- evewspace/Map/utils.py | 2 +- evewspace/Map/views.py | 10 ++++- 7 files changed, 91 insertions(+), 36 deletions(-) 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 d1581002..a46ad52b 100644 --- a/evewspace/Map/static/js/map_functions.js +++ b/evewspace/Map/static/js/map_functions.js @@ -1661,8 +1661,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..8f4f1472 100644 --- a/evewspace/Map/templates/system_menu.html +++ b/evewspace/Map/templates/system_menu.html @@ -26,33 +26,41 @@ 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 +{% endif %} + {% if can_edit %} {% if isinterest %} 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() From e7a839df95e820567138a3b5f6bd510d5d1ea13b Mon Sep 17 00:00:00 2001 From: Nyrocron Date: Wed, 1 Apr 2015 10:34:36 +0200 Subject: [PATCH 2/2] fix indentation in dropdown_menu template --- evewspace/Map/templates/system_menu.html | 46 ++++++++++++------------ 1 file changed, 23 insertions(+), 23 deletions(-) diff --git a/evewspace/Map/templates/system_menu.html b/evewspace/Map/templates/system_menu.html index 8f4f1472..3d19025f 100644 --- a/evewspace/Map/templates/system_menu.html +++ b/evewspace/Map/templates/system_menu.html @@ -35,32 +35,32 @@
  • Down
  • -{% endif %} -{% if perms.SiteTracker.can_sitetracker and not stfleets|length %} -ST Fleet Here -{% endif %} - {% if can_edit %} {% if isinterest %}