From 1b81975f1fb3d1341cad30061dc195581e2264b6 Mon Sep 17 00:00:00 2001 From: raylu Date: Tue, 22 Oct 2013 19:09:51 -0700 Subject: search for alliance and characters too --- db/queries.py | 17 +++++++++++++---- db/schema.sql | 8 +++++++- importer.py | 3 +++ web/static/css/search.ccss | 5 +++++ web/static/js/kill.js | 2 +- web/static/js/search.js | 27 +++++++++++++++++++-------- web/templates/search.html | 8 ++++---- 7 files changed, 52 insertions(+), 18 deletions(-) create mode 100644 web/static/css/search.ccss diff --git a/db/queries.py b/db/queries.py index 7ad56ff..a770667 100644 --- a/db/queries.py +++ b/db/queries.py @@ -3,12 +3,21 @@ import operator import db def search(q): + like_str = '{}%'.format(q) with db.cursor() as c: + alliances = db.query(c, ''' + SELECT DISTINCT alliance_id, alliance_name FROM characters + WHERE alliance_name LIKE ? LIMIT 25 + ''', like_str) corps = db.query(c, ''' SELECT DISTINCT corporation_id, corporation_name FROM characters - WHERE corporation_name LIKE ? - ''', '%{}%'.format(q)) - return {'corporations': corps} + WHERE corporation_name LIKE ? LIMIT 25 + ''', like_str) + chars = db.query(c, ''' + SELECT DISTINCT character_id, character_name FROM characters + WHERE character_name LIKE ? LIMIT 25 + ''', like_str) + return {'alliances': alliances, 'corporations': corps, 'characters': chars} def corporation(corp_id): with db.cursor() as c: @@ -20,7 +29,7 @@ def corporation(corp_id): JOIN kill_costs ON kill_costs.kill_id = kills.kill_id JOIN eve.mapSolarSystems ON solar_system_id = solarSystemID JOIN eve.mapRegions ON mapSolarSystems.regionID = mapRegions.regionID - WHERE corporation_id = ? + WHERE corporation_id = ? LIMIT 100 ''', corp_id) kill_ids = list(map(operator.itemgetter('kill_id'), kills)) char_rows = db.query(c, ''' diff --git a/db/schema.sql b/db/schema.sql index 3c632a9..af21bf5 100644 --- a/db/schema.sql +++ b/db/schema.sql @@ -30,7 +30,13 @@ CREATE TABLE `characters` ( `security_status` float DEFAULT NULL, `weapon_type_id` int DEFAULT NULL, PRIMARY KEY (`id`), - CONSTRAINT `fk_char_km` FOREIGN KEY (`kill_id`) REFERENCES `kills` (`kill_id`) + CONSTRAINT `fk_char_km` FOREIGN KEY (`kill_id`) REFERENCES `kills` (`kill_id`), + INDEX `character_id` (`character_id`), + INDEX `character_name` (`character_name`), + INDEX `alliance_id` (`alliance_id`), + INDEX `alliance_name` (`alliance_name`), + INDEX `corporation_id` (`corporation_id`), + INDEX `corporation_name` (`corporation_name`), ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; CREATE TABLE `items` ( diff --git a/importer.py b/importer.py index 7aa582b..2ce4877 100755 --- a/importer.py +++ b/importer.py @@ -18,6 +18,9 @@ def insert_kill(c, kill): print('duplicate:', kill['killID']) return raise + except TypeError: + print(kill) + raise victim = kill['victim'] parambatch = [( diff --git a/web/static/css/search.ccss b/web/static/css/search.ccss new file mode 100644 index 0000000..9f6aa70 --- /dev/null +++ b/web/static/css/search.ccss @@ -0,0 +1,5 @@ +#wrapper: + padding: 20px + +h2: + margin-top: 0 diff --git a/web/static/js/kill.js b/web/static/js/kill.js index baac084..88c07c7 100644 --- a/web/static/js/kill.js +++ b/web/static/js/kill.js @@ -178,7 +178,7 @@ window.addEvent('domready', function() { ykill.portrait(char['weapon_type_id'], char['weapon_name'], 'type', '_32.png') ); tr.grab(td); - tr.grab(new Element('td').appendText(char['damage'])); + tr.grab(new Element('td').appendText(char['damage'].toLocaleString())); table.grab(tr); } diff --git a/web/static/js/search.js b/web/static/js/search.js index 1bb2d51..7b72526 100644 --- a/web/static/js/search.js +++ b/web/static/js/search.js @@ -1,15 +1,26 @@ window.addEvent('domready', function() { document.title += ' - search'; ykill.api('/search' + document.location.search, function(results) { - var corps = $('corps'); - results.corporations.each(function(corp) { - corps.adopt( - new Element('a', { - 'html': corp.corporation_name, - 'href': '/corporation/' + corp.corporation_id, - }), - new Element('br') + var wrapper = $('wrapper'); + Object.each(results, function(list, key) { + if (!list.length) + return; + var div = new Element('div').grab( + new Element('h2', {'html': key[0].toUpperCase() + key.substr(1)}) ); + var key_singular = key.substr(0, key.length-1) + var name_key = key_singular + '_name'; + var id_key = key_singular + '_id'; + list.each(function(entity) { + div.adopt( + new Element('a', { + 'html': entity[name_key], + 'href': '/' + key_singular + '/' + entity[id_key], + }), + new Element('br') + ); + }); + wrapper.grab(div); }); }); }); diff --git a/web/templates/search.html b/web/templates/search.html index d84c5da..7373287 100644 --- a/web/templates/search.html +++ b/web/templates/search.html @@ -4,9 +4,9 @@ {% end %} -{% block main %} - -

Corporations

-
+{% block css %} + +{% end %} +{% block main %} {% end %} -- cgit v1.2.3