Browse Source

clean up corporation kill list

raylu 12 years ago
parent
commit
5c1b4b72ea
5 changed files with 111 additions and 40 deletions
  1. 13 2
      db/queries.py
  2. 24 0
      web/static/css/corporation.ccss
  3. 59 37
      web/static/js/corporation.js
  4. 1 0
      web/templates/base.html
  5. 14 1
      web/templates/corporation.html

+ 13 - 2
db/queries.py

@@ -13,29 +13,40 @@ def search(q):
 def corporation(corp_id):
 	with db.cursor() as c:
 		kills = db.query(c, '''
-			SELECT DISTINCT(kills.kill_id), kill_time FROM kills
+			SELECT DISTINCT(kills.kill_id), kill_time,
+				solarSystemName as system_name, security, regionName as region
+			FROM kills
 			JOIN characters ON characters.kill_id = kills.kill_id
+			JOIN eve.mapSolarSystems ON solar_system_id = solarSystemID
+			JOIN eve.mapRegions ON mapSolarSystems.regionID = mapRegions.regionID
 			WHERE corporation_id = ?
 			''', corp_id)
 		kill_ids = list(map(operator.itemgetter('kill_id'), kills))
 		char_rows = db.query(c, '''
 			SELECT
 				kill_id, victim, final_blow,
-				character_id, character_name, corporation_id, corporation_name, alliance_id, alliance_name, faction_id, faction_name
+				character_id, character_name, corporation_id, corporation_name, alliance_id, alliance_name, faction_id, faction_name,
+				ship_type_id, typeName AS ship_name
 			FROM characters
+			JOIN eve.invTypes ON ship_type_id = typeID
 			WHERE kill_id IN ({})
 			'''.format(','.join(map(str, kill_ids))))
 		characters = defaultdict(dict)
+		for kill_id in kill_ids:
+			characters[kill_id]['attackers'] = 1 # count final_blow now
 		for char in char_rows:
 			kill_id = char['kill_id']
 			if char['victim']:
 				characters[kill_id]['victim'] = char
 			elif char['final_blow']:
 				characters[kill_id]['final_blow'] = char
+			else:
+				characters[kill_id]['attackers'] += 1
 		for kill in kills:
 			chars = characters[kill['kill_id']]
 			kill['victim'] = chars['victim']
 			kill['final_blow'] = chars['final_blow']
+			kill['attackers'] = chars['attackers']
 	return kills
 
 def kill(kill_id):

+ 24 - 0
web/static/css/corporation.ccss

@@ -0,0 +1,24 @@
+table#kills:
+	table-layout: fixed
+	width: 900px
+
+	tr:nth-child(odd):
+		background-color: #1a1a1a
+
+	th, td:
+		white-space: nowrap
+		overflow: hidden
+		text-overflow: ellipsis
+
+	th.time:
+		width: 90px
+	th.system:
+		width: 120px
+	th.victim_portrait:
+		width: 64px
+	th.victim:
+		width: 250px
+	th.killer_portrait:
+		width: 64px
+	th.killer:
+		width: 250px

+ 59 - 37
web/static/js/corporation.js

@@ -1,49 +1,71 @@
 window.addEvent('domready', function() {
 	var corp_id = document.location.pathname.split('/').getLast();
 	ykill.api('/corporation/' + corp_id, function(kills) {
-		var div = $('kills');
+		var table = $('kills').getChildren('tbody')[0];
 		kills.each(function(kill) {
+			var tr = new Element('tr');
+
+			var kill_time = kill['kill_time'].split(' ', 2);
 			var a = new Element('a', {'href': '/kill/' + kill['kill_id']});
-			a.appendText(kill['kill_time']);
-
-			a.adopt(new Element('img', {
-				'src': '//image.eveonline.com/Character/' + kill['victim']['character_id'] + '_32.jpg',
-				'alt': kill['victim']['character_name'],
-			}));
-			a.appendText(kill['victim']['character_name']);
-			a.adopt(new Element('img', {
-				'src': '//image.eveonline.com/Corporation/' + kill['victim']['corporation_id'] + '_32.png',
-				'alt': kill['victim']['corporation_name'],
-			}));
-			a.appendText(kill['victim']['corporation_name']);
-			if (kill['victim']['alliance_id']) {
-				a.adopt(new Element('img', {
-					'src': '//image.eveonline.com/Alliance/' + kill['victim']['alliance_id'] + '_32.png',
-					'alt': kill['victim']['alliance_name'],
-				}));
-				a.appendText(kill['victim']['alliance_name']);
+			a.appendText(kill_time[0]);
+			a.adopt(new Element('br'));
+			a.appendText(kill_time[1]);
+			var td = new Element('td').adopt(a);
+			tr.adopt(td);
+
+			td = new Element('td');
+			td.appendText(kill['system_name'] + ' ');
+			td.adopt(new Element('span', {'html': kill['security'].toFixed(1)}));
+			td.adopt(new Element('br'));
+			td.appendText(kill['region']);
+			tr.adopt(td);
+
+			td = new Element('td');
+			var victim = kill['victim'];
+			show_portrait(td, victim['ship_type_id'], victim['ship_name'], 'type', '_32.png');
+			show_portrait(td, victim['character_id'], victim['character_name'], 'character', '_32.jpg');
+			if (victim['faction_id']) {
+				show_portrait(td, victim['faction_id'], victim['faction_name'], 'faction', '_32.png');
 			}
+			tr.adopt(td);
 
-			a.adopt(new Element('img', {
-				'src': '//image.eveonline.com/Character/' + kill['final_blow']['character_id'] + '_32.jpg',
-				'alt': kill['final_blow']['character_name'],
-			}));
-			a.appendText(kill['final_blow']['character_name']);
-			a.adopt(new Element('img', {
-				'src': '//image.eveonline.com/Corporation/' + kill['final_blow']['corporation_id'] + '_32.png',
-				'alt': kill['final_blow']['corporation_name'],
-			}));
-			a.appendText(kill['final_blow']['corporation_name']);
-			if (kill['final_blow']['alliance_id']) {
-				a.adopt(new Element('img', {
-					'src': '//image.eveonline.com/Alliance/' + kill['final_blow']['alliance_id'] + '_32.png',
-					'alt': kill['final_blow']['alliance_name'],
-				}));
-				a.appendText(kill['final_blow']['alliance_name']);
+			td = new Element('td');
+			td.appendText(victim['character_name']);
+			td.adopt(new Element('br'));
+			td.appendText(victim['corporation_name']);
+			if (victim['alliance_id'])
+				td.appendText(' / ' + victim['alliance_name']);
+			if (victim['faction_id'])
+				td.appendText(' / ' + victim['faction_name']);
+			tr.adopt(td);
+
+			td = new Element('td');
+			var final_blow = kill['final_blow'];
+			show_portrait(td, final_blow['ship_type_id'], final_blow['ship_name'], 'type', '_32.png');
+			show_portrait(td, final_blow['character_id'], final_blow['character_name'], 'character', '_32.jpg');
+			if (final_blow['faction_id']) {
+				show_portrait(td, final_blow['faction_id'], final_blow['faction_name'], 'faction', '_32.png');
 			}
+			tr.adopt(td);
+
+			td = new Element('td');
+			td.appendText(final_blow['character_name'] + ' (' + kill['attackers'] + ')');
+			td.adopt(new Element('br'));
+			td.appendText(final_blow['corporation_name']);
+			if (final_blow['alliance_id'])
+				td.appendText(' / ' + final_blow['alliance_name']);
+			if (final_blow['faction_id'])
+				td.appendText(' / ' + final_blow['faction_name']);
+			tr.adopt(td);
 
-			div.adopt(a);
-			div.adopt(new Element('br'));
+			table.adopt(tr);
 		});
 	});
+
+	function show_portrait(el, id, text, img_dir, img_suffix) {
+		el.adopt(new Element('img', {
+			'src': '//image.eveonline.com/' + img_dir + '/' + id + img_suffix,
+			'alt': text,
+		}));
+	}
 });

+ 1 - 0
web/templates/base.html

@@ -2,6 +2,7 @@
 <html>
 <head>
 	<link rel="stylesheet" type="text/css" href="/css/base.css" />
+	{% block css %}{% end %}
 	<script src="//ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools.js"></script>
 	<script>
 		window.ykill = {

+ 14 - 1
web/templates/corporation.html

@@ -4,8 +4,21 @@
 	<script src="/static/js/corporation.js"></script>
 {% end %}
 
+{% block css %}
+	<link rel="stylesheet" type="text/css" href="/css/corporation.css" />
+{% end %}
+
 {% block main %}
 
-<div id="kills"></div>
+<table id="kills">
+	<tr>
+		<th class="time">time</th>
+		<th class="system">system</th>
+		<th class="victim_portrait"></th>
+		<th class="victim">victim</th>
+		<th class="killer_portrait"></th>
+		<th class="killer">killer(s)</th>
+	</tr>
+</table>
 
 {% end %}