# HG changeset patch # User diegoe-guest # Date 1249947627 0 # Node ID c6bf9f23af6217c5e5c6778623b98c01a3a73447 # Parent a187a0e79003ca4bdebf229d6a824f9d0af0cdb9 starring: implement bug add/remove works exactly like package add/remove, needs polishing to reuse javascript functions that packages are also using. diff --git a/bts_webui/amancay/TODO b/bts_webui/amancay/TODO --- a/bts_webui/amancay/TODO +++ b/bts_webui/amancay/TODO @@ -44,11 +44,3 @@ - Clone - Change submitter - Forwarded / Unforwarded -+ Change owner -+ Subscribe -- ReportSpam - -Interface Actions ------------------ -- Add bug to selected bugs -- Add package to selected packages diff --git a/bts_webui/amancay/ajax.py b/bts_webui/amancay/ajax.py --- a/bts_webui/amancay/ajax.py +++ b/bts_webui/amancay/ajax.py @@ -2,7 +2,7 @@ from django.http import HttpResponse from amancay.bugs import handle_email -def add_package(request): +def package_add(request): """ Add a package to our session watched list. """ @@ -24,7 +24,7 @@ request.session['packages'].append(package_name) return HttpResponse(status=200) -def remove_package(request): +def package_remove(request): """ Remove a package from the watched list. """ @@ -46,6 +46,50 @@ else: return HttpResponse(status=500) +def bug_add(request): + """ + Add a bug to the session watched bugs. + """ + user = request.user + bug_number = request.GET['id'] + + if user.is_authenticated(): + bugs = user.bug_set.filter(number=bug_number)[:1] + if not bugs: + user.bug_set.create(number=bug_number) + return HttpResponse(status=200) + else: + return HttpResponse(status=500) + else: + bugs = request.session.get('bugs', []) + if bug_number in bugs: + return HttpResponse(status=500) + else: + request.session['bugs'].append(bug_number) + return HttpResponse(status=200) + +def bug_remove(request): + """ + Remove a bug from the watched list. + """ + user = request.user + bug_number = request.GET['id'] + + if user.is_authenticated(): + bugs = user.bug_set.filter(number=bug_number)[:1] + if bugs: + bugs[0].delete() + return HttpResponse(status=200) + else: + return HttpResponse(status=500) + else: + bugs = request.session.get('bugs', []) + if bug_number in bugs: + request.session['bugs'].remove(bug_number) + return HttpResponse(status=200) + else: + return HttpResponse(status=500) + def _bug_toggle_subscribe(request, subscribe=True): """ Toggle subscription to a specific bug report diff --git a/bts_webui/amancay/bugs.py b/bts_webui/amancay/bugs.py --- a/bts_webui/amancay/bugs.py +++ b/bts_webui/amancay/bugs.py @@ -44,6 +44,8 @@ bug_status = queries.get_bugs_status(bug_number)[0] bug_originator = email.Utils.parseaddr(bug_status['originator']) bug_log = queries.get_bug_log(bug_number) + # having as a selected bug is not the same as subscribing + bug_is_fav = bool(user.bug_set.filter(number=bug_number)[:1]) # Regular expressions to parse the mails from_re = re.compile('^From: ?(.+)$', re.MULTILINE) @@ -100,6 +102,7 @@ 'bug_originator': bug_originator, 'bug_status': bug_status, 'bug_messages': bug_messages, + 'bug_is_fav': bug_is_fav, 'current_user': user} ) diff --git a/bts_webui/amancay/static/amancay.css b/bts_webui/amancay/static/amancay.css --- a/bts_webui/amancay/static/amancay.css +++ b/bts_webui/amancay/static/amancay.css @@ -193,7 +193,7 @@ float: left; } .bug .bug_number a { - font-size: smaller; + font-size: small; text-decoration: none; border-bottom: 1px dotted blue; } @@ -418,8 +418,13 @@ border-bottom: 1px dotted white; text-decoration: none; } +.favorite_icon { + text-decoration: none; + border: 0 !important; +} .favorite_icon img { border: 0; + vertical-align: middle; } .action img { border: 0; diff --git a/bts_webui/amancay/templates/bug.html b/bts_webui/amancay/templates/bug.html --- a/bts_webui/amancay/templates/bug.html +++ b/bts_webui/amancay/templates/bug.html @@ -31,13 +31,42 @@ res = MochiKit.Async.doSimpleXMLHttpRequest(url, {'id': id}); res.addCallback(toggle_subscribe_cb, img, newimg, txt, newtxt); } +function toggle_star_cb(img, newimg, xml) { + img.src = newimg; +} +function toggle_star(id) { + var url = '/ajax/bug/'; + var img = document.getElementById(id + '_star'); + var newimg = ''; + + if (MochiKit.Text.endsWith('star_on.png', img.src)) + { + newimg = '/static/icons/star_off.png'; + url += 'remove/'; + } + else + { + newimg = '/static/icons/star_on.png'; + url += 'add/'; + } + + res = MochiKit.Async.doSimpleXMLHttpRequest(url, {'id': id}); + res.addCallback(toggle_star_cb, img, newimg); +} {% endblock %} {% block main_content %}