Mercurial > hg > bts-webui
changeset 134:c6bf9f23af62 draft
starring: implement bug add/remove
works exactly like package add/remove, needs polishing to reuse javascript
functions that packages are also using.
author | diegoe-guest |
---|---|
date | Mon, 10 Aug 2009 23:40:27 +0000 |
parents | a187a0e79003 |
children | 537aa92d7179 |
files | bts_webui/amancay/TODO bts_webui/amancay/ajax.py bts_webui/amancay/bugs.py bts_webui/amancay/static/amancay.css bts_webui/amancay/templates/bug.html bts_webui/amancay/urls.py |
diffstat | 6 files changed, 89 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- 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
--- 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
--- 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} )
--- 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;
--- 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); +} </script> {% endblock %} {% block main_content %} <div class="bug"> <div class="bug_information"> - <span class="bug_number"><a href="/bug/{{ bug_number }}">bug #{{ bug_number }}</a></span> + <span class="bug_number"> + <a href="javascript:toggle_star('{{ bug_number }}')" class="favorite_icon"> + {% if bug_is_fav %} + <img id="{{ bug_number }}_star" src="/static/icons/star_on.png" /> + {% else %} + <img id="{{ bug_number }}_star" src="/static/icons/star_off.png" /> + {% endif %} + </a> <a href="/bug/{{ bug_number }}">bug #{{ bug_number }}</a></span> <span class="bug_modified">Last modified <span class="modified">{{ bug_status.log_modified|tstodatetime|timesince }}</span> ago ({{ bug_status.log_modified|tstodate }}) </div> <div class="bug_title">{{ bug_status.subject|escape }} <span class="bug_severity">((icon){{ bug_status.severity }})</span></div>
--- a/bts_webui/amancay/urls.py +++ b/bts_webui/amancay/urls.py @@ -22,10 +22,12 @@ (r'^package/(?P<package_name>\w+)', 'bts_webui.amancay.views.package',), # Small pieces - (r'^ajax/package/add/', 'bts_webui.amancay.ajax.add_package',), - (r'^ajax/package/remove/', 'bts_webui.amancay.ajax.remove_package',), + (r'^ajax/package/add/', 'bts_webui.amancay.ajax.package_add',), + (r'^ajax/package/remove/', 'bts_webui.amancay.ajax.package_remove',), (r'^ajax/bug/subscribe/', 'bts_webui.amancay.ajax.bug_subscribe',), (r'^ajax/bug/unsubscribe/', 'bts_webui.amancay.ajax.bug_unsubscribe',), + (r'^ajax/bug/add/', 'bts_webui.amancay.ajax.bug_add',), + (r'^ajax/bug/remove/', 'bts_webui.amancay.ajax.bug_remove',), # Account Settings # (r'^account_settings', 'bts_webui.amancay.views.account_settings',),