Mercurial > hg > bts-webui
changeset 127:d26d941537ba draft
starring: implement the first version
it needs testing and error handling (timeouts, etc)
should be working right now for starring, unstarring will come in the next
commit.
author | diegoe-guest |
---|---|
date | Thu, 06 Aug 2009 16:18:54 +0000 |
parents | 5ba6313e5340 |
children | 011be6f861d9 |
files | bts_webui/amancay/ajax.py bts_webui/amancay/static/amancay.css bts_webui/amancay/static/icons/star_off.png bts_webui/amancay/static/icons/star_on.png bts_webui/amancay/tables.py bts_webui/amancay/templates/table.html bts_webui/amancay/toolbox.py bts_webui/amancay/urls.py |
diffstat | 8 files changed, 71 insertions(+), 7 deletions(-) [+] |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/bts_webui/amancay/ajax.py @@ -0,0 +1,22 @@ +# vim: set sw=4 ts=4 sts=4 noet: +from django.http import HttpResponse + +def add_package(request): + """ + Add a package to our session watched list. + """ + user = request.user + package_name = request.GET['id'] + + if user.is_authenticated(): + packages = user.package_set.filter(package_name=package_name) + if not packages: + user.package_set.create(package_name=package_name) + else: + packages = request.session.get('packages', []) + for package in packages: + if package == package_name: + return + request.session['packages'].append(package_name) + + return HttpResponse(status=200)
--- a/bts_webui/amancay/static/amancay.css +++ b/bts_webui/amancay/static/amancay.css @@ -133,7 +133,7 @@ color: #333399; } table.bugs td.starred { - width: 26px; + width: 18px; } table.bugs td.bug_number { text-align:right; @@ -418,3 +418,6 @@ border-bottom: 1px dotted white; text-decoration: none; } +.favorite_icon img { + border: 0; +}
new file mode 100644 index 0000000000000000000000000000000000000000..c5535c3de1c3f6beb21d50f9522c57f737239ea3 GIT binary patch literal 297 zc%17D@N?(olHy`uVBq!ia0vp^{2<K23?xtf=%@rz1_3@Hu1`cc&OHA8>i7TMxBqRt z_V4oB|CgTpT66i|wj2KrKKy^=-k*D~e%$%=f9H+AH=h6e|Nnn;p>_&TFJnoNUoeBi zvm0q3PLj8~3quF1tOt<8S>O>_%)r1c48n{Iv*t(u1=&kHeO=kFGV_RXFa)M@9tR2) zdAc};a9mGLNJtQfKfu7aj!$4#Zk<BQ!J0VcGvXru|HlUOG#*TPcI1D2y5GJ70l(x~ z{)reYInpfQE+nyIcH<ZS`~_KY3no~3NVos{|3BWLNB95!fB)w&q;UMpFZ`9vkg~=` nZ-QJE<B5uk#}Cx1HZn3?J)(cUuzclDpzREvu6{1-oD!M<<o|oV
new file mode 100644 index 0000000000000000000000000000000000000000..ec5c030971fae84bb448d2f427196bcd4ce64674 GIT binary patch literal 374 zc%17D@N?(olHy`uVBq!ia0vp^{2<K13?z9tQY(N|LV!<*>rWmIG10lxC#dM^T?z>Z z?w$DJ|8KE>KlJ^4*Gftr)6<QfJ3a2-SN@X+6m!!1N($E(=NU}uoA&fJ>$@kMYd5}i zbiVfa1^d3kA7;&aRoD3J_T`{`+gMJW{}klk9uvJQKJg**stRGCU5q6`e!&b5&u*lF zI7!~_E({&4vK~MVXMsm#F#`j)FbFd;%$g$s6l5>)^mS#w%FH9mA#0SJDhCwm_jGX# z;kfSGA1KtUz~jQ)m>{sWY2^ytd;h0}ZZY1s-&bw7bi=7b);0$x&NmYO9xGQRzjEsT zb5Y&erF$Y~GrD+b>boz@_d3jUXE!rf;~eic#mz6BRCC=T8~RsRRb=-Umrj}Im;1qQ z!n7nG&-+u;ViucOm1)J_oo%5JayV_Bd|Cakv~T}bSuFH<KJ&xGZ_H6u?2G;6s;>c^ O#^CAd=d#Wzp$PzDaE{yn
--- a/bts_webui/amancay/tables.py +++ b/bts_webui/amancay/tables.py @@ -27,10 +27,15 @@ def render_bug_table(request, queries, title, bugs, amount, current_view): if bugs: bug_list = queries.get_bugs_status(bugs[:amount]) - bug_list.sort(key=lambda x: x.log_modified, reverse=True) + bug_list.sort(key=lambda x: x.package) else: bug_list = None + fav_packages = [p.package_name for p in request.user.package_set.all()] + for bug in bug_list: + if bug.package in fav_packages: + bug.pkg_fav = True + if request.GET.has_key('xhr'): # We only need to list the data. return HttpResponse(simplejson.dumps(bug_list), @@ -89,13 +94,14 @@ process_post(request) user = request.user bugs = [] - if (user.is_authenticated()): + + if user.is_authenticated(): package_list = request.user.package_set.all() package_list = [p.package_name for p in package_list] else: package_list = request.session.get('packages') - if (package_list): + if package_list: bugs = queries.get_packages_bugs(package_list) bugs.sort(reverse=True) return render_bug_table(request, queries, "Latest bugs on selected packages", bugs, 15, "package_bugs")
--- a/bts_webui/amancay/templates/table.html +++ b/bts_webui/amancay/templates/table.html @@ -1,4 +1,30 @@ {% comment %} vim: set sw=4 ts=4 sts=4 noet: {% endcomment %} +{% block extrajs %} +<script type="text/javascript" language="javascript" charset="utf-8"> +function toggle_star_cb(img, newimg, xml) { + img.src = newimg; +} +function toggle_star(id) { + var url = '/ajax/package/'; + 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 %} {% load template_filters %} <input id="current_view" type="hidden" value="{{ current_view }}" /> {% if bug_list %} @@ -33,7 +59,13 @@ {% ifchanged %} <tr> <td class="starred"> - <img src="/static/icons/starred.png" style="vertical-align: middle"/> + <a href="javascript:toggle_star('{{ bug.package }}')" class="favorite_icon"> + {% if bug.pkg_fav %} + <img id="{{ bug.package }}_star" src="/static/icons/star_on.png" style="vertical-align: middle"/> + {% else %} + <img id="{{ bug.package }}_star" src="/static/icons/star_off.png" style="vertical-align: middle"/> + {% endif %} + </a> </td> <td class="package" colspan="4"> <a href="/package/{{ bug.package }}">{{ bug.package }}</a>
--- a/bts_webui/amancay/toolbox.py +++ b/bts_webui/amancay/toolbox.py @@ -1,3 +1,4 @@ +# vim: set sw=4 ts=4 sts=4 noet: import datetime # Needed to get_template, prepare context and output Response @@ -98,7 +99,7 @@ package_name = request.POST['package_name'] if user.is_authenticated(): packages = user.package_set.filter(package_name=package_name) - if packages: + if not packages: user.package_set.create(package_name=package_name) else: packages = request.session.get('packages', [])
--- a/bts_webui/amancay/urls.py +++ b/bts_webui/amancay/urls.py @@ -22,7 +22,7 @@ (r'^package/(?P<package_name>\w+)', 'bts_webui.amancay.views.package',), # Small pieces - # (r'^add_package', 'bts_webui.amancay.views.add_package',), + (r'^ajax/package/add/', 'bts_webui.amancay.ajax.add_package',), # Account Settings # (r'^account_settings', 'bts_webui.amancay.views.account_settings',),