From d42973b607d445cc7226fb7b05fd1c71e89deb79 Mon Sep 17 00:00:00 2001
From: Jordan Lee <jordan@transmissionbt.com>
Date: Sun, 21 Aug 2011 14:02:28 +0000
Subject: [PATCH] (trunk web) make Transmission.js' keyDown() function more
 efficient & a little more readable

---
 web/javascript/transmission.js | 62 ++++++++++++++++------------------
 1 file changed, 30 insertions(+), 32 deletions(-)

diff --git a/web/javascript/transmission.js b/web/javascript/transmission.js
index 45004c283..03ed12930 100644
--- a/web/javascript/transmission.js
+++ b/web/javascript/transmission.js
@@ -475,22 +475,23 @@ Transmission.prototype =
 		Prefs.setValue( key, val );
 	},
 
-	scrollToElement: function( e )
+	scrollToRow: function(row)
 	{
-		if( iPhone )
-			return;
+		if( iPhone ) // FIXME: why?
+			return
 
-		var container = $('#torrent_container');
-		var scrollTop = container.scrollTop( );
-		var innerHeight = container.innerHeight( );
+		var list = $('#torrent_container')
+		var scrollTop = list.scrollTop()
+		var innerHeight = list.innerHeight()
 
-		var offsetTop = e.offsetTop;
-		var offsetHeight = $(e).outerHeight( );
+		var e = $(row.getElement())
+		var offsetTop = e[0].offsetTop
+		var offsetHeight = e.outerHeight()
 
 		if( offsetTop < scrollTop )
-			container.scrollTop( offsetTop );
+			list.scrollTop( offsetTop );
 		else if( innerHeight + scrollTop < offsetTop + offsetHeight )
-			container.scrollTop( offsetTop + offsetHeight - innerHeight );
+			list.scrollTop( offsetTop + offsetHeight - innerHeight );
 	},
 
 	seedRatioLimit: function(){
@@ -582,32 +583,29 @@ Transmission.prototype =
 	/*
 	 * Process key event
 	 */
-	keyDown: function(event)
+	keyDown: function(ev)
 	{
-		var tr = this;
-		var sel = tr.getSelectedRows( );
-		var rows = tr.getVisibleRows( );
-		var i = -1;
+		var up = ev.keyCode === 38 // up key pressed
+		var dn = ev.keyCode === 40 // down key pressed
 
-		if( event.keyCode == 40 ) // down arrow
-		{
-			var r = sel.length ? sel[sel.length-1] : null;
-			i = r==null ? null : tr.getRowIndex(rows,r)+1;
-			if( i == rows.length || i == null )
-				i = 0;
-		}
-		else if( event.keyCode == 38 ) // up arrow
+		if(up || dn)
 		{
-			var r = sel.length ? sel[0] : null
-			i = r==null ? null : tr.getRowIndex(rows,r)-1;
-			if( i == -1 || i == null )
-				i = rows.length - 1;
-		}
+			var rows = this.getVisibleRows()
+
+			// find the first selected row	
+			for(var i=0, row; row=rows[i]; ++i)
+				if(row.isSelected())
+					break
+
+			if(i == rows.length) // no selection yet
+				i = 0
+			else if(dn)
+				i = (i+1) % rows.length
+			else if(up)
+				i = (i || rows.length) - 1
 
-		if( 0<=i && i<rows.length ) {
-			tr.deselectAll( );
-			tr.selectRow( tr._rows[i], true );
-			tr.scrollToElement( tr._rows[i] );
+			this.setSelectedRow(rows[i])
+			this.scrollToRow(rows[i])
 		}
 	},
 
-- 
2.40.0