diff options
-rw-r--r-- | askbot/context.py | 34 | ||||
-rw-r--r-- | askbot/media/js/utils.js | 23 |
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; |