diff --git a/ietf/doc/templatetags/wg_menu.py b/ietf/doc/templatetags/wg_menu.py index 3757d3d97..b0a2296dc 100644 --- a/ietf/doc/templatetags/wg_menu.py +++ b/ietf/doc/templatetags/wg_menu.py @@ -31,8 +31,8 @@ # OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. from django import template -from django.core.cache import cache from django.template.loader import render_to_string +from django.db import models from ietf.group.models import Group @@ -44,27 +44,18 @@ area_short_names = { } @register.simple_tag -def wg_menu(flavor=""): - res = cache.get('wgmenu' + flavor) - if res: - return res +def wg_menu(): + parents = Group.objects.filter(models.Q(type="area") | models.Q(type="irtf", acronym="irtf"), + state="active").order_by('type_id', 'acronym') - areas = Group.objects.filter(type="area", state="active").order_by('acronym') - wgs = Group.objects.filter(type="wg", state="active", parent__in=areas).order_by("acronym") - rgs = Group.objects.filter(type="rg", state="active").order_by("acronym") + for p in parents: + p.short_name = area_short_names.get(p.acronym) or p.name + if p.short_name.endswith(" Area"): + p.short_name = p.short_name[:-len(" Area")] - for a in areas: - a.short_area_name = area_short_names.get(a.acronym) or a.name - if a.short_area_name.endswith(" Area"): - a.short_area_name = a.short_area_name[:-len(" Area")] + if p.type_id == "area": + p.menu_url = "/wg/#" + p.acronym + elif p.acronym == "irtf": + p.menu_url = "/rg/" - a.active_groups = [g for g in wgs if g.parent_id == a.id] - - areas = [a for a in areas if a.active_groups] - - if flavor == "modal": - res = render_to_string('base/menu_wg_modal.html', {'areas':areas, 'rgs':rgs}) - else: - res = render_to_string('base/menu_wg.html', {'areas':areas, 'rgs':rgs}) - cache.set('wgmenu' + flavor, res, 30*60) - return res + return render_to_string('base/menu_wg.html', { 'parents': parents }) diff --git a/ietf/group/ajax.py b/ietf/group/ajax.py index 3490b1208..cb60df63c 100644 --- a/ietf/group/ajax.py +++ b/ietf/group/ajax.py @@ -1,7 +1,11 @@ import json +from collections import defaultdict -from django.http import HttpResponse +from django.http import HttpResponse, JsonResponse from django.shortcuts import get_object_or_404 +from django.core.urlresolvers import reverse as urlreverse +from django.utils.html import escape +from django.views.decorators.cache import cache_page, cache_control from ietf.group.models import Group @@ -12,3 +16,14 @@ def group_json(request, acronym): sort_keys=True, indent=2), content_type="text/json") +@cache_control(public=True) +@cache_page(30 * 60) +def group_menu_data(request): + groups = Group.objects.filter(state="active", type__in=("wg", "rg"), parent__state="active").order_by("acronym") + + groups_by_parent = defaultdict(list) + for g in groups: + url = urlreverse("ietf.group.info.group_home", kwargs={ 'group_type': g.type_id, 'acronym': g.acronym }) + groups_by_parent[g.parent_id].append({ 'acronym': g.acronym, 'name': escape(g.name), 'url': url }) + + return JsonResponse(groups_by_parent) diff --git a/ietf/group/tests_info.py b/ietf/group/tests_info.py index 16b30f04e..a5f93281c 100644 --- a/ietf/group/tests_info.py +++ b/ietf/group/tests_info.py @@ -2,6 +2,7 @@ import os import shutil import calendar import datetime +import json from pyquery import PyQuery import debug # pyflakes:ignore @@ -934,3 +935,26 @@ class CustomizeWorkflowTests(TestCase): self.assertEqual(len(q('form').find('input[name=tag][value="%s"]' % tag.pk).parents("form").find("input[name=active]")), 1) group = Group.objects.get(acronym=group.acronym) self.assertTrue(tag in group.unused_tags.all()) + +class AjaxTests(TestCase): + def test_group_menu_data(self): + make_test_data() + + r = self.client.get(urlreverse("group_menu_data")) + self.assertEqual(r.status_code, 200) + + parents = json.loads(r.content) + + area = Group.objects.get(type="area", acronym="farfut") + self.assertTrue(str(area.id) in parents) + + mars_wg_data = None + for g in parents[str(area.id)]: + if g["acronym"] == "mars": + mars_wg_data = g + break + self.assertTrue(mars_wg_data) + + mars_wg = Group.objects.get(acronym="mars") + self.assertEqual(mars_wg_data["name"], mars_wg.name) + diff --git a/ietf/group/urls.py b/ietf/group/urls.py index 66bc59231..586aa9d38 100644 --- a/ietf/group/urls.py +++ b/ietf/group/urls.py @@ -3,6 +3,7 @@ from django.conf.urls import patterns urlpatterns = patterns('', + (r'^groupmenu.json', 'ietf.group.ajax.group_menu_data', None, "group_menu_data"), (r'^(?P[a-z0-9]+).json$', 'ietf.group.ajax.group_json'), (r'^chartering/$', 'ietf.group.info.chartering_groups'), (r'^chartering/create/(?P(wg|rg))/$', 'ietf.group.edit.edit', {'action': "charter"}, "group_create"), diff --git a/ietf/templates/base/menu.html b/ietf/templates/base/menu.html index 528822f21..00e4e34ad 100644 --- a/ietf/templates/base/menu.html +++ b/ietf/templates/base/menu.html @@ -70,7 +70,7 @@ {% if flavor == "top" %}
  • {% endif %}
  • By area/parent
  • {% wg_menu %} - + {# #} {% if flavor == "top" %}{% endif %}
  • New work
  • diff --git a/ietf/templates/base/menu_wg.html b/ietf/templates/base/menu_wg.html index e9e72cd6e..9ba295889 100644 --- a/ietf/templates/base/menu_wg.html +++ b/ietf/templates/base/menu_wg.html @@ -1,19 +1,5 @@ -{% for area in areas %} - +{% for p in parents %} + {% endfor %} - - diff --git a/ietf/templates/ietf.html b/ietf/templates/ietf.html index 990b207c8..099da709d 100644 --- a/ietf/templates/ietf.html +++ b/ietf/templates/ietf.html @@ -24,33 +24,9 @@ - + {% filter amp|smartypants %} - - -