From 1d7f01dccba0e2275498760452564dd8c1e2d06f Mon Sep 17 00:00:00 2001 From: Helmut Merz Date: Thu, 24 Mar 2016 16:24:45 +0100 Subject: [PATCH] allow re-ordering of favorites by drag-and-drop --- organize/personal/browser/favorite.py | 11 ++++- organize/personal/browser/personal_macros.pt | 50 +++++++++++++------- organize/personal/favorite.py | 14 +++++- 3 files changed, 56 insertions(+), 19 deletions(-) diff --git a/organize/personal/browser/favorite.py b/organize/personal/browser/favorite.py index 6f376c3..e0dfa9b 100644 --- a/organize/personal/browser/favorite.py +++ b/organize/personal/browser/favorite.py @@ -58,14 +58,21 @@ class FavoriteView(NodeView): def listFavorites(self): if self.favorites is None: return - for uid in self.favorites.list(self.person): + self.registerDojoDnd() + form = self.request.form + if 'favorites_change_order' in form: + uids = form.get('favorite_uids') + if uids: + self.favorites.reorder(uids) + for trackUid, uid in self.favorites.listWithTracks(self.person): obj = util.getObjectForUid(uid) if obj is not None: yield dict(url=self.getUrlForTarget(obj), uid=uid, title=obj.title, description=obj.description, - object=obj) + object=obj, + trackUid=trackUid) def add(self): if self.favorites is None: diff --git a/organize/personal/browser/personal_macros.pt b/organize/personal/browser/personal_macros.pt index d9471e0..86fb2b1 100644 --- a/organize/personal/browser/personal_macros.pt +++ b/organize/personal/browser/personal_macros.pt @@ -1,24 +1,42 @@ -
-  X  - Some object +
+
+
+  X  + Some object + +
-
- Add to Favorites +
+ +
+ + diff --git a/organize/personal/favorite.py b/organize/personal/favorite.py index 923b51d..f0a7daa 100644 --- a/organize/personal/favorite.py +++ b/organize/personal/favorite.py @@ -41,12 +41,16 @@ class Favorites(object): for item in self.listTracks(person, sortKey, type): yield item.taskId + def listWithTracks(self, person, sortKey=None, type='favorite'): + for item in self.listTracks(person, sortKey, type): + yield util.getUidForObject(item), item.taskId + def listTracks(self, person, sortKey=None, type='favorite'): if person is None: return personUid = util.getUidForObject(person) if sortKey is None: - sortKey = lambda x: -x.timeStamp + sortKey = lambda x: (x.data.get('order', 0), -x.timeStamp) for item in sorted(self.context.query(userName=personUid), key=sortKey): if type is not None: if item.type != type: @@ -77,6 +81,14 @@ class Favorites(object): self.context.removeTrack(track) return changed + def reorder(self, uids): + for idx, uid in enumerate(uids): + track = util.getObjectForUid(uid) + if track is not None: + data = track.data + data['order'] = idx + track.data = data + class Favorite(Track):