summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-09-22 14:54:48 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2012-09-22 14:54:48 -0400
commit126e4b40cdc8f49259ac7cb2cf10246a1e8b86ca (patch)
treebbf62cea718cf23856da8d329c2e8d7dd4684c32
parent3703cd088fa958cdd0c117fe0f5f72b594b8e6e8 (diff)
parent47a4bc923966046e6d3e76d4dcf0bfd55f2c4f66 (diff)
downloadaskbot-126e4b40cdc8f49259ac7cb2cf10246a1e8b86ca.tar.gz
askbot-126e4b40cdc8f49259ac7cb2cf10246a1e8b86ca.tar.bz2
askbot-126e4b40cdc8f49259ac7cb2cf10246a1e8b86ca.zip
merged and improved group sorting in the menu
-rw-r--r--askbot/context.py34
-rw-r--r--askbot/media/js/utils.js23
2 files changed, 42 insertions, 15 deletions
diff --git a/askbot/context.py b/askbot/context.py
index 48c1cf3b..5e53febc 100644
--- a/askbot/context.py
+++ b/askbot/context.py
@@ -59,21 +59,33 @@ def application_settings(request):
}
if askbot_settings.GROUPS_ENABLED:
-
+ #calculate context needed to list all the groups
def _get_group_url(group):
+ """calculates url to the group based on its id and name"""
group_slug = slugify(group['name'])
- return reverse('users_by_group',
- kwargs={'group_id': group['id'],
- 'group_slug': group_slug})
-
+ return reverse(
+ 'users_by_group',
+ kwargs={'group_id': group['id'], 'group_slug': group_slug}
+ )
+ #load id's and names of all groups
global_group = models.tag.get_global_group()
- groups = models.Group.objects.exclude_personal().exclude(id=global_group.id).order_by('name')
- groups = groups.values('id', 'name')
- group_list = [{'link': _get_group_url({'name': global_group.name,
- 'id': global_group.id}),
- 'name': global_group.name},]
- for group in groups:
+ groups = models.Group.objects.exclude_personal()
+ groups = groups.exclude(id=global_group.id)
+ groups_data = list(groups.values('id', 'name'))
+
+ #sort groups_data alphanumerically, but case-insensitive
+ groups_data = sorted(
+ groups_data,
+ lambda x, y: cmp(x['name'].lower(), y['name'].lower())
+ )
+
+ #insert data for the global group at the first position
+ groups_data.insert(0, {'id': global_group.id, 'name': global_group.name})
+
+ #build group_list for the context
+ group_list = list()
+ for group in groups_data:
link = _get_group_url(group)
group_list.append({'name': group['name'], 'link': link})
context['group_list'] = simplejson.dumps(group_list)
diff --git a/askbot/media/js/utils.js b/askbot/media/js/utils.js
index 42f19d5b..8aa582b2 100644
--- a/askbot/media/js/utils.js
+++ b/askbot/media/js/utils.js
@@ -1689,14 +1689,29 @@ GroupDropdown.prototype.decorate = function(element){
}
};
-GroupDropdown.prototype.prependGroup = function(group_name, url){
- new_group_li = this.makeElement('li');
+GroupDropdown.prototype.insertGroup = function(group_name, url){
+ var new_group_li = this.makeElement('li');
new_group_a = this.makeElement('a');
new_group_a.attr('href', url);
new_group_a.attr('class', 'group-name');
new_group_a.text(group_name);
new_group_li.append(new_group_a);
- this._element.prepend(new_group_li);
+ links_array = this._element.find('a')
+ for (i=1; i < links_array.length; i++){
+ var value = links_array[i];
+ if (value.text.toLowerCase() < group_name.toLowerCase()){
+ if (i == links_array.length - 1){
+ new_group_li.insertAfter(this._element.find('li')[i-1])
+ break;
+ } else{
+ continue;
+ }
+ } else {
+ new_group_li.insertAfter(this._element.find('li')[i-1])
+ break;
+ }
+
+ }
};
GroupDropdown.prototype._add_group_handler = function(group_name){
@@ -1712,7 +1727,7 @@ GroupDropdown.prototype._add_group_handler = function(group_name){
data: {group: group_name},
success: function(data){
if (data.success){
- self.prependGroup(data.group_name, data.url);
+ self.insertGroup(data.group_name, data.url);
self._input_box_element.hide();
self._add_link.show();
return true;