diff options
author | raylu <raylu@gridium.com> | 2013-10-20 03:07:32 -0700 |
---|---|---|
committer | raylu <raylu@gridium.com> | 2013-10-20 03:19:40 -0700 |
commit | 031daa32bbe11417d0dfb968dfbf888f0dc65d86 (patch) | |
tree | 33491f786aa8edf5b6548b1d5e518a2834e4c0a9 /web | |
parent | 585ad90d3cc59ad7d4fd306170b710699e48efda (diff) | |
download | ykill-031daa32bbe11417d0dfb968dfbf888f0dc65d86.tar.xz |
rewrite as api
Diffstat (limited to 'web')
-rw-r--r-- | web/api.py | 57 | ||||
-rw-r--r-- | web/static/js/common.js | 6 | ||||
-rw-r--r-- | web/static/js/corporation.js | 49 | ||||
-rw-r--r-- | web/static/js/kill.js | 30 | ||||
-rw-r--r-- | web/static/js/search.js | 11 | ||||
-rw-r--r-- | web/templates/base.html | 7 | ||||
-rw-r--r-- | web/templates/corporation.html | 26 | ||||
-rw-r--r-- | web/templates/kill.html | 21 | ||||
-rw-r--r-- | web/templates/search.html | 10 |
9 files changed, 177 insertions, 40 deletions
diff --git a/web/api.py b/web/api.py new file mode 100644 index 0000000..4993393 --- /dev/null +++ b/web/api.py @@ -0,0 +1,57 @@ +import datetime +import json + +import tornado.web + +from config import web as config +import db.queries + +class JSONDateEncoder(json.JSONEncoder): + def default(self, data): + if isinstance(data, datetime.datetime): + return str(data) + return super(JSONDateEncoder, self).default(data) + +class APIHandler(tornado.web.RequestHandler): + def set_default_headers(self): + self.set_header('Access-Control-Allow-Origin', '*') + self.set_header('Access-Control-Allow-Headers', 'X-Requested-With, X-Request') + + def compute_etag(self): + return None + + def respond_json(self, data): + self.set_header('Content-Type', 'application/json; charset=UTF-8') + for chunk in JSONDateEncoder().iterencode(data): + self.write(chunk) + self.finish() + + def options(self, *args): + return + +class SearchHandler(APIHandler): + def get(self): + q = self.get_argument('q') + data = db.queries.search(q) + self.respond_json(data) + +class CorporationHandler(APIHandler): + def get(self, corp_id): + kills = db.queries.corporation(corp_id) + self.respond_json(kills) + +class KillHandler(APIHandler): + def get(self, kill_id): + kill = db.queries.kill(kill_id) + self.respond_json(kill) + +def start(): + tornado.web.Application( + handlers=[ + (r'/search', SearchHandler), + (r'/corporation/(.+)', CorporationHandler), + (r'/kill/(.+)', KillHandler), + ], + debug=config.debug, + ).listen(config.api_port) + print('listening on :%d' % config.api_port) diff --git a/web/static/js/common.js b/web/static/js/common.js new file mode 100644 index 0000000..4592cbe --- /dev/null +++ b/web/static/js/common.js @@ -0,0 +1,6 @@ +window.ykill.api = function (path, cb) { + new Request.JSON({ + 'url': ykill.api_host + path, + 'onSuccess': cb, + }).get(); +} diff --git a/web/static/js/corporation.js b/web/static/js/corporation.js new file mode 100644 index 0000000..10a1753 --- /dev/null +++ b/web/static/js/corporation.js @@ -0,0 +1,49 @@ +window.addEvent('domready', function() { + var corp_id = document.location.pathname.split('/').getLast(); + ykill.api('/corporation/' + corp_id, function(kills) { + var div = $('kills'); + kills.each(function(kill) { + 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.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']); + } + + div.adopt(a); + div.adopt(new Element('br')); + }); + }); +}); diff --git a/web/static/js/kill.js b/web/static/js/kill.js new file mode 100644 index 0000000..67f819d --- /dev/null +++ b/web/static/js/kill.js @@ -0,0 +1,30 @@ +window.addEvent('domready', function() { + var kill_id = document.location.pathname.split('/').getLast(); + ykill.api('/kill/' + kill_id, function(data) { + var kill = data.kill; + $('kill_time').appendText(kill['kill_time']); + $('solar_system').appendText(kill['solarSystemName'] + ' (' + kill['security'].toFixed(1) + ')'); + + var div = $('characters'); + data.characters.each(function(char) { + div.adopt(new Element('img', { + 'src': '//image.eveonline.com/Character/' + char['character_id'] + '_64.jpg', + 'alt': char['character_name'], + })); + div.appendText(char['character_name']); + div.adopt(new Element('img', { + 'src': '//image.eveonline.com/Corporation/' + char['corporation_id'] + '_64.png', + 'alt': char['corporation_name'], + })); + div.appendText(char['corporation_name']); + if (char['alliance_id']) { + div.adopt(new Element('img', { + 'src': '//image.eveonline.com/Alliance/' + char['alliance_id'] + '_64.png', + 'alt': char['alliance_name'], + })); + div.appendText(char['alliance_name']); + } + div.adopt(new Element('br')); + }); + }); +}); diff --git a/web/static/js/search.js b/web/static/js/search.js new file mode 100644 index 0000000..faeb8fe --- /dev/null +++ b/web/static/js/search.js @@ -0,0 +1,11 @@ +window.addEvent('domready', function() { + ykill.api('/search' + document.location.search, function(results) { + var corps = $('corps'); + results.corporations.each(function(corp) { + corps.grab(new Element('a', { + 'html': corp.corporation_name, + 'href': '/corporation/' + corp.corporation_id, + })); + }); + }); +}); diff --git a/web/templates/base.html b/web/templates/base.html index afd3c68..ffbe99b 100644 --- a/web/templates/base.html +++ b/web/templates/base.html @@ -3,6 +3,13 @@ <head> <link rel="stylesheet" type="text/css" href="/css/base.css" /> <script src="//ajax.googleapis.com/ajax/libs/mootools/1.4.5/mootools.js"></script> + <script> + window.ykill = { + 'api_host': '{{ api_host }}', + }; + </script> + <script src="/static/js/common.js"></script> + {% block js %}{% end %} </head> <body> <div id="wrapper"> diff --git a/web/templates/corporation.html b/web/templates/corporation.html index 0afe4c3..66eceb2 100644 --- a/web/templates/corporation.html +++ b/web/templates/corporation.html @@ -1,27 +1,11 @@ {% extends "base.html" %} +{% block js %} + <script src="/static/js/corporation.js"></script> +{% end %} + {% block main %} -{% for kill in kills %} - <a href="/kill/{{ kill['kill_id'] }}"> - {{ kill['kill_time'] }} - <img src="//image.eveonline.com/Character/{{ kill['victim']['character_id'] }}_32.jpg" alt="{{ kill['victim']['character_name'] }}"> - {{ kill['victim']['character_name'] }} - <img src="//image.eveonline.com/Corporation/{{ kill['victim']['corporation_id'] }}_32.png" alt="{{ kill['victim']['corporation_name'] }}"> - {{ kill['victim']['corporation_name'] }} - {% if kill['victim']['alliance_id'] != 0 %} - <img src="//image.eveonline.com/Alliance/{{ kill['victim']['alliance_id'] }}_32.png" alt="{{ kill['victim']['alliance_name'] }}"> - {{ kill['victim']['alliance_name'] }} - {% end %} - <img src="//image.eveonline.com/Character/{{ kill['final_blow']['character_id'] }}_32.jpg" alt="{{ kill['final_blow']['character_name'] }}"> - {{ kill['final_blow']['character_name'] }} - <img src="//image.eveonline.com/Corporation/{{ kill['final_blow']['corporation_id'] }}_32.png" alt="{{ kill['final_blow']['corporation_name'] }}"> - {{ kill['final_blow']['corporation_name'] }} - {% if kill['final_blow']['alliance_id'] != 0 %} - <img src="//image.eveonline.com/Alliance/{{ kill['final_blow']['alliance_id'] }}_32.png" alt="{{ kill['final_blow']['alliance_name'] }}"> - {{ kill['final_blow']['alliance_name'] }} - {% end %} - </a><br> -{% end %} +<div id="kills"></div> {% end %} diff --git a/web/templates/kill.html b/web/templates/kill.html index bb286bc..112c2e8 100644 --- a/web/templates/kill.html +++ b/web/templates/kill.html @@ -1,21 +1,14 @@ {% extends "base.html" %} +{% block js %} + <script src="/static/js/kill.js"></script> +{% end %} + {% block main %} -{{ kill['kill_time'] }}<br> -{{ kill['solarSystemName'] }} ({{ round(kill['security'], 1) }})<br> +<div id="kill_time"></div> +<div id="solar_system"></div> -{% for char in characters %} - <img src="//image.eveonline.com/Type/{{ char['ship_type_id'] }}_64.png" alt="{{ char ['typeName'] }}"> - <img src="//image.eveonline.com/Character/{{ char['character_id'] }}_64.jpg" alt="{{ char['character_name'] }}"> - {{ char['character_name'] }} - <img src="//image.eveonline.com/Corporation/{{ char['corporation_id'] }}_64.png" alt="{{ char['corporation_name'] }}"> - {{ char['corporation_name'] }} - {% if char['alliance_id'] != 0 %} - <img src="//image.eveonline.com/Alliance/{{ char['alliance_id'] }}_64.png" alt="alliance"> - {{ char['alliance_name'] }} - {% end %} - <br> -{% end %} +<div id="characters"></div> {% end %} diff --git a/web/templates/search.html b/web/templates/search.html index 03980af..d84c5da 100644 --- a/web/templates/search.html +++ b/web/templates/search.html @@ -1,12 +1,12 @@ {% extends "base.html" %} +{% block js %} + <script src="/static/js/search.js"></script> +{% end %} + {% block main %} <h2>Corporations</h2> -{% for corp in corps %} - <a href="/corporation/{{ corp['corporation_id'] }}"> - {{ corp['corporation_name'] }} - </a> -{% end %} +<div id="corps"></div> {% end %} |