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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..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 e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..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',),